如何在python中为ElasticSearch创建只读客户端?

时间:2016-12-07 10:57:50

标签: python elasticsearch

我想从ES读取数据但不想意外地向其写入数据(没有索引操作)。这只是一个安全措施,以便以后修改查询功能的其他人不允许插入数据。

2 个答案:

答案 0 :(得分:1)

当你说你想要只读客户端时。客户强调您的系统中可能有其他客户端用于同一群集。然后阻止整个索引为只读将阻止所有客户端。您必须有一个在群集中写入/更新数据的作业。

如果这是您的用例,请将客户端视为elasticsearch用户,每个用户对您的群集具有不同的访问策略。

弹性搜索提供shield plugin来实现客户端身份验证和授权。

您可以在配置文件中创建具有不同访问策略的多个ES用户。

bin/shield/esusers useradd es_admin -r admin

使用角色api创建角色并将每个用户专用于每个角色。

POST /_shield/role/my_admin_role
{
  "cluster": ["all"], 
  "indices": [ 
    {
      "names": [ "index1", "index2" ], 
      "privileges": ["read"]         
    }
  ],
  "run_as": [ "other_user" ] 
}

如果您想远离盾牌,您还可以在es es cluster之前为nginx reverse proxy配置为管理员授权。

答案 1 :(得分:0)

您可以将索引参数设置为“只读”:

curl -XPUT localhost:9200/test/_settings -d '{
    "index" : {
        "blocks" : {
            "read_only" : true
        }
    }
}'

所有索引设置都记录在此处:https://www.elastic.co/guide/en/elasticsearch/reference/current/index-modules.html

以下是更新索引设置的方法:https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-update-settings.html

但这是一项非常有限的操作。