Elasticsearch 索引 blocks:深入探讨数据保护

news/2024/5/19 23:10:31

Elasticsearch 作为搜索和分析数据的首选分布式引擎在技术领域脱颖而出,尤其是在处理日志、事件和综合文本搜索时。 它的与众不同之处在于它如何让你使用各种块选项调整对其索引的访问。 这对于那些负责技术项目的人(比如管理员和编码员)来说非常方便,他们需要保持数据可靠、管理资源或遵守严格的安全规则。

通常,我们必须停止对索引设置的任何调整。 诀窍是依靠 Elasticsearch 的块设置,更准确地说,依靠 blocks.metadata 设置。 将此设置翻转为 true 意味着没有人可以弄乱索引的元数据,无论是读取还是写入。

假设你正在处理一个多租户 SaaS 应用程序,每个租户都有自己的索引。 你已经整理了所有这些索引及其独特的设置和映射。 现在,你希望确保所有内容都按照 你在每个租户中设置的方式保持不变。 这就是 blocks.metadata 设置发挥作用的地方。 使用方法如下:

PUT my_data/_settings
{"blocks.metadata": true
}

一旦设定这个,比如我再也无法改变它的元数据。我们可以进行如下的尝试:

PUT twitter/_doc/1
{"content": "This is Xiaoguo from Elastic"
}

在上面,我们创建了一个叫做 twitter 的索引。我们可以看到它的设置:

GET twitter/_settings
{"twitter": {"settings": {"index": {"routing": {"allocation": {"include": {"_tier_preference": "data_content"}}},"number_of_shards": "1","provided_name": "twitter","creation_date": "1714352386891","number_of_replicas": "1","uuid": "azY4f_smTymShGLc8R6m1g","version": {"created": "8503000"}}}}
}

如上所示,我们可以看到 number_of_replicas 的值为 1。我们可以通过如下的方法来进行修改它的值为 0:

PUT twitter/_settings
{"number_of_replicas": 0
}

我们再次进行查看它的设置:

GET twitter/_settings
{"twitter": {"settings": {"index": {"routing": {"allocation": {"include": {"_tier_preference": "data_content"}}},"number_of_shards": "1","provided_name": "twitter","creation_date": "1714352386891","number_of_replicas": "0","uuid": "azY4f_smTymShGLc8R6m1g","version": {"created": "8503000"}}}}
}

很显然,number_of_replicas 的值现在变为 0。假如我们不想任何人对这个值进行改变,那么我们可以通过如下的命令来进行设置:

PUT twitter/_settings
{"blocks.metadata": true
}

那么它现在的设置为:

GET twitter/_settings
{"error": {"root_cause": [{"type": "cluster_block_exception","reason": "index [twitter] blocked by: [FORBIDDEN/9/index metadata (api)];"}],"type": "cluster_block_exception","reason": "index [twitter] blocked by: [FORBIDDEN/9/index metadata (api)];"},"status": 403
}

显然,我们现在读取不了它的任何的设置,并且我们来尝试对它进行修改:

PUT twitter/_settings
{"number_of_replicas": 1
}
{"error": {"root_cause": [{"type": "cluster_block_exception","reason": "index [twitter] blocked by: [FORBIDDEN/9/index metadata (api)];"}],"type": "cluster_block_exception","reason": "index [twitter] blocked by: [FORBIDDEN/9/index metadata (api)];"},"status": 403
}

我们也不能对它做任何的修改。除非我们再次把上面的 blocks.metadata 设置为 false:

PUT twitter/_settings
{"index.blocks.metadata": false
}

然后,我们再次修改 number_of_replicas 的值为 1:

PUT twitter/_settings
{"number_of_replicas": 1
}

我们再次通过如下的命令来进行确认:

GET twitter/_settings
{"twitter": {"settings": {"index": {"routing": {"allocation": {"include": {"_tier_preference": "data_content"}}},"number_of_shards": "1","blocks": {"metadata": "false"},"provided_name": "twitter","creation_date": "1714352386891","number_of_replicas": "1","uuid": "azY4f_smTymShGLc8R6m1g","version": {"created": "8503000"}}}}
}

为什么使用索引 blocks?

你可能想知道为什么有人会选择使用索引块。 以下是一些常见原因:

  • 维护和升级:当系统维护或升级时,管理员必须锁定数据以保持一切一致。
  • 数据完整性:在数据必须保持不变的情况下(例如存档日志或历史记录),write blocks 会派上用场。
  • 资源管理:有时,索引可能会占用太多资源。 在这种情况下,管理员可能会暂时停止读取或写入。
  • 安全性:对于特别敏感的数据,read blocks 是一个很好的工具,可以防止不应该访问的人进入。

现在,你可能会想,“使用 RBAC(基于角色的访问控制)怎么样?” 这是一个有效的观点。 确实,为什么不呢? 你可以在这里更深入地了解这一点:

User authorization | Elasticsearch Guide [8.13] | Elastic。你也可以深入阅读文章 “Elasticsearch:用户安全设置” 及 “Elasticsearch:将文档级安全性 (DLS) 添加到你的内部知识搜索”。

