har*_*ive 96 amazon-ec2 amazon-web-services elasticsearch amazon-iam amazon-elasticsearch
我最近开始使用新的Amazon Elasticsearch Service,我似乎无法弄清楚我需要的访问策略,因此我只能从我的EC2实例访问具有特定IAM角色的服务.
以下是我目前为ES域分配的访问策略的示例:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "",
"Effect": "Allow",
"Principal": {
"AWS": [
"arn:aws:iam::[ACCOUNT_ID]:role/my_es_role",
]
},
"Action": "es:*",
"Resource": "arn:aws:es:us-east-1:[ACCOUNT_ID]:domain/[ES_DOMAIN]/*"
}
]
}
Run Code Online (Sandbox Code Playgroud)
但正如我所说,这不起作用.我登录到EC2实例(my_es_role附加了角色)并尝试在"https://*.es.amazonaws.com"端点上运行简单的curl调用,我收到以下错误:
{"消息":"用户:匿名无权执行:es:ESHttpGet on resource:arn:aws:es:us-east-1:[ACCOUNT_ID]:domain/[ES_DOMAIN] /"}
有没有人知道我必须在访问策略中更改什么才能使其正常工作?
Pet*_*ete 59
您可以将访问权限锁定到仅限IAM,但是如何在浏览器中查看Kibana?您可以设置代理(请参阅Gist和/或NPM模块)或启用IAM和基于IP的访问以查看结果.
我能够通过以下访问策略获得IAM访问IP限制访问.请注意,顺序很重要:在IAM语句之前,我无法使用基于IP的语句.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::xxxxxxxxxxxx:root"
},
"Action": "es:*",
"Resource": "arn:aws:es:us-west-2:xxxxxxxxxxxx:domain/my-elasticsearch-domain/*"
},
{
"Sid": "",
"Effect": "Allow",
"Principal": {
"AWS": "*"
},
"Action": "es:*",
"Resource": "arn:aws:es:us-west-2:xxxxxxxxxxxx:domain/my-elasticsearch-domain/*",
"Condition": {
"IpAddress": {
"aws:SourceIp": [
"192.168.1.0",
"192.168.1.1"
]
}
}
}
]
}
Run Code Online (Sandbox Code Playgroud)
我的EC2实例具有arn:aws:iam::aws:policy/AmazonESFullAccess
策略的实例配置文件
.Logstash应使用logstash-output-amazon-es输出插件对请求进行签名.在我的EC2实例上运行的Logstash包含一个输出部分,如下所示:
output {
amazon_es {
hosts => ["ELASTICSEARCH_HOST"]
region => "AWS_REGION"
}
# If you need to do some testing & debugging, uncomment this line:
# stdout { codec => rubydebug }
}
Run Code Online (Sandbox Code Playgroud)
我可以从访问策略中的两个IP(192.168.1.0和192.168.1.1)访问Kibana.
Oli*_*ier 38
根据AWS doc和您(和我)刚刚测试过的,您不能将对AWS ES域的访问权限限制为角色/帐户/用户/ ...而只是简单地使用它!
标准客户端(例如curl)无法执行基于身份的访问策略所需的请求签名.您必须使用允许匿名访问的基于IP地址的访问策略才能成功执行此步骤的说明.(http://docs.aws.amazon.com/elasticsearch-service/latest/developerguide/es-gsg-search.html)
所以你基本上有两个解决方案:
如果您希望保持访问策略的原样(比限制IP更灵活),签署您的请求可能是最好的解决方案,但它似乎有点复杂.到目前为止我还没有尝试过,我找不到任何帮助的文档.
派对有点晚了,但我能够通过在我的请求中添加签名来处理完全相同的问题.
如果您使用Python(就像我一样),您可以使用以下库使其特别容易实现:https: //github.com/DavidMuller/aws-requests-auth
它对我来说很完美.
rkr*_*rdo -2
我也在尝试这样做,并且我使用 EC2 实例的弹性 IP 选项使其工作Allow access to the domain from specific IP(s)(也可以使用实例的私有 IP 工作,但我不太确定)
| 归档时间: |
|
| 查看次数: |
53365 次 |
| 最近记录: |