我想从我的Elastic Beanstalk(Ruby on Rails)应用程序授予对我的AWS ElasticSearch实例的访问权限。具体来说,我试图通过logstash-elasticsearch
插件管道logstash数据。我的期望是这将是一个标准的用例(基于this blog post),但似乎不可能。
我尝试的第一件事是在ES实例上为EB角色设置访问策略:
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::XXXX:role/aws-elasticbeanstalk-ec2-role"
},
"Action": "es:*",
"Resource": "arn:aws:es:us-west-1:XXXXX:domain/YYYY/*"
}
这不起作用,我相信是因为用于在EC2实例和ES之间进行通信的端口。我考虑过的其他选择:
如果我能弄清楚如何设置它,最后一个选项会起作用。
编辑:答案语法:根据birryree的答案,以下是我为此付出的努力:
command
添加到我的2_logstash.config
文件(来自上述博文),以便安装Amazon logstash插件:/opt/logstash/bin/logstash-plugin install logstash-output-amazon_es
logstash
配置文件以使用amazon_es
插件。这或多或少是elasticsearch
的替代品,但我最终明确指定了aws_access_key_id
和aws_secret_access_key
。答案 0 :(得分:3)
您应该工作的基本策略,授予IAM角色权限的完整策略如下所示:
{
"Version": "2012-10-17",
"Statement": [{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::ACCOUNT:role/ROLE"
},
"Action": "es:*",
"Resource": "arn:aws:es:us-west-1:ACCOUNT:domain/DOMAIN/*"
}
]
}
但是,在使用IAM角色/基于用户的策略时,必须发送使用Version 4 Signatures签名的Elasticsearch请求。使用官方AWS软件开发工具包时,他们将在您访问AWS ES资源时透明地执行请求签名。
由于您使用的是Logstash,标准logstash-elasticsearch
插件并不支持此功能,因此,如果您希望最大程度地降低您允许访问ES群集的人的曝光率,那么您可能想要使用AWS Logstash ES Output插件。
亚马逊AWS实验室有一个名为logstash-output-amazon_es
的插件,其基本上与logstash_elasticsearch
完全相同,只是它为每个请求执行签名。
这个插件确实有一些限制,例如不支持Logstash 5.x(它只支持Logstash v2.x)。将重要位合并到官方logstash插件源中有一个问题,但不清楚何时会发生这种情况。