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

Windows Server 2021运行Django S3上传命令时出现botocore.exceptions.NoCredentialsError的排查求助

解决Windows Server 2021上Django S3上传命令的NoCredentialsError问题

这个问题我碰到过类似的场景,虽然你代码里硬编码了AWS密钥,但Windows Server环境下仍出现凭证找不到的错误,大概率是以下几个原因之一,咱们逐一排查:

1. 代码中S3资源初始化未传入密钥(最可能的原因)

看你的代码,你创建client_s3时正确传入了AWS密钥,但创建s3_resource的时候却没有指定密钥参数:

# 这里没有传入密钥,会使用默认凭证链查找凭证
s3_resource = boto3.resource("s3", region_name="eu-west-2")

而你后续上传文件用的是s3_resource对应的Bucket对象:

my_bucket = s3_resource.Bucket(bucket_name)
my_bucket.upload_file(...)

本地Windows 10环境可能因为你之前配置过AWS CLI(比如~/.aws/credentials文件)或者设置了相关环境变量,所以s3_resource能自动找到凭证;但Windows Server上没有这些默认凭证,就会触发NoCredentialsError。

解决方法:创建s3_resource时也传入密钥参数,和client_s3保持一致:

s3_resource = boto3.resource(
    "s3",
    region_name="eu-west-2",
    aws_access_key_id=access_key,
    aws_secret_access_key=access_secret
)

2. Python依赖包版本不一致

本地和服务器上的boto3/botocore版本可能存在差异,旧版本的包可能在处理硬编码密钥时有逻辑问题。

解决方法:

  • 在本地运行pip show boto3和pip show botocore记录版本号
  • 在服务器上执行以下命令升级到对应版本:
    pip install --upgrade boto3==<本地版本号> botocore==<本地版本号>
    

3. 服务器环境存在干扰性的AWS凭证源

boto3会按照固定顺序查找凭证(硬编码密钥 → 环境变量 → AWS配置文件 → IAM角色等),如果服务器上存在其他凭证源且内容无效,可能会干扰硬编码密钥的使用:

  • 检查服务器是否设置了AWS_ACCESS_KEY_ID/AWS_SECRET_ACCESS_KEY环境变量:在CMD中运行echo %AWS_ACCESS_KEY_ID%和echo %AWS_SECRET_ACCESS_KEY%,如果有值且不正确,删除这些环境变量
  • 检查服务器用户目录下是否有~/.aws/credentials文件,如果存在且内容无效,暂时重命名该文件后重试

4. 代码文件权限问题

如果运行Django命令的用户(比如loc用户)没有读取代码文件的权限,可能导致硬编码的密钥无法被正常读取。

解决方法:右键代码文件 → 「属性」→ 「安全」标签,确保运行命令的用户拥有「读取」权限。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 14:42:48