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

Windows机器S3文件夹同步遇PutObject权限拒绝及所需AWS权限咨询

解决S3同步时PutObject AccessDenied但rm/cp正常的权限问题

这种情况我之前碰到过好几次,看似矛盾的现象其实是因为s3 sync和s3 cp/s3 rm的权限需求不完全一致——虽然基础的上传/删除权限你已经有了,但同步操作还需要一些额外权限,或者是桶的配置有隐藏限制。咱们一步步来排查:

1. 先明确sync和cp/rm的核心权限差异

s3 cp只需要上传单个对象的权限,s3 rm只需要删除权限,但s3 sync要先列出桶内的所有对象来对比本地和云端的差异,同时上传时可能会附带元数据/ACL设置,这些都是cp不需要的环节。

2. 必须具备的基础IAM权限

你需要确保IAM用户/角色的权限策略包含以下内容,注意资源范围的区分(桶本身和桶内对象是不同的资源ARN):

{
    "Version": "2012-10-17",
    "Statement": [
        // 同步需要先列出桶内容,这部分权限是针对桶本身的
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket",
                "s3:GetBucketLocation"
            ],
            "Resource": "arn:aws:s3:::你的桶名称"
        },
        // 上传、修改、删除对象的权限,针对桶内所有对象
        {
            "Effect": "Allow",
            "Action": [
                "s3:PutObject",
                "s3:PutObjectAcl", // 关键!sync默认会同步文件ACL,没这个权限会报错
                "s3:DeleteObject",
                "s3:GetObject" // 对比差异时需要读取云端对象的元数据
            ],
            "Resource": "arn:aws:s3:::你的桶名称/*"
        }
    ]
}

3. 常见隐藏限制排查

如果上面的权限加了还是报错,要检查以下场景:

  • 桶默认加密(SSE-KMS):如果你的桶开启了默认KMS加密,上传对象时还需要KMS的权限,要在策略里加上:
    {
        "Effect": "Allow",
        "Action": [
            "kms:GenerateDataKey",
            "kms:Decrypt"
        ],
        "Resource": "arn:aws:kms:你的区域:你的账号ID:key/你的KMS密钥ID"
    }
    
  • 桶策略冲突:有时候IAM权限是允许的,但桶策略里有Deny语句(比如限制了上传的IP、加密方式),会覆盖Allow权限。检查桶的策略是否有针对PutObject的限制规则。
  • 对象级ACL限制:如果同步的是已存在的对象,且该对象的ACL设置为私有,而你的IAM用户没有修改该对象的权限,也会触发AccessDenied(但如果是上传新对象的话,这个概率较低)。

4. 快速验证方法

你可以先试一下带--no-preserve-acl参数的sync命令:

aws s3 sync 本地文件夹路径 s3://你的桶名称 --no-preserve-acl

如果这个命令能成功,就说明问题出在s3:PutObjectAcl权限上,把这个权限加上就能解决。

内容的提问来源于stack exchange,提问作者Mor Lajb

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 09:20:30