EC2上Logstash连接AWS Elasticsearch返回403状态码如何解决
排查解决步骤
1. 核对基础配置一致性
- 首先校验域名匹配:对比报错日志中的ES域名、logstash.conf中
hosts字段填写的域名、ES访问策略Resource字段中的域名前缀三者是否完全一致。你当前配置里hosts为domain.us-east-2.es.amazonaws.com,报错中的域名为search-elastic-seach-v2-dkuei2knqss3qvmo5uzwnudi3m.us-east-2.es.amazonaws.com,存在明显不一致,优先修正此处。 - 校验ES访问策略
Resource规则:确认规则中arn:aws:es:us-east-2:userId:domain/my-domain/*的my-domain替换为了你实际的ES集群名称,资源匹配错误会直接返回403。
2. 校验IAM身份权限
- 确认logstash.conf中填写的
aws_access_key_id、aws_secret_access_key确实属于访问策略中允许的arn:aws:iam::userId:user/elastic-search用户,避免填错其他IAM身份的密钥。 - 检查该IAM用户是否存在权限边界、所属用户组的拒绝策略,此类规则会覆盖
AmazonESFullAccess权限导致授权失败。
3. 排查ES集群额外访问限制
- 若你开启了ES细粒度访问控制(FGAC),需要在FGAC的权限配置中,给对应IAM用户分配
logstash索引的写入权限,仅资源访问策略放行仍会触发403。 - 确认ES集群是否配置了IP白名单,若开启需要将t3.small EC2的公网IP(公网访问场景)或私网IP(VPC部署场景)加入白名单。
- 若ES为VPC内部部署,确认EC2与ES在同一VPC下,且安全组放通了EC2到ES 443端口的出入站规则。
4. 补全Logstash输出配置
AWS ES默认使用HTTPS 443端口通信,你的当前配置缺少SSL相关参数,需补充:
output { amazon_es { hosts => ["替换为你实际的ES完整域名"] index => "logstash" region => "us-east-2" aws_access_key_id => '你的AK' aws_secret_access_key => '你的SK' # 补充以下两个参数 ssl => true port => 443 } }
5. 独立验证权限有效性
在EC2上直接执行curl命令验证IAM权限是否正常,排除Logstash本身问题:
curl https://<你的ES完整域名> -u <aws_access_key_id>:<aws_secret_access_key>
如果该命令仍返回403,说明问题出在IAM/ES访问策略配置;如果返回正常的ES集群信息,说明问题出在Logstash配置本身。
内容的提问来源于stack exchange,提问作者Tomash Gombosh
相关产品推荐
相关产品推荐

