如何调整S3 Bucket Policy:仅允许指定IAM用户及角色受限访问
解决方案
以下是满足需求的S3桶策略配置,既保留原有强安全控制,又实现了角色的目录权限分配:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Principal": "*", "Action": "s3:*", "Resource": [ "arn:aws:s3:::<my-bucket-name>", "arn:aws:s3:::<my-bucket-name>/*" ], "Condition": { "StringNotLike": { "aws:userId": [ "<my IAM userId>", "<my AWS AccountId>", "<roleA的唯一ID>", "<roleB的唯一ID>" ] } } }, { "Effect": "Allow", "Principal": { "AWS": "<我的IAM用户ARN>" }, "Action": "s3:*", "Resource": [ "arn:aws:s3:::<my-bucket-name>", "arn:aws:s3:::<my-bucket-name>/*" ] }, { "Effect": "Allow", "Principal": { "AWS": "<roleA的ARN>" }, "Action": [ "s3:GetObject", "s3:PutObject", "s3:DeleteObject", "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::<my-bucket-name>", "arn:aws:s3:::<my-bucket-name>/folderA/*" ], "Condition": { "StringLike": { "s3:prefix": [ "folderA/*", "" ] } } }, { "Effect": "Allow", "Principal": { "AWS": "<roleB的ARN>" }, "Action": [ "s3:GetObject", "s3:PutObject", "s3:DeleteObject", "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::<my-bucket-name>", "arn:aws:s3:::<my-bucket-name>/folderB/*" ], "Condition": { "StringLike": { "s3:prefix": [ "folderB/*", "" ] } } } ] }
关键配置说明
- 核心拒绝策略:保留原有的
Deny语句,将roleA、roleB的唯一ID加入aws:userId白名单。所有不在白名单内的主体(包括账户内其他IAM用户)都会被拒绝访问,确保基础安全。角色唯一ID可通过AWS控制台(角色详情页)或CLI命令aws iam get-role --role-name <角色名>获取(返回结果中的RoleId字段)。 - 自身完整权限:新增
Allow语句,明确赋予你的IAM用户桶及所有对象的全部S3操作权限,覆盖所有管理需求。 - 角色目录权限:
- 对roleA、roleB分别配置
Allow语句,限定仅能对对应文件夹执行读写删操作(GetObject/PutObject/DeleteObject)。 - 添加
ListBucket权限并通过s3:prefix条件限制,确保角色只能查看对应文件夹下的内容,无法遍历整个桶的其他目录。 - 资源部分同时包含桶本身(用于列表操作)和目标文件夹的对象路径。
- 对roleA、roleB分别配置
注意事项
- 替换所有占位符:
<my-bucket-name>、<my IAM userId>、<my AWS AccountId>、<roleA的唯一ID>、<roleA的ARN>等需替换为实际值。 - 最小权限优化:如果不需要删除权限,可移除
s3:DeleteObject动作,进一步缩小权限范围。 - 策略验证:修改后可通过AWS IAM Access Analyzer验证策略有效性,避免语法错误或权限冲突。
内容的提问来源于stack exchange,提问作者Aamit
相关产品推荐
相关产品推荐

