创建AWS基于资源的策略时指定IAM组为Principal出现错误如何解决?
错误根因
AWS基于资源的策略(包括你正在使用的S3存储桶策略)存在原生限制:不支持将IAM用户组作为Principal参数的取值。
IAM用户组仅可用于配置身份型策略(即附加在用户、组、角色上的权限策略),资源型策略的Principal仅支持填写IAM用户、IAM角色、AWS根账户、AWS服务、联合身份主体等类型的ARN,填写用户组ARN会直接触发策略校验不通过的报错。
你使用的错误配置示例:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::<acc_number>:group/dev-group" }, "Action": "s3:GetObject", "Resource": "arn:aws:s3:::<bucket>/text.txt" } ] }
可行解决方案
- 方案1:替换Principal为用户组内的IAM用户列表
如果组内用户数量较少,可以直接将Principal的AWS字段修改为数组,列出所有dev-group下的IAM用户ARN即可,示例如下:
"Principal": { "AWS": [ "arn:aws:iam::<acc_number>:user/dev-user1", "arn:aws:iam::<acc_number>:user/dev-user2" ] }
- 方案2:为IAM用户组附加身份型权限策略
无需修改当前S3存储桶策略,转而给dev-group用户组直接附加对应权限策略,允许组内用户执行s3:GetObject操作,目标资源为对应S3对象的ARN即可,只要S3存储桶没有显式拒绝该组用户的访问,权限即可正常生效。 - 方案3:通过IAM角色中转授权
创建一个拥有对应S3访问权限的IAM角色,将存储桶策略的Principal替换为该角色的ARN,再给dev-group内的所有用户授予扮演该角色的权限,用户通过切换角色即可访问目标S3资源,适合用户数量多、需要统一权限生命周期管理的场景。
内容的提问来源于stack exchange,提问作者Amit Meena
相关产品推荐
相关产品推荐

