You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 23:32:46