如何配置IP访问策略实现AWS Elastic Beanstalk访问OpenSearch的Elasticsearch
访问策略不生效的原因
你当前配置的全IP放开规则未生效,通常是两个原因导致:
- 若你的OpenSearch域为VPC内部部署模式,
aws:SourceIp条件仅匹配公网IP,VPC内网IP访问不会触发该规则,即使配置*也无法放行 - 当
Principal设为AWS:*同时搭配aws:SourceIp: *时,OpenSearch会隐式拒绝未携带AWS签名的请求,并非真正允许匿名访问
配置Elastic Beanstalk访问OpenSearch的方案
方案1:基于IAM角色授权(生产环境首选,无需管理IP)
这是AWS官方推荐的安全访问方案,不受IP变动影响:
- 进入IAM控制台,找到你的Elastic Beanstalk环境对应的EC2实例角色(默认命名为
aws-elasticbeanstalk-ec2-role,也可在Beanstalk环境配置的「安全」分类下查看角色名) - 为该角色添加OpenSearch访问权限,示例策略如下:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "es:*", "Resource": "arn:aws:es:ap-southeast-2:*****:domain/mydomain/*" } ] }
- 修改OpenSearch访问策略,替换原有Statement为以下内容,无需配置IP条件:
{ "Effect": "Allow", "Principal": { "AWS": "<替换为你的Beanstalk EC2实例角色的ARN>" }, "Action": "es:*", "Resource": "arn:aws:es:ap-southeast-2:*****:domain/mydomain/*" }
- 注意应用调用OpenSearch接口时,需要使用AWS签名版本4对请求签名,各语言官方AWS SDK均内置该能力
方案2:固定公网出口IP(适合IP白名单场景)
如果必须使用IP白名单方式访问,不要直接绑定EC2实例动态IP(实例重建、扩容时IP会变更):
- 将Elastic Beanstalk环境部署到私有子网,配置NAT网关并绑定固定弹性公网IP(EIP),所有Beanstalk实例的公网请求都会通过该NAT网关出口,源IP固定为绑定的EIP
- 将该EIP添加到OpenSearch访问策略的
aws:SourceIp列表中即可
方案3:临时获取实例公网IP(仅测试使用)
如果仅临时测试验证,可以直接获取当前运行的Beanstalk实例IP:
- 进入EC2控制台,通过标签
elasticbeanstalk:environment-name = <你的Beanstalk环境名>筛选出对应的EC2实例 - 复制实例的公网IP,添加到OpenSearch的IP白名单即可,该方式仅适用于临时测试,生产环境不可用
内容的提问来源于stack exchange,提问作者jsindos
相关产品推荐
相关产品推荐

