Logstash无法向ES索引数据:用户无indices:admin/auto_create权限
Elasticsearch用户无法自动创建索引的权限问题解决
问题背景
通过脚本创建拥有多角色的demoTester用户:
/usr/share/elasticsearch/bin/elasticsearch-users useradd demoTester -p demoTester -r kibana_admin,logstash_admin,beats_admin,logstash_system,monitoring_user,watcher_admin,editor,machine_learning_admin
部署后Logstash正常监听5044端口且日志已发送,但demoTester用户无法向Elasticsearch写入数据,报错信息:
error=>{"type"=>"security_exception", "reason"=>"action [indices:admin/auto_create] is unauthorized for user [demotester] with roles [watcher_admin,editor,monitoring_user,logstash_system,beats_admin,machine_learning_admin,kibana_admin,logstash_admin] on indices [demo-2022.10.27], this action is granted by the index privileges [auto_configure,create_index,manage,all]}}
Logstash输出配置片段:
output { elasticsearch { ssl => true ssl_certificate_verification => true cacert => '/etc/logstash/certs/http_ca.crt' user => demoTester password => demoTester hosts => ["https://10.0.8.19:9200"] index =>"demo-%{+YYYY.MM.dd}" } }
问题原因
报错明确指出,用户demoTester缺少针对demo-*索引的indices:admin/auto_create权限。当前分配的系统角色(如logstash_admin、kibana_admin等)默认权限不包含自定义前缀索引的自动创建权限,因此无法完成索引自动创建及数据写入。
解决步骤
1. 创建自定义角色,赋予目标索引权限
执行以下命令创建名为demo_index_operator的自定义角色,授予其对demo-*索引的自动创建、读写等核心权限:
/usr/share/elasticsearch/bin/elasticsearch-users roledemo_index_operator -a "indices:admin/auto_create,indices:data/write/*,indices:data/read/*" -i "demo-*"
说明:
-a指定需要赋予的权限,-i限定权限作用的索引模式,确保权限仅作用于业务所需的索引。
2. 更新demoTester用户的角色列表
将新创建的自定义角色添加到demoTester用户的角色集合中:
/usr/share/elasticsearch/bin/elasticsearch-users usermod demoTester -r kibana_admin,logstash_admin,beats_admin,logstash_system,monitoring_user,watcher_admin,editor,machine_learning_admin,demo_index_operator
3. 验证权限配置(可选)
通过Elasticsearch的权限验证API确认权限是否生效:
curl -u demoTester:demoTester -k "https://10.0.8.19:9200/_security/user/demoTester/_has_privileges" -H "Content-Type: application/json" -d '{ "index": [ { "names": ["demo-*"], "privileges": ["auto_configure", "create_index", "write"] } ] }'
若返回结果中authorized字段为true,则表示权限配置正确。
4. 重启Logstash(可选)
如果配置后仍无法写入数据,重启Logstash使配置生效:
systemctl restart logstash
注意事项
- 避免滥用
logstash_system角色:该角色为Logstash内部组件预留权限,用于监控和自身数据写入,不应用于业务索引操作,防止权限冲突或安全风险。 - 遵循最小权限原则:仅授予用户完成业务所需的必要权限,避免过度授权,提升系统安全性。
内容的提问来源于stack exchange,提问作者Didi
相关产品推荐
相关产品推荐

