【问题标题】:connecting to aws elastic search with nodejs aws sdk使用 nodejs aws sdk 连接到 aws 弹性搜索
【发布时间】:2019-10-10 18:18:24
【问题描述】:

在 nodejs 中使用 aws 弹性搜索的最佳方法是什么?我正在使用 aws ecs ec2 实例来运行我的 docker 容器,并使用 IAM 角色从 nodejs 访问其他 aws 资源,例如 S3 存储桶和 dynamodb。

我们也可以使用相同的过程来访问 aws 弹性搜索端点吗?

我添加了具有现有角色的内联策略,并添加了弹性搜索端点 arn。但是 nodejs sdk 无法连接到 ES。当 aws 键和 id 作为环境变量添加到任务定义中时,它开始工作。但我不需要使用该方法,因为它会与其他 aws 资源冲突。 (看起来开发团队已将程序配置为查找 env)

【问题讨论】:

    标签: amazon-iam aws-sdk-nodejs aws-elasticsearch


    【解决方案1】:

    这肯定不是最好的方法,但您也可以使用基于 ip 的限制。我们目前使用它,它工作正常。只需在您的 ec2 实例上设置一个弹性 ip(如果您还没有)并在访问策略中设置 ip 地址,如下所示:

    "Condition": {
            "IpAddress": {
              "aws:SourceIp": [
                "XXX.XXX.XXX.XXX",
              ]
            }
          }
    

    【讨论】:

      【解决方案2】:

      对于遇到此问题的其他人,以下是我在遇到类似问题时学到的一些东西:

      EC2 的角色 ARN 可以与您希望该角色拥有的权限一起添加到您的 Elasticsearch 域的访问策略中。例如。对于以“aws-ec2”角色运行的 EC2 需要向 ES 发出 HTTP GET 请求的权限,您可以在 ES 域访问策略中包含以下内容:

      {
        "Version": "2012-10-17",
        "Statement": [
          {
            "Effect": "Allow",
            "Principal": {
              "AWS": [
                "arn:aws:iam::<ACCOUNT_ID>:role/aws-ec2",
              ]
            },
            "Action": "es:ESHttpGet",
            "Resource": "arn:aws:es:<REGION>:<ACCOUNT_ID>:domain/<DOMAIN_NAME>/*"
          }
        ]
      }
      

      在您的账户中使用角色“aws-ec2”运行的 EC2 实例发出的任何请求都可以访问 elasticsearch。

      请注意,如果您在获取凭据时遇到问题,请尝试以下操作:

      AWS.config.getCredentials(function(err) {
          if (err) console.log(err.stack);
              // credentials not loaded
          else {
              // credentials are loaded and can be accessed using 
              AWS.config.credentials.accessKeyId, AWS.config.credentials.secretAccessKeyId etc. 
        }
      });
      

      这通常会像魔术一样提取凭据,我有一个关于它如何工作的理论(tl:dr;我认为它通过向固定 IP 发出请求来从 EC2 实例元数据中提取它们)但它未经证实,所以我在我知道更多之前不会让自己难堪。请注意,即使您的环境或共享凭据文件中没有存储凭据,这也应该有效。

      【讨论】:

        猜你喜欢
        • 2021-07-10
        • 2021-07-02
        • 1970-01-01
        • 2021-07-13
        • 2021-10-11
        • 2018-03-09
        • 2023-02-01
        • 2023-03-07
        • 1970-01-01
        相关资源
        最近更新 更多