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

使用AWS官方boto3代码传文件至S3遇NoCredentialsError问题排查

错误原因

这个错误本质是boto3找不到有效的AWS身份凭证,无法完成S3服务的身份校验。AWS要求所有访问云服务的请求必须携带合法凭证,用来确认请求者的身份和操作权限。

修复方案

下面是几种常用的凭证配置方式,按生产环境推荐度排序:

1. 使用AWS凭证配置文件(本地开发首选)

这是本地调试最安全、最常用的方式:

  • 先在本地创建凭证文件:
    • Windows路径:C:\Users\<你的用户名>\.aws\credentials
    • macOS/Linux路径:~/.aws/credentials
  • 文件格式如下,替换成你自己的实际凭证:
    [default]
    aws_access_key_id = 你的AWS访问密钥ID
    aws_secret_access_key = 你的AWS秘密访问密钥
    
  • 注意:这两个密钥需要从AWS控制台的IAM用户页面获取,且该IAM用户必须拥有s3:PutObject权限(可通过IAM策略配置)。

2. 设置系统环境变量

临时测试或者不想修改配置文件时可以用这种方式:

  • 在终端/命令行中设置环境变量:
    • macOS/Linux:
      export AWS_ACCESS_KEY_ID="你的AWS访问密钥ID"
      export AWS_SECRET_ACCESS_KEY="你的AWS秘密访问密钥"
      
    • Windows(命令提示符):
      set AWS_ACCESS_KEY_ID="你的AWS访问密钥ID"
      set AWS_SECRET_ACCESS_KEY="你的AWS秘密访问密钥"
      
    • Windows(PowerShell):
      $env:AWS_ACCESS_KEY_ID="你的AWS访问密钥ID"
      $env:AWS_SECRET_ACCESS_KEY="你的AWS秘密访问密钥"
      
  • 设置完成后,重新运行你的Python代码即可。

3. 代码中直接指定凭证(仅临时测试用,不推荐)

虽然可以直接在代码里传入凭证,但硬编码敏感信息会带来泄露风险,只适合临时调试:
修改创建s3_client的代码段:

s3_client = boto3.client(
    's3',
    aws_access_key_id='你的AWS访问密钥ID',
    aws_secret_access_key='你的AWS秘密访问密钥'
)

4. 使用IAM角色(AWS云环境内运行首选)

如果你的代码是在EC2实例、ECS容器或者Lambda等AWS服务中运行,推荐给对应资源绑定IAM角色,boto3会自动获取角色凭证,无需手动配置:

  • 给目标AWS资源(比如EC2)附加具备S3上传权限的IAM角色
  • 代码无需修改,boto3会自动从元数据服务获取凭证
额外注意事项
  • 权限校验:确保你的IAM用户/角色拥有足够权限,至少要允许s3:PutObject操作,且资源范围要包含目标存储桶(比如arn:aws:s3:::call-lists/*)
  • 凭证正确性:复制密钥时注意不要带多余空格或字符错误
  • 多配置文件:如果本地有多个AWS配置文件,可以在代码中指定使用的配置文件:boto3.client('s3', profile_name='你的配置文件名称')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 21:35:30