无法使用CLI更新ElasticSearch访问策略

时间:2018-07-26 13:50:43

标签: elasticsearch aws-cli

我有一个类似于以下内容的访问策略:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "*"
      },
      "Action": "es:*",
      "Resource": "arn:aws:es:us-east-1:123456789012:domain/es01-vpc01-prod-useast1/*",
      "Condition": {
        "IpAddress": {
          "aws:SourceIp": [
            "123.456.123.456"
          ]
        }
      }
    }
  ]
}

据我了解,这应该向IP 123.456.123.456的任何人授予与所有 es 相关的权限。这确实适用于大多数情况:我可以访问ElasticSearch,也可以执行CLI命令,例如aws es describe-elasticsearch-domain --domain-name es01-vpc01-prod-useast1

但是,由于某些原因,我无法使用以下命令从CLI修改访问策略:

aws es update-elasticsearch-domain-config --domain-name es01-vpc01-prod-useast1 --access-policies '{\"Version\": \"2012-10-17\",\"Statement\": [{\"Effect\": \"Allow\",\"Principal\": {\"AWS\": \"*\"},\"Action\": \"es:*\",\"Resource\": \"arn:aws:es:us-east-1:123456789012:domain/es01-vpc01-prod-useast1/*\",\"Condition\": {\"IpAddress\": {\"aws:SourceIp\": [\"123.456.123.456\"]}}}]}'

我收到如下错误:

  

调用时发生错误(AccessDeniedException)   UpdateElasticsearchDomainConfig操作:用户:   arn:aws:iam :: 123456789012:user / MyUser无权   对资源执行es:UpdateElasticsearchDomainConfig:   arn:aws:es:us-east-1:123456789012:domain / es01-vpc01-prod-useast1

我尝试了各种访问策略,例如将特定角色添加到访问策略中,例如

{
  "Effect": "Allow",
  "Principal": {
    "AWS": "arn:aws:iam::123456789012:role/MyRole"
  },
  "Action": [
    "es:UpdateElasticsearchDomainConfig"
  ],
  "Resource": "arn:aws:es:us-east-1:123456789012:domain/es01-vpc01-prod-useast1"
}

但仍然没有成功。使这项工作有效的诀窍是什么?

1 个答案:

答案 0 :(得分:1)

我知道这是一个古老的话题,但万一其他人遇到同样的问题。

请注意,仅当ES域在VPC之外时,ES的IP地址白名单才有效。

以下命令对我有用,主要是如果您将JSON括在单引号中,则不需要转义双引号。

将“我的域”,帐户ID“ 1234567890”和IP地址“ 127.0.0.1”更改为您自己的名称,

aws es update-elasticsearch-domain-config --domain-name my-domain --access-policies '{
  "Version": "2012-10-17", 
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "*"
      },
      "Action": "es:*",
      "Resource": "arn:aws:es:us-east-1:1234567890:domain/my-domain/*",
      "Condition": {
        "IpAddress": {
          "aws:SourceIp": "127.0.0.1"
        }
      }
    }
  ]
}'