AWS SCP配置异常:指定IAM用户切换角色后无法删除S3桶
问题分析与排查方案
你的SCP策略失效的核心原因是切换角色后aws:username条件键无法匹配原管理账号的用户名,以下是具体排查点和修正方案:
1. aws:username条件键的局限性
当BobSmith从管理账号切换到OU账号的IAM角色时,当前会话的身份是目标角色而非原用户,此时aws:username的值会变为角色的会话名称(默认是原用户名,但并非可靠匹配项),甚至在部分场景下该条件键不会存在。原策略中StringNotEqualsIfExists会在aws:username不匹配或不存在时触发Deny,导致BobSmith切换角色后被拒绝操作。
2. 关键排查步骤
- 验证当前身份上下文:让BobSmith在切换角色后执行以下AWS CLI命令,确认身份信息:
查看返回的aws sts get-caller-identityArn字段,此时身份是OU账号的角色ARN,而非BobSmith的用户ARN,aws:username也不会是原管理账号的用户名。 - 检查SCP应用范围:确认该SCP是否已正确关联到目标OU,且OU包含了被切换的账号。注意:管理账号默认不受SCP约束,但若将管理账号加入OU则会受影响。
3. 修正后的SCP策略
如果需要允许BobSmith直接以管理账号用户身份操作OU账号的S3桶(不切换角色),可将条件键改为aws:PrincipalArn并明确指定用户ARN:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowBobSmithDeleteBucket", "Effect": "Deny", "Action": "s3:DeleteBucket", "Resource": "*", "Condition": { "StringNotEquals": { "aws:PrincipalArn": "arn:aws:iam::[管理账号ID]:user/BobSmith" } } } ] }
如果需要允许BobSmith切换到OU账号的角色后执行删除操作,需在SCP中同时包含角色ARN,并确保角色的信任策略允许BobSmith切换:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowBobSmithOrRoleDeleteBucket", "Effect": "Deny", "Action": "s3:DeleteBucket", "Resource": "*", "Condition": { "StringNotEquals": { "aws:PrincipalArn": [ "arn:aws:iam::[管理账号ID]:user/BobSmith", "arn:aws:iam::[OU账号ID]:role/[切换的角色名]" ] } } } ] }
4. 额外注意事项
- SCP是权限上限约束:即使SCP允许操作,目标账号的IAM策略仍需明确授予BobSmith(或切换的角色)
s3:DeleteBucket权限,SCP仅做权限范围限制。 - 控制台操作的隐性权限:S3控制台删除桶时会额外调用
s3:GetBucketLocation、s3:ListBucket等权限,需确保这些权限也被允许(通过IAM策略或SCP)。
内容的提问来源于stack exchange,提问作者moto kazi
相关产品推荐
相关产品推荐