让我们分解不同类型的块

Elasticsearch 附带了一系列块设置,每个块设置都有特定的用途:

  • block.read_only:这就像主开关。 它停止对索引数据及其元数据的任何读取。 当您需要确保索引中的任何内容(无论是数据还是元数据)都不会被读取时,这是首选选项。
  • block.read:名副其实; 此设置停止所有读取操作。
  • blocks.write:这个是关于停止写操作的。 如果索引中的数据应保持原样,那么此设置是您的朋友。
  • blocks.metadata:这会阻止索引元数据的读取和写入。 元数据包括设置、映射和其他配置。 通过阻止元数据操作,可以确保索引配置保持不变。

设置和拆除 blocks

将块放置到位非常简单 - 使用 PUT 请求,如我们在前面的示例中看到的那样。 当提升该块时,你只需调整索引设置,将块值切换为 false。 例如,如果您想摆脱 write block:

PUT sample-01/_settings
{"index.blocks.write": false
}

以上面的例子为例,我们首先运行如下的命令:

PUT twitter/_settings
{"index.blocks.write": true
}

我们尝试写如下一个数据:

PUT twitter/_doc/2
{"content": "This is a test"
}
{"error": {"root_cause": [{"type": "cluster_block_exception","reason": "index [twitter] blocked by: [FORBIDDEN/8/index write (api)];"}],"type": "cluster_block_exception","reason": "index [twitter] blocked by: [FORBIDDEN/8/index write (api)];"},"status": 403
}

很显然,我们这次不能写入数据了。这个是因为 twitter 索引的设置 "index.blocks.write": true。我们可以通过如下的命令来对它进行解锁:

PUT twitter/_settings
{"index.blocks.write": false
}

我们再次对她进行写入:

PUT twitter/_doc/2
{"content": "This is a test"
}
{"_index": "twitter","_id": "2","_version": 1,"result": "created","_shards": {"total": 2,"successful": 1,"failed": 0},"_seq_no": 1,"_primary_term": 1
}

很显然,这次的操作是成功的。

根据 Elastic 官方文档,我们也可以通过如下格式的命令来对它进行操作:

PUT /my-index-000001/_block/write

比如:

PUT /twitter/_block/write

运行完上面的命令后,它讲阻止我们向 twitter 写入:

PUT twitter/_doc/3
{"content": "This is a another test"
}

上述命令将会失败。

结论

Elasticsearch 提供了一组可靠的关键索引块设置来管理对索引的访问。 接触这些设置至关重要,尤其是当您的目标包括保持数据完整性、有效处理资源或提高安全性时。 与任何强大的工具一样,明智地使用这些设置并清楚地了解它们的含义至关重要。


http://www.mrgr.cn/p/85688145

相关文章

8W 1.5KVDC 隔离宽电压输入 DC/DC 电源模块——TP08DA 系列

TP08DA系列电源模块额定输出功率为8W,外形尺寸为31.80*20.30*10.00,应用于2:1,4:1电压输入范围 9-18V,18-36V,36-72V9V-36V和18V-72VDC的输入电压环境,输出电压精度可达1%,具有输出短路保护等功能&#xff…

前端使用 Konva 实现可视化设计器(9)- 另存为SVG

请大家动动小手,给我一个免费的 Star 吧~ 大家如果发现了 Bug,欢迎来提 Issue 哟~ github源码 gitee源码 示例地址另存为SVG 这一章增强了另存为的能力,实现“另存为SVG”,大概是全网唯一的实例分享了吧。灵感来源:react-konva-custom-context-canvas-for-use-with-canvas…

如何判断一个js对象是否存在循环引用

这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助一、背景 在前端JSON.stringfy是我们常用的一个方法,可以将一个对象序列化。 例如将如下对象序列化const person = { name: kalory, age:18}JSON.stringfy(person) // 结果 {"name":"kalory"…

国内如何下载TikTOK,手机刷机教程

最近很多玩家都来问怎么刷机?手机环境怎么搭建?这里给大家整理了苹果IOS刷机教程 1.iOS下载教程 : 步骤一:手机调试 苹果手机系统配置推荐:iPhone6S以上,16G。 注意:如果是选择购入二手手机…

智慧交通系统:未来出行,从这里开始

随着城市化进程的加快,交通拥堵、事故频发、停车难等问题日益凸显,传统交通管理模式已难以满足现代社会的需求。智慧交通系统作为解决这些问题的关键,通过集成创新技术,实现交通管理的智能化、信息化,提高交通系统的运行效率和安全性,为公众出行提供便捷服务。 项目背景 …

逆向学习-证明自己吧

PeiD查看一下,无壳IDA打开静态分析,提示key就是输入的值 F5反汇编看下伪代码,发现sub_401060函数是逻辑判断的关键 可以看到想要正确返回有2个条件,但第一个条件只是把v5变成空值,但并不能得到什么内容跟输入的值有关,还是要看第二个条件 看下整个函数注意运输逻辑 1.首…

