未指定profile标志时AWS CLI上传文件报Access Denied错误
问题原因排查
核心现象
执行无profile指定的命令时报错:
aws s3 cp your_file s3://my-bucket/ # Access Denied
添加--profile default后命令正常运行:
aws --profile default s3 cp your_file s3://my-bucket/ # 执行成功
配置信息梳理
- ~/.aws/config:
[default] region = us-east-2 output = json
- ~/.aws/credentials:
[default] role_arn= credential_source=Environment role_session_name=
- aws configure list输出:
profile default env ['AWS_PROFILE', 'AWS_DEFAULT_PROFILE'] access_key *** env secret_key *** env region us-east-2 config_file ~/.aws/config
问题根源
你的credentials文件中[default]段配置了角色假设模板,但缺少必填的role_arn参数,属于无效配置:
- 当显式指定
--profile default时,AWS CLI读取该profile的完整配置,发现role_arn为空后,自动 fallback 到credential_source=Environment配置,直接从环境变量获取有效密钥,因此命令执行成功。 - 当不指定
--profile时,CLI的默认凭证链逻辑优先尝试解析[default]的角色配置,但因role_arn为空无法完成角色假设,最终导致凭证获取失败,触发Access Denied错误。
修复建议
- 若不需要通过角色假设访问S3:直接删除
credentials文件中[default]段的角色相关配置,保留环境变量中的密钥即可。 - 若确实需要角色假设:补充完整
role_arn和role_session_name参数,确保配置符合AWS角色切换的要求。
内容的提问来源于stack exchange,提问作者manish
相关产品推荐
相关产品推荐

