{
"Version": "2012-10-17",
"Statement": [ {
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::xxxxxxxxxx:role/some-role"
},
"Action": "es:*",
"Resource": "arn:aws:es:us-west-1:xxxxxxxx:domain/theprodname/*"
}
]
}
我想将弹性搜索服务设置为私有。我所说的“私人”是:
我在原则中添加了aws IAM角色ARN,事实证明我仍然无法使用网站上的es服务。
有什么主意吗?预先感谢。
我尝试了Proper access policy for Amazon Elastic Search Cluster的答案。但这不适用于我的情况。
答案 0 :(得分:1)
您的EC2无法访问您的ES域可能有一些问题。
即使EC2承担了ES策略中定义的角色但未发出已签名的请求,也会拒绝访问。
您可以避免使用AWS ES REST API发出已签名的请求。假设在VPC中使用EC2,则可以将静态IP分配给NAT Gateway,并在ES域策略中将该IP地址列入白名单。
我的建议是使用本机ES客户端启用签名请求,因为它比REST API容易得多。
答案 1 :(得分:0)
您可以设置您的Elasticsearch域以在AMAZON VPC中使用。这是最好的方法。看一下这个:https://docs.aws.amazon.com/elasticsearch-service/latest/developerguide/es-vpc.html
VPC上ES的唯一问题是同一VPC上只有另一台计算机可以联系您的ES服务。最终,这种情况可以通过充当跳转主机的EC2来解决。
为什么这是首选的解决方案?如果您让该域可以被世界范围访问,并设置了限制策略以启用对某些IAM角色或IP的访问,则此操作将按预期进行,并且没有人可以访问您的数据,但是世界范围内的所有人都可以与您联系,因为这是一个公共域,因此,您可能会在ddos附加中公开ES服务。使用VPC解决方案,只有VPC参与者才能联系您的服务端点。
如果必须从应用程序使用ES,另一种做法是设计一个API,以将AWS Elastic Beanstalk的负载均衡器设置为public并在VPC上运行该应用程序的实例来访问ES数据。在这种情况下,将向世界展示ELB的负载均衡器,您可以根据自己的API逻辑来决定谁可以调用或不可以调用。