小白也能轻松玩转 Windows

😊作为一个资深的 Windows 重度用户,我发现身边不少小白朋友在使用电脑时,总是会遇到这样那样的问题: "啊,我的 C 盘怎么又满了,电脑好卡啊!" 🤦‍♂️"哎呀,桌面图标太多了,都找不到文件了。" 😵"这个软件老是弹广告,烦死了!" 🙄 是不是…

Mybatis-Plus 入门

Mybatis-Plus 简介 Mybatis -Plus (简称MP) 是一个Mybatis的增强工具,在Mybatis的基础上只做增强不做改变,为简化开发,提高效率而生。 愿景: 我们的愿景是成为 MyBatis 最好的搭档,就像 魂斗罗 中的 1P、2P,基友搭配,效率翻倍。特性:无侵入:只做增强不做改变,引入它不…

Golang | Leetcode Golang题解之第68题文本左右对齐

题目: 题解: // blank 返回长度为 n 的由空格组成的字符串 func blank(n int) string {return strings.Repeat(" ", n) }func fullJustify(words []string, maxWidth int) (ans []string) {right, n : 0, len(words)for {left : right // 当前…

idea提示 CreateProcess error=206, 文件名或扩展名太长有哪些具体的解决方法

背景: 项目启动后提示CreateProcess error206,通常我本地是将shorten command line改成如下就可以解决,但是今天遇到一个,无论这里怎么设置都是启动提示扩展名太长,经过一番处理问题终于解决,特此记录一下。…

书生浦语训练营第2期-第7节笔记

一、为什么要研究大模型的评测? 首先,研究评测对于我们全面了解大型语言模型的优势和限制至关重要。尽管许多研究表明大型语言模型在多个通用任务上已经达到或超越了人类水平,但仍然存在质疑,即这些模型的能力是否只是对训练数据的…

AI 数据观 | TapData Cloud + MongoDB Atlas:大模型与 RAG 技术有机结合,落地实时工单处理智能化解决方案

基于大语言模型 LLM 和检索增强技术 RAG,如何借助 TapData Cloud 和 MongoDB Atlas,实现企业内部工单处理的智能化和自动化,提高工作效率和用户体验。本篇为「AI 数据观」系列文章第二弹,在这里,我们将进一步探讨 AI 行业的数据价值。以 RAG 的智能工单应用场景为例,共同…

远程工作的数据安全挑战和解决策略

随着远程工作的普及,数据安全面临了前所未有的挑战。企业在应对这些挑战时,必须采取切实有效的策略来保护敏感信息。以下是远程工作数据安全的主要挑战和相应的解决策略:数据安全挑战设备丢失或被盗:员工在外工作时,笔记本电脑和移动设备更易丢失或被盗,这可能导致存储在…

使用pandas的merge()和join()函数进行数据处理

目录 一、引言 二、pandas的merge()函数 基本用法 实战案例 三、pandas的join()函数 基本用法 实战案例 四、merge()与join()的比较与选择 使用场景: 灵活性: 选择建议: 五、进阶案例与代码 六、总结 一、引言 在数据分析和处理…

java容器化项目改造

docker java项目容器化改造 前后端分离项目 前端 https://gitee.com/yuco/eladmin-web.git 后端 https://gitee.com/yuco/eladmin.git要素:vue npm springboot mysql redisjava后端容器化 思路: 了解在物理机虚拟机的部署流程,然后编写dockerfile进行容器化部署。 java项目,…

fabric搭建生产网络

fabric搭建生产网络 一、生成组织结构与身份证书 解包 hyperledger-fabric-linux-amd64-2.5.0.tar.gz 1.1、crypto-config.yaml配置文件 ./bin/cryptogen showtemplate > crypto-config.yaml 将crypto-config.yaml内容修改为: # -------------------------…

vue - 父子组件生命周期

vue - 父子组件生命周期 题目 Vue 的父组件和子组件生命周期钩子函数执行顺序? Vue 的父组件和子组件生命周期钩子函数执行顺序可以归类为以下 4 部分:加载渲染过程 父 beforeCreate -> 父 created -> 父 beforeMount -> 子 beforeCreate -> 子 created -> 子…

存储故障后oracle报—ORA-01122/ORA-01207故障处理---惜分飞

客户存储异常,通过硬件恢复解决存储故障之后,oracle数据库无法正常启动(存储cache丢失),尝试recover数据库报ORA-00283 ORA-01122 ORA-01110 ORA-01207错误 以前处理过比较类似的存储故障case:又一起存储故障导致ORA-00333 ORA-00312恢复存储故障,强制拉库报ORA-600 kcbzib_kcr…

GPS与精致农业 无人机应用 农业遥感 农业类

全球定位系统是美国国防部主要为满足军事部门对海上、陆地和空中设施进行高精度导航和定位的要求而建立的。GPS系统最基本的特点是以“多星、高轨、高频、测量-测距”为体制,以高精度的原子钟为核心。GPS作为新一代卫星导航与定位系统,不仅具有全球性、全…