不允许重新索引Elasticsearch?

Jar*_*red 3 amazon-web-services elasticsearch

我已经设置了我的AWS Elasticsearch实例,以便任何人都可以执行任何操作(创建,删除,搜索等).

这些是我的权限(用我的Elasticsearch ARN替换$ myARN):

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "*"
      },
      "Action": "es:*",
      "Resource": "$myARN"
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

当我PUT一个新的索引:

 PUT http://my-elasticsearch-domain.us-west-2.es.amazonaws.com/index-name
Run Code Online (Sandbox Code Playgroud)

或者我DELETE是一个索引:

 DELETE http://my-elasticsearch-domain.us-west-2.es.amazonaws.com/index-name
Run Code Online (Sandbox Code Playgroud)

我明白了:

{
  "acknowledged": true
}
Run Code Online (Sandbox Code Playgroud)

这意味着我可以创建和删除索引但是当我尝试重新POST索引时,我得到:

{
  "Message": "Your request: '/_reindex' is not allowed."
}
Run Code Online (Sandbox Code Playgroud)

我是否必须签署此请求?为什么我必须签署此请求但不创建或删除索引?

Val*_*Val 5

原因很简单,因为Amazon Elasticsearch Service是一种受限制的环境,您无法访问由Elasticsearch的准系统安装提供的所有服务和端点.

您可以检查允许在Amazon Elasticsearch Service上使用的端点列表,但_reindex不属于该列表.

UPDATE

不过,还有另一种方法可以达到你想要的效果.通过利用Logstash,您可以从ES获取数据,应用您希望的任何转换并将其汇回ES.

input {
  elasticsearch {
   hosts => ["my-elasticsearch-domain.us-west-2.es.amazonaws.com:80"]
   index => "index-name"
   docinfo => true
  }
}
filter {
 mutate {
  remove_field => [ "@version", "@timestamp" ]
 }
 # add other transformations here
}
output {
 elasticsearch {
   hosts => ["my-elasticsearch-domain.us-west-2.es.amazonaws.com:80"]
   manage_template => false
   index => "%{[@metadata][_index]}"
   document_type => "%{[@metadata][_type]}"
   document_id => "%{[@metadata][_id]}"
 }
}
Run Code Online (Sandbox Code Playgroud)