AWS CLI配置正常但Boto3无法获取凭证问题咨询
运行Django的用户与配置CLI的用户不一致
AWS CLI的凭证默认存在当前用户家目录下的~/.aws/credentials文件中。如果你用root或其他用户配置了CLI,但Django是用www-data、ubuntu或其他用户运行的,Django进程无法访问另一个用户家目录下的凭证文件。
解决:切换到运行Django的用户,重新执行aws configure配置凭证;或者把~/.aws目录复制到Django运行用户的家目录,确保权限正确。凭证文件权限不符合安全要求
AWS强制要求~/.aws/credentials和~/.aws/config的权限必须为600(仅所有者可读可写),否则Boto3会因安全策略拒绝读取。
解决:执行命令修改权限:chmod 600 ~/.aws/credentials chmod 600 ~/.aws/config同时确保Django运行用户是这些文件的所有者,或拥有读取权限。
Django运行环境未加载凭证相关配置
如果Django通过systemd、supervisor等进程管理工具启动,默认不会加载用户的.bashrc或.profile文件,可能导致Boto3无法识别凭证文件的默认路径。
解决:在进程管理配置中指定凭证文件路径,比如在systemd的service文件中添加:Environment="AWS_SHARED_CREDENTIALS_FILE=/home/ubuntu/.aws/credentials"也可以在Django配置中通过代码指定路径(不推荐硬编码,可通过settings变量配置):
import boto3 from botocore.config import Config s3_client = boto3.client( 's3', config=Config(shared_credentials_file='/path/to/.aws/credentials') )环境变量优先级冲突
Boto3的凭证查找优先级中,环境变量(AWS_ACCESS_KEY_ID、AWS_SECRET_ACCESS_KEY)高于本地凭证文件。如果Django运行环境中存在无效或未配置的这两个变量,会覆盖凭证文件的读取。
解决:检查Django进程的环境变量,确保这两个变量未被错误设置;若需要使用环境变量,直接在启动脚本或进程配置中导出正确的密钥值。
内容的提问来源于stack exchange,提问作者boyenec

