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

S3跨账号复制遇CopyObject操作Access Denied错误排查

解决跨账号S3复制AccessDenied问题

当跨AWS账号复制S3桶内容出现AccessDenied错误时,即便配置了s3:GetObject和s3:PutObject,通常还有以下几个容易忽略的权限点需要检查:

  • 源桶(bucketA)需额外权限
    执行--recursive复制需要遍历桶内对象,因此必须确保执行命令的身份拥有s3:ListBucket权限。同时,源桶的桶策略需要明确允许目标账号(Account-B)或执行命令的IAM用户/角色访问,示例策略片段:

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Principal": {"AWS": "arn:aws:iam::Account-B-ID:root"},
          "Action": ["s3:GetObject", "s3:ListBucket"],
          "Resource": ["arn:aws:s3:::bucketA", "arn:aws:s3:::bucketA/*"]
        }
      ]
    }
    
  • 目标桶(bucketB)需ACL相关权限
    使用--acl bucket-owner-full-control参数时,执行命令的身份需要拥有s3:PutObjectAcl权限,否则无法设置对象的ACL让目标桶所有者获得控制权。如果目标桶开启了桶所有者强制设置(Bucket owner enforced),则无需该参数,可直接移除--acl bucket-owner-full-control后重试。

  • 确认执行命令的身份权限范围
    无论使用Account-A还是Account-B的身份执行命令,该身份必须同时具备:

    • 对bucketA的s3:GetObject和s3:ListBucket权限
    • 对bucketB的s3:PutObject(以及s3:PutObjectAcl,如果保留ACL参数)权限
      建议优先使用Account-A的身份执行复制,因为桶所有者默认拥有桶内所有对象的访问权限,可避免对象级ACL的限制。
  • 检查对象级私有ACL
    如果bucketA内存在其他账号上传的对象,且对象设置了私有ACL,即便桶策略允许访问,也会出现权限拒绝。此时需要对象所有者为执行身份授予s3:GetObject权限,或切换到Account-A的身份执行复制。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 02:55:15