配置IAM最小权限:S3读写及文件夹查看所需权限咨询
S3 IAM最小权限配置:分用户读写+个人文件夹访问
针对你的需求,下面是完全贴合最小权限原则的S3 IAM策略配置方案,覆盖读写权限的必要权限细节,以及用户个人文件夹的访问控制:
核心前提
所有策略必须严格限定到用户专属的S3路径,绝对避免全局桶权限,这是防范越权攻击的核心。我们用IAM内置变量${aws:username}自动绑定用户到自己的文件夹,不用逐个手动配置。
一、读权限:除GetObject外还需要什么?
要实现“查看个人文件夹内文件”的功能,仅GetObject是不够的:
- 必须加
s3:ListBucket:S3的“文件夹”是虚拟对象,ListBucket是获取文件列表的唯一操作。注意这个权限的资源是整个桶的ARN,但要通过Condition限定只能列出用户自己文件夹下的内容。 - 可选:
s3:HeadObject:如果需要单独获取文件元数据(比如大小、修改时间),可以加上,但GetObject已经包含下载时的元数据返回,按需添加即可。
二、写权限:除PutObject外还需要什么?
根据实际需求补充:
- 如果需要覆盖/删除自己的文件:加
s3:DeleteObject(非强制,按需开启)。 - 如果需要修改文件元数据/标签:加
s3:PutObjectTagging或s3:PutObjectAcl(仅当业务需要时添加)。 - 同样需要
s3:ListBucket:用户上传后要查看自己的文件列表,还是需要这个权限(和读权限的Condition配置一致)。
三、实操策略示例
假设你的S3桶名为my-app-storage,用户个人文件夹路径为user-data/${aws:username}/:
只读权限策略
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "s3:ListBucket", "Resource": "arn:aws:s3:::my-app-storage", "Condition": { "StringLike": { "s3:prefix": "user-data/${aws:username}/*" } } }, { "Effect": "Allow", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::my-app-storage/user-data/${aws:username}/*" } ] }
说明:ListBucket通过Condition限定只能查看自己文件夹下的内容,GetObject直接锁定到用户专属路径,完全符合最小权限。
读写权限策略
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "s3:ListBucket", "Resource": "arn:aws:s3:::my-app-storage", "Condition": { "StringLike": { "s3:prefix": "user-data/${aws:username}/*" } } }, { "Effect": "Allow", "Actions": [ "s3:GetObject", "s3:PutObject", "s3:DeleteObject" ], "Resource": "arn:aws:s3:::my-app-storage/user-data/${aws:username}/*" } ] }
说明:新增了PutObject(上传)和DeleteObject(删除),同样严格限定在用户个人路径内。
四、关键注意事项
- 永远不要给用户配置
arn:aws:s3:::my-app-storage/*这种全局权限,所有操作必须锁定到具体路径。 - 用IAM Access Analyzer验证策略,检查是否存在过度授权的情况。
- 如果应用使用IAM角色而非独立用户,可将
${aws:username}替换为${aws:userid}或其他匹配角色身份的变量。
内容的提问来源于stack exchange,提问作者Fatlum Hasaj
相关产品推荐
相关产品推荐

