S3策略报错:如何配置IAM用户仅查看同名子文件夹?
解决S3用户文件夹权限隔离的策略错误问题
你遇到的报错核心原因是:s3:ListBucket动作的资源必须是S3桶的ARN,不能直接指定文件夹路径。ListBucket是针对整个桶的列表操作,需要通过条件过滤来限制用户可见的内容,而非直接把文件夹设为资源。
正确的IAM用户权限策略
下面的策略可以实现用户只能访问与自己用户名同名的文件夹,且无法查看其他用户的内容:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "s3:ListBucket", "Resource": "arn:aws:s3:::my-bucket", "Condition": { "StringLike": { "s3:prefix": [ "", "${aws:username}/", "${aws:username}/*" ] } } }, { "Effect": "Allow", "Action": [ "s3:GetObject", "s3:PutObject", "s3:DeleteObject" ], "Resource": "arn:aws:s3:::my-bucket/${aws:username}/*" } ] }
策略说明
桶列表权限控制
Resource指定为桶的ARNarn:aws:s3:::my-bucket,符合s3:ListBucket动作的资源要求。- 通过
Condition中的StringLike和s3:prefix,限制用户仅能看到根目录、自己的文件夹(${aws:username}/)及文件夹下的所有内容,避免用户看到其他用户的文件夹。
对象操作权限控制
- 允许用户对自己文件夹下的所有对象执行上传、下载、删除操作,资源路径
arn:aws:s3:::my-bucket/${aws:username}/*确保权限严格隔离。
- 允许用户对自己文件夹下的所有对象执行上传、下载、删除操作,资源路径
额外纠正
你原来的策略中使用了Principal: "*",这是桶策略的写法。IAM用户的权限策略不需要Principal字段,直接定义允许的动作和资源即可,更推荐用IAM用户策略实现这种权限隔离,管理更清晰。
内容的提问来源于stack exchange,提问作者Shmack
相关产品推荐
相关产品推荐

