如何创建Amazon S3访问策略限制用户仅访问自身文件夹
Amazon S3 自定义访问策略配置方案
需求梳理
- S3存储桶结构:根目录仅含
users文件夹,其下为以userId命名的子目录,路径格式为users/<userId>/* - 针对userId为
123的IAM角色,需实现:- 仅对
users/123/*路径拥有GetObject、PutObject、DeleteObject权限 - 无法查看
users文件夹内其他用户的目录名称 - 可查看存储桶根目录下的
users文件夹,且拥有根目录的GetObject权限
- 仅对
现有策略的问题
你提供的策略仅限制了自身目录的操作和列表权限,但未配置根目录的GetObject权限,同时缺少对根目录及users文件夹的列表权限,导致无法看到users文件夹,也无法访问根目录内容。
正确的策略配置
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "s3:GetObject", "Resource": [ "arn:aws:s3:::userbucket", "arn:aws:s3:::userbucket/users/123/*" ] }, { "Effect": "Allow", "Action": [ "s3:PutObject", "s3:DeleteObject" ], "Resource": "arn:aws:s3:::userbucket/users/123/*" }, { "Effect": "Allow", "Action": "s3:ListBucket", "Resource": "arn:aws:s3:::userbucket", "Condition": { "StringLike": { "s3:prefix": [ "", "users/", "users/123/*" ] }, "StringNotEquals": { "s3:prefix": "users/*" } } } ] }
策略说明
根目录与自身目录的GetObject权限:
第一条Statement明确允许对存储桶根目录(arn:aws:s3:::userbucket)和自身目录(users/123/*)执行GetObject操作,满足根目录访问需求的同时,仅开放自身目录的读写删权限。自身目录的写/删权限:
第二条Statement单独配置PutObject和DeleteObject权限,仅作用于users/123/*路径,避免权限过度开放。列表权限控制:
s3:prefix设置为""(根目录)、"users/",确保用户能看到根目录下的users文件夹;同时允许列出users/123/*下的内容。StringNotEquals条件排除users/*前缀,防止用户看到users文件夹下其他用户的目录名称,仅能看到自己的123子目录。
内容的提问来源于stack exchange,提问作者neeraj139
相关产品推荐
相关产品推荐

