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

Fluentd输出至S3失败:核对凭证后仍遇Access Denied错误

问题描述

尝试通过Fluentd将docker-compose部署的应用日志上传至AWS S3存储桶时遇到Access Denied错误,已核对存储桶名称、区域及密钥信息无误,求排查方向。

错误日志

fluentd          |   2024-07-04 09:01:48 +0000 [error]: #0 /usr/lib/ruby/gems/2.7.0/gems/fluent-plugin-s3-1.3.0/lib/fluent/plugin/out_s3.rb:456:in `rescue in check_apikeys'    
fluentd          |   2024-07-04 09:01:48 +0000 [error]: #0 /usr/lib/ruby/gems/2.7.0/gems/fluent-plugin-s3-1.3.0/lib/fluent/plugin/out_s3.rb:451:in `check_apikeys'
fluentd          |   2024-07-04 09:01:48 +0000 [error]: #0 /usr/lib/ruby/gems/2.7.0/gems/fluent-plugin-s3-1.3.0/lib/fluent/plugin/out_s3.rb:240:in `start'
fluentd          |   2024-07-04 09:01:48 +0000 [error]: #0 /usr/lib/ruby/gems/2.7.0/gems/fluentd-1.14.6/lib/fluent/root_agent.rb:203:in `block in start'
fluentd          |   2024-07-04 09:01:48 +0000 [error]: #0 /usr/lib/ruby/gems/2.7.0/gems/fluentd-1.14.6/lib/fluent/root_agent.rb:192:in `block (2 levels) in lifecycle'
fluentd          |   2024-07-04 09:01:48 +0000 [error]: #0 /usr/lib/ruby/gems/2.7.0/gems/fluentd-1.14.6/lib/fluent/root_agent.rb:191:in `each'
fluentd          |   2024-07-04 09:01:48 +0000 [error]: #0 /usr/lib/ruby/gems/2.7.0/gems/fluentd-1.14.6/lib/fluent/root_agent.rb:191:in `block in lifecycle'
fluentd          |   2024-07-04 09:01:48 +0000 [error]: #0 /usr/lib/ruby/gems/2.7.0/gems/fluentd-1.14.6/lib/fluent/root_agent.rb:178:in `each'
fluentd          |   2024-07-04 09:01:48 +0000 [error]: #0 /usr/lib/ruby/gems/2.7.0/gems/fluentd-1.14.6/lib/fluent/root_agent.rb:178:in `lifecycle'
fluentd          |   2024-07-04 09:01:48 +0000 [error]: #0 /usr/lib/ruby/gems/2.7.0/gems/fluentd-1.14.6/lib/fluent/root_agent.rb:202:in `start'
fluentd          |   2024-07-04 09:01:48 +0000 [error]: #0 /usr/lib/ruby/gems/2.7.0/gems/fluentd-1.14.6/lib/fluent/engine.rb:248:in `start'
fluentd          |   2024-07-04 09:01:48 +0000 [error]: #0 /usr/lib/ruby/gems/2.7.0/gems/fluentd-1.14.6/lib/fluent/engine.rb:147:in `run'
fluentd          |   2024-07-04 09:01:48 +0000 [error]: #0 /usr/lib/ruby/gems/2.7.0/gems/fluentd-1.14.6/lib/fluent/supervisor.rb:720:in `block in run_worker'
fluentd          |   2024-07-04 09:01:48 +0000 [error]: #0 /usr/lib/ruby/gems/2.7.0/gems/fluentd-1.14.6/lib/fluent/supervisor.rb:971:in `main_process'
fluentd          |   2024-07-04 09:01:48 +0000 [error]: #0 /usr/lib/ruby/gems/2.7.0/gems/fluentd-1.14.6/lib/fluent/supervisor.rb:711:in `run_worker'
fluentd          |   2024-07-04 09:01:48 +0000 [error]: #0 /usr/lib/ruby/gems/2.7.0/gems/fluentd-1.14.6/lib/fluent/command/fluentd.rb:376:in `<top (required)>'
fluentd          |   2024-07-04 09:01:48 +0000 [error]: #0 /usr/lib/ruby/2.7.0/rubygems/core_ext/kernel_require.rb:83:in `require'
fluentd          |   2024-07-04 09:01:48 +0000 [error]: #0 /usr/lib/ruby/2.7.0/rubygems/core_ext/kernel_require.rb:83:in `require'
fluentd          |   2024-07-04 09:01:48 +0000 [error]: #0 /usr/lib/ruby/gems/2.7.0/gems/fluentd-1.14.6/bin/fluentd:15:in `<top (required)>'
fluentd          |   2024-07-04 09:01:48 +0000 [error]: #0 /usr/bin/fluentd:23:in `load'
fluentd          |   2024-07-04 09:01:48 +0000 [error]: #0 /usr/bin/fluentd:23:in `<main>'
fluentd          | 2024-07-04 09:01:48 +0000 [error]: #0 unexpected error error_class=RuntimeError error="can't call S3 API. Please check your credentials or s3_region configuration. error = #<Aws::S3::Errors::AccessDenied: Access Denied>"
fluentd          |   2024-07-04 09:01:48 +0000 [error]: #0 suppressed same stacktrace
fluentd          | 2024-07-04 09:01:48 +0000 [error]: Worker 0 finished unexpectedly with status 1

