使用AWS IAM Roles Anywhere临时凭证访问S3桶被拒,如何修正?
问题分析与解决方案
核心问题:Principal值错误
你当前用的临时会话ARN(arn:aws:sts::123456789012:assumed-role/MGMT-AWSAnywhere-Role/YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY)是动态生成的——每次通过Roles Anywhere获取临时凭证,后面的会话ID(YYYY部分)都会变化,把它写死在桶策略里必然会导致权限不匹配。
正确的Principal值
应该使用角色本身的ARN,而非临时会话的ARN。角色ARN是固定值,格式如下:
arn:aws:iam::123456789012:role/MGMT-AWSAnywhere-Role
只要是通过Roles Anywhere成功扮演该角色的实体,都会匹配这个Principal。
修复后的桶策略示例
注意你原策略存在语法错误:"Sid": "AllowAccess"末尾缺少逗号,会导致策略无法生效。修复后的完整策略如下:
{ "Sid": "AllowAccess", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123456789012:role/MGMT-AWSAnywhere-Role" }, "Action": [ "s3:GetObject", "s3:ListBucket", "s3:List*" ], "Resource": [ "arn:aws:s3:::my-bucket", "arn:aws:s3:::my-bucket/*" ] }
额外检查点
- 确认
MGMT-AWSAnywhere-Role的信任策略允许Roles Anywhere的相关实体(比如你的证书、信任锚)扮演该角色 - 验证临时凭证权限:可通过
aws sts get-caller-identity --profile myprofile确认身份,再用aws iam simulate-principal-policy模拟权限是否允许目标S3操作
内容的提问来源于stack exchange,提问作者dzieciou
相关产品推荐
相关产品推荐

