如何在AWS中为Cognito联合身份池的IAM角色授权Elasticsearch域?
如何配置Elasticsearch域访问策略以授权Cognito联合身份池的IAM角色
我明白你现在的处境:已经给Cognito联合身份池对应的IAM角色加了读取Elasticsearch的内联策略,但卡在了ES域的访问策略配置上,之前试VPN限制访问还碰了壁。下面一步步帮你搞定:
先拿到关键信息:IAM角色的ARN
首先得把要授权的那个IAM角色的完整ARN找出来——格式一般是arn:aws:iam::你的AWS账号ID:role/角色名称。直接去IAM控制台的角色详情页就能复制到,先存好备用。
编辑Elasticsearch域的访问策略
- 打开AWS控制台的Elasticsearch(现在也叫OpenSearch)服务,找到你的目标域,进入安全标签页,找到访问策略选项。
- 把现有策略替换成类似下面的JSON结构,记得把占位符换成你自己的信息:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "这里替换成你的IAM角色ARN" }, "Action": "es:ESHttp*", "Resource": "arn:aws:es:你的区域:你的AWS账号ID:domain/你的ES域名/*" }, // 要是需要保留管理员的全权限,就加上这段 { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::你的AWS账号ID:user/你的管理员用户" }, "Action": "es:*", "Resource": "arn:aws:es:你的区域:你的AWS账号ID:domain/你的ES域名/*" } ] }
- 如果你只需要读取权限,可以把
Action改成"es:ESHttpGet"、"es:ESHttpHead"这类具体的读取动作,不用给全量的es:ESHttp*。
解决VPN限制导致的无法访问问题
之前用VPN限制后访问失败,大概率是访问策略和网络控制规则冲突了:
- 如果你的ES域是VPC部署的,得确保VPN连接的网段在ES域所属VPC的安全组入站规则里,允许443端口(默认ES端口)的访问。
- 如果是公网访问加VPN限制,要确认VPN的出口IP在ES域的访问策略里被允许,或者先暂时关掉VPN限制,等IAM授权的访问正常工作后,再慢慢调网络规则。
验证权限是否生效
配置完之后可以用这个方法测试:
- 通过你的前端应用获取Cognito联合身份池的临时凭证,然后用curl或者Postman发请求到ES端点,比如:
curl -X GET "https://你的ES域名.区域.es.amazonaws.com/_cat/indices?v" --aws-sigv4 "aws:amz:区域:es" --user "AKIA开头的临时访问密钥:临时密钥"
- 如果能正常返回索引列表,说明权限配置没问题了。
最后提醒下:ES的权限是IAM角色策略+ES域访问策略双重校验的,所以要确保你给IAM角色加的内联策略确实包含了对应的ES权限,比如这样:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "es:ESHttpGet" ], "Resource": "arn:aws:es:你的区域:你的AWS账号ID:domain/你的ES域名/*" } ] }
内容的提问来源于stack exchange,提问作者Berry Blue
相关产品推荐
相关产品推荐

