将aws弹性搜索与nodejs一起使用的最佳方法是什么?我正在使用aws ecs ec2实例来运行我的docker容器,并且正在使用IAM角色从node.js访问其他AWS资源,例如S3存储桶和dynamodb。
我们也可以使用相同的过程访问aws弹性搜索端点吗?
我添加了具有现有角色的内联策略,并添加了弹性搜索端点arn。但是nodejs sdk无法连接到ES。当将aws键和id作为环境变量添加到任务定义中时,它开始工作。但是我不需要使用该方法,因为它将与其他aws资源冲突。 (看起来开发人员团队已经配置了程序,以便它寻找环境)
答案 0 :(得分:0)
这当然不是最好的方法,但是您也可以使用基于ip的限制。我们目前正在使用它,并且效果很好。只需在ec2实例上设置弹性IP(如果尚未设置),然后在访问策略中设置IP地址,如下所示:
"Condition": {
"IpAddress": {
"aws:SourceIp": [
"XXX.XXX.XXX.XXX",
]
}
}
答案 1 :(得分:0)
对于其他绊脚石的人来说,这是我被困在类似东西上时学到的一些东西:
可以在您的Elasticsearch域的访问策略中添加EC2的角色ARN以及您希望角色具有的权限。例如。对于运行角色“ aws-ec2”的EC2,需要向ES发出HTTP GET请求的权限,您可以在ES域访问策略中包含以下内容:
"3"
您的帐户中运行角色为“ aws-ec2”的EC2实例发出的任何请求都可以访问elasticsearch。
请注意,如果您在获取凭据时遇到困难,请尝试以下操作:
{
"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>/*"
}
]
}
这通常会像魔术般拉动凭证,我有一个关于凭证如何工作的理论(tl:dr;我认为它是通过向固定IP发出请求将凭证从EC2实例元数据中抽取的),但未经证实,所以我在我了解更多之前,不会让自己感到尴尬。请注意,即使您的环境或共享凭据文件中没有存储凭据,这也应该起作用。