无法通过AWS CLI访问S3存储桶的问题求助(MFA账户场景)
排查AWS CLI访问S3(MFA启用账户)的AccessDenied问题
结合你启用MFA的AWS账户场景,我整理了几个最可能导致权限拒绝的原因和对应的排查步骤:
1. 临时会话凭证过期或生成错误
因为你的账户启用了MFA,直接使用长期Access Key/Secret Key无法访问受MFA保护的资源,必须生成临时会话凭证才能正常使用。你提到已保存access token,需要确认:
- 凭证是否通过正确的命令生成?标准生成命令如下:
aws sts get-session-token --serial-number arn:aws:iam::你的AWS账户ID:mfa/你的IAM用户名 --token-code 你的MFA动态验证码 - 临时凭证最长有效期为12小时,如果是较早生成的,大概率已经过期,需要重新生成并更新
mfa_0729配置里的密钥和会话令牌。
2. IAM用户权限配置缺失或MFA条件未满足
检查你的IAM用户权限策略,确保:
- 包含必要的S3权限:执行
aws s3 ls需要s3:ListAllMyBuckets权限;执行aws s3 ls s3://my-bucket/需要对应存储桶的s3:ListObjectsV2权限。 - 如果IAM策略中配置了强制MFA的条件(例如
"Condition": {"Bool": {"aws:MultiFactorAuthPresent": "true"}}),则必须使用带会话令牌的临时凭证,使用长期密钥会直接被拒绝。
3. AWS CLI配置文件格式错误
确认~/.aws/credentials文件中mfa_0729的配置格式正确,必须包含三个核心字段:
[mfa_0729] aws_access_key_id = 临时凭证的AccessKeyId aws_secret_access_key = 临时凭证的SecretAccessKey aws_session_token = 临时凭证的SessionToken region = 你的AWS区域(例如us-east-1)
注意:会话令牌(aws_session_token)必须放在credentials文件中,而非config文件,否则CLI无法识别。
4. 存储桶策略的额外限制
如果目标存储桶配置了桶策略,可能存在拒绝你IAM用户访问的规则。比如桶策略明确拒绝该用户的List操作,或要求访问来源IP、MFA等额外条件,此时即使IAM用户拥有权限,也会被桶策略优先拦截。
快速排查步骤
- 重新生成临时会话凭证,替换到
mfa_0729配置中,再次执行命令测试; - 查看IAM用户的权限策略,确认所需权限已授予且MFA条件配置正确;
- 检查
credentials文件格式,确保三个密钥字段填写无误; - 查看目标存储桶的桶策略,排除拒绝访问的规则。
内容的提问来源于stack exchange,提问作者RB17
相关产品推荐
相关产品推荐

