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

配置~/.aws/credentials等信息后调用S3出现NoCredentialsError如何解决

解决boto3调用S3报NoCredentialsError的方案

1. 校验本地AWS配置文件的路径、格式和权限

  • 配置文件默认需要放在用户目录的.aws文件夹下,路径不对会导致boto3无法读取:
    • Linux/macOS路径:~/.aws/credentials、~/.aws/config
    • Windows路径:C:\Users\你的用户名\.aws\credentials、C:\Users\你的用户名\.aws\config
  • 检查文件内容格式:你当前的配置项等号后有多余空格,建议删除避免解析异常,修正后示例:
    # credentials文件
    [default]
    aws_access_key_id=my_key_id
    aws_secret_access_key=my_secret_access
    
    # config文件
    [default]
    region=ap-southeast-1
    
  • Linux/macOS下需要给credentials文件设置600权限,权限过高会被boto3拒绝读取,执行命令:chmod 600 ~/.aws/credentials

2. 校验环境变量配置

  • boto3识别的固定环境变量名为AWS_ACCESS_KEY_ID、AWS_SECRET_ACCESS_KEY、AWS_DEFAULT_REGION,注意大小写不要写错
  • 确认执行脚本的终端和配置环境变量的终端为同一个,或配置的是全局环境变量:
    • Linux/macOS执行echo $AWS_ACCESS_KEY_ID确认变量是否生效
    • Windows执行echo %AWS_ACCESS_KEY_ID%确认变量是否生效

3. 脚本显式传入配置(快速验证用)

如果上述配置确认无误,可以先在脚本中显式传入密钥测试,排除密钥本身无效的问题:

import boto3
# 替换为你的实际密钥信息
s3 = boto3.client(
    's3',
    aws_access_key_id='你的实际access_key_id',
    aws_secret_access_key='你的实际secret_access_key',
    region_name='ap-southeast-1'
)
s3.put_object(Body='testing', Bucket='file-server-datalake', Key='test.txt')

如果该代码可正常运行,说明密钥本身有效,问题出在boto3读取默认配置的环节。

4. 其他排查点

  • 安装awscli后执行aws configure list,可直接查看当前生效的AWS配置,确认default profile的参数是否和你填写的一致
  • 升级boto3到最新版本:pip install --upgrade boto3,排除版本兼容问题
  • 确认你的密钥未过期、未被禁用,且对应账号拥有S3存储桶的putObject权限

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 09:36:08