You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Logstash推送数据至AWS Elasticsearch遇403错误,持续重试连接问题排查

解决Logstash推送AWS Elasticsearch出现403错误的方案

结合你的日志和配置文件来看,403错误主要出在AWS ES的连接权限或配置参数上,我整理了几个必须排查和修正的关键点:

1. 修正AWS Region配置错误

你配置里写的region => "us-east-1b"是AWS可用区(AZ),不是合法的区域ID,正确的区域应该是us-east-1。Amazon ES插件需要正确的区域来生成请求签名,错误的区域会直接导致签名验证失败,返回403。

修改后的配置片段:

output{ 
  amazon_es { 
    # 保留其他配置不变
    region => "us-east-1" 
    # 保留其他配置不变
  } 
}

2. 修正Amazon ES插件的Hosts与路径配置

你的hosts参数写法不符合插件要求:

  • hosts只需要填写ES域名(不带https://前缀和额外路径),比如["my-dom.co"]
  • 日志里显示健康检查请求到了https://my-dom.co:8001/scans/,这里的/scans路径是错误的——AWS ES的默认endpoint没有额外路径,若scans是你要写入的索引名,应该通过index参数指定,而非放在hosts里。

修正后的output配置:

output{ 
  amazon_es { 
    hosts => ["my-dom.co"] 
    port => 8001 
    ssl => true 
    region => "us-east-1" 
    index => "snapshot-%{+YYYY.MM.dd}" 
  } 
}

3. 确认AWS凭证的有效性与配置方式

你提到已导出AWS密钥,需要确保:

  • 导出的是AWS_ACCESS_KEY_ID和AWS_SECRET_ACCESS_KEY环境变量,且Logstash进程能读取到(可在启动Logstash前执行echo $AWS_ACCESS_KEY_ID验证)
  • 若环境变量未生效,可临时在配置里显式指定(生产环境建议用IAM角色或环境变量,避免硬编码密钥):
output{ 
  amazon_es { 
    # 保留其他配置不变
    access_key_id => "你的AWS访问密钥ID"
    secret_access_key => "你的AWS秘密访问密钥"
    # 保留其他配置不变
  } 
}

4. 检查IAM权限与ES域访问策略

IAM实体权限

确保你的AWS凭证对应的IAM用户/角色拥有访问Amazon ES的权限,至少需要以下基础权限(可按需调整):

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "es:ESHttpPut",
        "es:ESHttpPost",
        "es:ESHttpGet",
        "es:ESHttpHead"
      ],
      "Resource": "arn:aws:es:us-east-1:你的AWS账号ID:domain/你的ES域名/*"
    }
  ]
}

ES域访问策略

在AWS控制台的Elasticsearch服务中,检查你的域的访问策略,确保允许上述IAM用户/角色访问。示例策略:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::你的AWS账号ID:user/你的IAM用户名"
      },
      "Action": "es:*",
      "Resource": "arn:aws:es:us-east-1:你的AWS账号ID:domain/你的ES域名/*"
    }
  ]
}

5. 修正Input路径的潜在问题

虽然这不是403的直接原因,但你的Input路径~/home/ubuntu/json_try/json_try.json存在逻辑错误:~代表当前用户的主目录(比如ubuntu用户的主目录是/home/ubuntu),所以这个路径实际会解析为/home/ubuntu/home/ubuntu/json_try/json_try.json,大概率不存在。建议修改为:

input { 
  file{ 
    type => "json" 
    path => "/home/ubuntu/json_try/json_try.json" 
    start_position => "beginning" 
    sincedb_path => "/dev/null" 
  } 
}

完成以上配置修正后,重启Logstash,应该就能正常连接AWS ES并推送文档了。

内容的提问来源于stack exchange,提问作者Roy Levy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 15:58:16