如何配置S3桶New-Bucket仅对指定角色开放,无需修改大量AWS角色权限?
不用修改148个角色权限的解决方案
核心思路是利用S3存储桶策略做权限隔离,不用动现有角色的权限,只需要给新桶配置针对性的策略,就能实现需求:
具体操作步骤
1. 给New-Bucket配置桶策略,仅开放给指定角色
直接编写桶策略,先允许指定的几个角色访问新桶,再拒绝其他所有主体的访问(注意保留根用户权限,防止把自己锁在外面)。示例策略如下:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::你的账号ID:role/允许访问的角色1", "arn:aws:iam::你的账号ID:role/允许访问的角色2" ] }, "Action": "s3:*", "Resource": [ "arn:aws:s3:::Primary-Bucket/New-Bucket", "arn:aws:s3:::Primary-Bucket/New-Bucket/*" ] }, { "Effect": "Deny", "NotPrincipal": { "AWS": [ "arn:aws:iam::你的账号ID:role/允许访问的角色1", "arn:aws:iam::你的账号ID:role/允许访问的角色2", "arn:aws:iam::你的账号ID:root" ] }, "Action": "s3:*", "Resource": [ "arn:aws:s3:::Primary-Bucket/New-Bucket", "arn:aws:s3:::Primary-Bucket/New-Bucket/*" ] } ] }
这里的NotPrincipal会排除掉允许的角色和根用户,剩下的所有主体都会被拒绝访问新桶。
2. 保持Primary-Bucket的原有配置不变
主桶的角色权限、桶策略都不用改,其他148个角色依然能正常访问主桶——因为新桶是独立的资源,主桶的权限不会影响新桶的访问控制。
3. 验证权限
分别用允许的角色和普通角色测试:
- 允许的角色应该能正常读写New-Bucket里的内容;
- 普通角色访问New-Bucket会收到
AccessDenied错误,但访问Primary-Bucket不受影响。
注意事项
- 一定要填对角色的ARN,写错的话会导致权限不生效;
- 必须保留根用户的权限,否则万一策略配置错了,连修改桶策略的权限都没有;
- 如果有服务(比如Lambda、EC2)通过角色访问S3,记得测试这些服务的访问是否符合预期。
内容的提问来源于stack exchange,提问作者Jim Macaulay
相关产品推荐
相关产品推荐

