如何使我的AWS Elastic Search Service私有?

时间:2019-01-19 20:10:44

标签: amazon-web-services elasticsearch

{
"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/*"
    }
  ]
}

我想将弹性搜索服务设置为私有。我所说的“私人”是:

  1. 没有来自世界的访问(没有http请求)
  2. 我自己的aws ec2服务器可以访问它。

我在原则中添加了aws IAM角色ARN,事实证明我仍然无法使用网站上的es服务。

有什么主意吗?预先感谢。

我尝试了Proper access policy for Amazon Elastic Search Cluster的答案。但这不适用于我的情况。

2 个答案:

答案 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逻辑来决定谁可以调用或不可以调用。