当前Fluentd S3输出配置

<match pattern>
  @type s3

  aws_key_id x
  aws_sec_key x
  s3_bucket x
  s3_region x

  path logs/${tag}/%Y/%m/%d/
  s3_object_key_format %{path}%{time_slice}_%{index}.%{file_extension}

  # if you want to use ${tag} or %Y/%m/%d/ like syntax in path / s3_object_key_format,
  # need to specify tag for ${tag} and time for %Y/%m/%d in <buffer> argument.
  <buffer tag,time>
    @type file
    path /var/log/fluent/s3
    timekey 3600 # 1 hour partition
    timekey_wait 10m
    timekey_use_utc true # use utc
  </buffer>
  <format>
    @type json
  </format>
</match>
排查方向
  • IAM权限不足:密钥正确不代表权限足够,检查IAM用户策略是否包含s3:PutObject、s3:ListBucket等必要权限,且权限范围覆盖目标存储桶及指定路径。
  • 存储桶策略限制:存储桶自身的Bucket Policy可能设置了访问限制,比如拒绝非HTTPS请求、限制特定IP段访问,或者明确拒绝当前IAM用户的访问。
  • 密钥被环境变量覆盖:如果docker-compose中通过环境变量传递AWS密钥,容器内的AWS_ACCESS_KEY_ID、AWS_SECRET_ACCESS_KEY可能覆盖配置文件中的值,需确认这些环境变量的正确性。
  • 区域配置不匹配:部分S3区域需要指定正确的端点,或者插件对区域格式要求严格(比如是否带-1后缀),尝试添加s3_endpoint参数明确指定,或核对区域代码是否符合AWS标准。
  • 缓冲区目录权限问题:Fluentd的缓冲区目录/var/log/fluent/s3如果没有读写权限,会导致日志无法写入缓冲区,进而触发API调用失败,检查容器内该目录是否为fluentd用户所有且权限正确。
  • 插件版本兼容性:当前使用的fluent-plugin-s3 1.3.0与fluentd 1.14.6可能存在兼容性问题,尝试升级插件到最新稳定版,或降级到已知兼容的版本。
  • 临时凭证过期:如果使用IAM角色临时凭证而非永久密钥,可能存在凭证过期的情况,确认是否使用了正确的永久密钥,或临时凭证是否在有效期内。
  • 存储桶名称大小写问题:S3存储桶名称大小写敏感,确保配置中的s3_bucket值与实际存储桶名称完全一致,包括大小写。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 17:38:09