AWS S3指定文件夹IAM权限问题:s3 sync执行失败求助
问题分析与解决方案
不需要配置存储桶策略,问题出在你的IAM策略写法上,没满足s3 sync的权限要求。
为什么指定路径会报错?
s3 sync执行时,第一步会调用ListObjectsV2(以及对应的s3:ListBucket权限)枚举目标路径下的所有对象,这个操作的权限不是针对my-bucket/user-folder/*这类对象路径,而是需要针对存储桶本身的ARN,同时通过条件限制只允许列出user-folder/前缀下的内容。
你之前的策略只给了对象路径的操作权限,没有给桶级的List权限并加前缀限制,所以执行sync时List操作被拒。改成整个桶资源后,List操作获得了权限,所以同步正常,但这样会放宽权限范围,不符合最小权限原则。
正确的IAM策略写法
给用户附加以下自定义策略,既满足sync的所有操作需求,又严格限制在指定路径:
{ "Version": "2012-10-17", "Statement": [ // 允许对指定路径下的对象进行增删改查 { "Effect": "Allow", "Action": [ "s3:PutObject", "s3:GetObject", "s3:DeleteObject" ], "Resource": "arn:aws:s3:::my-bucket/user-folder/*" }, // 允许列出指定前缀下的对象,资源为存储桶本身 { "Effect": "Allow", "Action": "s3:ListObjectsV2", "Resource": "arn:aws:s3:::my-bucket", "Condition": { "StringLike": { "s3:prefix": "user-folder/*" } } }, // 补充ListBucket权限,部分场景下sync会用到 { "Effect": "Allow", "Action": "s3:ListBucket", "Resource": "arn:aws:s3:::my-bucket", "Condition": { "StringLike": { "s3:prefix": "user-folder/*" } } } ] }
补充说明
IAM策略模拟器的警告其实已经提示了资源与操作不匹配的问题,只是你没注意到。调整策略后,模拟器不会再出现警告,同时s3 sync能正常执行,且严格遵循最小权限原则。
内容的提问来源于stack exchange,提问作者fudo
相关产品推荐
相关产品推荐

