Elasticsearch 只读用户

chx*_*chx 8 elasticsearch

我想向我的集群添加一个只读用户,我的应用程序在其所有索引前面加上myapp_.

遵循https://www.elastic.co/blog/user-impersonation-with-x-pack-integrating-third-party-auth-with-kibana(对于这个唯一实际可用的博客文章来说,这是一个奇怪的标题.. .)我首先添加了一个角色

curl -XPOST '$ELASTIC_URL:9200/_xpack/security/role/name_of_readonly_role' \
-H 'Content-Type: application/json' \
-d'{"indices":[{"names":"myapp_*","privileges":["read"]}]}'
Run Code Online (Sandbox Code Playgroud)

然后将其添加到用户:

curl -XPOST $ELASTIC_URL:9200/_xpack/security/user/name_of_user \
-H 'Content-Type: application/json' \
-d'{"roles":["name_of_readonly_role"],"password":"some_password"}'
Run Code Online (Sandbox Code Playgroud)

但当打开时$ELASTIC_URL:9200我得到了

action [cluster:monitor/main] is unauthorized for user
Run Code Online (Sandbox Code Playgroud)

下一步是什么?

chx*_*chx 2

据我所知,完全缺乏这方面的示例,要解决此问题,需要重新运行角色命令-d'{"cluster":["monitor"], "indices":[{"names":"myapp_*","privileges":["read"]}]}'(相同的curl命令适用于创建或更新角色)。这似乎泄露了所有索引的名称,但除了它们的名称之外没有太多其他内容,我对此感到满意。即使这对于 ElasticSearch Head 浏览器扩展等某些应用程序来说似乎还不够,我还需要添加索引级别监视器权限:-d'{"cluster":["monitor"], "indices":[{"names":"myapp_*","privileges":["read", "monitor"]}]}'。角色更改会自动应用于用户。

我仍然不知道错误消息中的“/main”与什么相关,但这有效。