如何防止Elasticsearch索引误写删,管控Kibana Dev Tools用户索引权限
针对Elasticsearch和Kibana权限控制的实用解决方案
1. 防止Elasticsearch索引被无意写入/删除
要避免索引数据被误操作,我建议从权限隔离、索引配置和操作监控三个层面入手:
- 用Elasticsearch内置安全角色做精细化权限控制
创建专门的角色,严格卡控不同用户对索引的操作权限:- 普通用户只给
read权限,直接禁用write、delete、create_index这类危险操作; - 需要修改数据的用户,仅授予必要的
read_write权限,而且要限定在指定索引范围内,别给全局权限。
举个创建只读角色的Dev Tools命令:
PUT /_security/role/read-only-all-indexes { "indices": [ { "names": ["*"], "privileges": ["read"] } ] } - 普通用户只给
- 设置索引级别的写入/删除锁
如果要临时或者永久保护某个特定索引,可以直接给它加操作锁:- 阻止写入(包括更新、删除数据):
PUT /your_index/_settings {"index.blocks.write": true} - 阻止删除索引本身:
PUT /your_index/_settings {"index.blocks.delete": true}
注意:这个锁是全局生效的,哪怕是管理员也会被限制,所以用之前一定要确认好需求哈。
- 阻止写入(包括更新、删除数据):
- 用索引模板给新索引默认加保护
要是你希望所有新创建的索引都自动带上基础保护,可以整个索引模板:PUT /_index_template/protected-template { "index_patterns": ["*"], "template": { "settings": { "index.blocks.write": false // 初始可以设为false,需要保护时再修改,按需调整就行 } } } - 开审计日志监控操作痕迹
开启Elasticsearch的审计日志,把所有针对索引的写入、删除操作都记录下来,万一真出了误操作,也能快速找到是谁干的,还能追溯操作内容。
2. 限制Kibana Dev Tools用户对特定索引的修改
核心就是把Elasticsearch的角色权限和Kibana的访问控制结合起来,实现不同用户对特定索引的权限分离,具体步骤如下:
- 第一步:创建Elasticsearch专属角色
针对你要保护的索引,创建两个角色:- 只读角色(只能看数据,改不了):
PUT /_security/role/specific-index-read-only { "indices": [ { "names": ["your_target_index"], "privileges": ["read", "view_index_metadata"] } ], "kibana": [ { "privileges": ["dev_tools_access"], // 只给Dev Tools访问权限,其他功能不让碰 "spaces": ["*"] } ] }- 读写角色(允许修改指定索引):
PUT /_security/role/specific-index-read-write { "indices": [ { "names": ["your_target_index"], "privileges": ["read_write", "delete", "create_index"] } ], "kibana": [ { "privileges": ["dev_tools_access"], "spaces": ["*"] } ] } - 第二步:创建用户并绑定对应角色
分别给只读和读写权限创建用户:PUT /_security/user/readonly-user { "password": "your_strong_password", "roles": ["specific-index-read-only"], "full_name": "Read Only Dev Tools User" } PUT /_security/user/readwrite-user { "password": "your_strong_password", "roles": ["specific-index-read-write"], "full_name": "Read Write Dev Tools User" } - 第三步:验证权限效果
用readonly-user登录Kibana Dev Tools,试试执行写入命令比如POST your_target_index/_doc/1 { "field": "test" },肯定会收到权限不足的报错;而readwrite-user就能正常执行这些操作。 - 额外小提示
要是你想彻底限制用户只能用Dev Tools,别让他们碰Dashboard、Discover这些功能,在配置Kibana角色权限的时候,就只勾选Dev Tools Access这一项就行。
内容的提问来源于stack exchange,提问作者soumitra goswami
相关产品推荐
相关产品推荐

