我有一个类似于以下内容的访问策略:
{
"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"
}
但仍然没有成功。使这项工作有效的诀窍是什么?
答案 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"
}
}
}
]
}'