我一直在努力弄清楚如何从我的 EC2 实例与 Amazon ES 服务进行通信。
该文档明确指出 Amazon ES 服务支持基于 IAM 用户和角色的访问策略。http://docs.aws.amazon.com/elasticsearch-service/latest/developerguide/es-createupdatedomains.html#es-createdomain-configure-access-policies
但是,当我为我的 ES 域设置此访问策略时:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::123456789:role/my-ec2-role"
},
"Action": "es:*",
"Resource": "arn:aws:es:us-west-2:123456789:domain/myDomain/*"
}
]
}
我无法登录到 ec2 实例并运行 curl 来访问我的 elasticsearch 集群。
尝试做一个简单的 _search API 卷曲:
curl "http://search-myDomain.es.amazonaws.com/_search"
产生一个身份验证错误响应:
{"Message":"User: anonymous is not authorized to perform: es:ESHttpGet on resource: arn:aws:es:us-west-2:123456789:domain/myDomain/_search"}
为了更加安全,我将AmazonESFullAccess
策略放在我的 IAM 角色上,但仍然不起作用。
我一定遗漏了一些东西,因为能够从使用 IAM 角色的 ec2 实例以编程方式与 Elasticsearch 交互对于使用 Amazon ES 服务完成任何事情至关重要。
我还在文档中看到了这个矛盾的陈述。
基于 IAM 的策略示例 您可以使用 AWS IAM 控制台而不是 Amazon ES 控制台创建基于 IAM 的访问策略。有关创建基于 IAM 的访问策略的信息,请参阅 IAM 文档。
指向 IAM 文档的链接是 IAM 的主页,并且包含有关如何执行此操作的完全零信息。有人为我提供解决方案吗?