配置S3存储桶策略:仅允许指定IAM用户与EC2角色访问
仅允许指定IAM用户和角色访问的S3存储桶策略实现
这份S3存储桶策略可以精准实现仅让IAM用户test和IAM角色test-role访问目标存储桶的需求,下面是对策略的拆解和使用说明:
策略逻辑解析
策略采用「允许指定主体+拒绝所有其他主体」的双重控制逻辑,确保访问范围严格受限:
- 允许规则:前两条语句分别给
test用户和test-role角色授予存储桶及所有对象的全量S3操作权限 - 兜底拒绝规则:第三条语句通过
NotPrincipal匹配所有不在允许列表中的主体,直接拒绝他们对存储桶的任何操作(Deny权限优先级高于Allow,彻底杜绝未授权访问)
可直接使用的策略(需替换占位符)
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowTestUSER", "Effect": "Allow", "Principal": { "AWS": ["arn:aws:iam::account-id:user/test"] }, "Action": "s3:*", "Resource": ["arn:aws:s3:::my-bucket", "arn:aws:s3:::my-bucket/*"] }, { "Sid": "AllowEC2Role", "Effect": "Allow", "Principal": { "AWS": ["arn:aws:iam::account-id:role/test-role"] }, "Action": "s3:*", "Resource": ["arn:aws:s3:::my-bucket", "arn:aws:s3:::my-bucket/*"] }, { "Sid": "DenyEverythingIfNotTestUserandTestRole", "Effect": "Deny", "NotPrincipal": { "AWS": [ "arn:aws:iam::account-id:user/test", "arn:aws:iam::account-id:role/test-role" ] }, "Action": "s3:*", "Resource": ["arn:aws:s3:::my-bucket", "arn:aws:s3:::my-bucket/*"] } ] }
关键使用提示
- 把策略里的
account-id替换成你的AWS账号数字ID,my-bucket替换成实际的存储桶名称 - 如果不需要给主体开放全部S3权限,建议把
s3:*改成具体需要的操作(比如s3:GetObject、s3:PutObject),遵循最小权限原则 - AWS根用户默认拥有所有资源的访问权,如果需要限制根用户访问,要在第三条规则的
NotPrincipal数组里添加根用户ARN:arn:aws:iam::account-id:root
内容的提问来源于stack exchange,提问作者Muhammad Usama
相关产品推荐
相关产品推荐

