【问题标题】:How can I make my AWS Elastic Search Service Private?如何将我的 AWS Elastic Search Service 设为私有?
【发布时间】:2019-06-13 17:18:49
【问题描述】:
{
"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 Role ARN添加到原理中,结果我仍然无法在我的网站上使用es服务。

有什么想法吗?提前致谢。

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

【问题讨论】:

    标签: amazon-web-services elasticsearch


    【解决方案1】:

    您可以将您的弹性搜索域设置为在 AMAZON VPC 中工作。这是最好的方法。看看这个:https://docs.aws.amazon.com/elasticsearch-service/latest/developerguide/es-vpc.html

    在 VPC 上使用 ES 的唯一问题是,只有同一 VPC 上的另一台机器才能联系您的 ES 服务。通常这种情况下,它是通过一个充当 Jump Host 的 EC2 来解决的。

    为什么这是首选解决方案?如果您让世界可以访问该域并设置限制策略以启用对某些 IAM 角色或 IP 的访问,这将按预期工作,没有人可以访问您的数据,但全世界都可以联系您的域,因为它是一个公共域,所以你在可能的 ddos​​ 附加上公开 ES 服务。使用 VPC 解决方案,只有 VPC 参与者可以联系您的服务端点。

    如果您必须在应用程序中使用 ES,另一种做法是设计一个 API 来访问您的 ES 数据,其中 AWS Elastic Beanstalk 将负载均衡器设置为公共,并在 VPC 上运行应用程序的实例。在这种情况下,ELB 的负载均衡器将向世界公开,您可以使用您的 API 逻辑来决定谁可以调用或不调用。

    【讨论】:

      【解决方案2】:

      您的 EC2 可能存在一些问题,无法访问您的 ES 域。

      即使 EC2 担任 ES 策略中定义的角色但未发出签名请求,也会被拒绝访问。

      您可以避免使用 AWS ES REST API 发出签名请求。假设 EC2 在 VPC 中,您可以将静态 IP 分配给 NAT Gateway 并在您的 ES 域策略中将该 IP 地址列入白名单。

      我的建议是使用原生 ES 客户端启用签名请求,因为它比 REST API 容易得多。

      【讨论】:

      • 所以总而言之,我们必须修改源代码才能实现这个目标,对吧?
      • 所以你没有签署请求?那么是的,在 ec2 上运行的代码需要更新以签署 ES 客户端请求。
      猜你喜欢
      • 1970-01-01
      • 2018-01-02
      • 2018-01-20
      • 2017-08-22
      • 1970-01-01
      • 1970-01-01
      • 2021-10-31
      • 2020-07-28
      • 1970-01-01
      相关资源
      最近更新 更多