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

Terraform创建S3存储桶复制配置报AccessDenied如何解决

Terraform配置S3存储桶复制报403 AccessDenied排查方案

这个是配置S3复制时的高频踩坑问题,哪怕给执行Terraform的服务账号开全量权限也会触发,核心排查点按出现概率从高到低排列如下:

  • 混淆了Terraform执行身份和S3复制执行角色的权限
    这是90%以上同类问题的根因:你给跑Terraform的账号开全权限没用,S3复制任务实际运行、以及配置校验时使用的是你代码里指定的aws_iam_role.replication角色,这个角色的配置有问题就会直接抛403。
    首先要确认该角色的信任策略(assume_role_policy)允许S3服务主体代入,正确的信任策略片段如下:
    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Principal": {
            "Service": "s3.amazonaws.com"
          },
          "Action": "sts:AssumeRole"
        }
      ]
    }
    
    如果是跨账号复制,还需要在信任策略里加Condition,限制仅源桶所属账号的S3服务可代入该角色。
    其次要确认该角色的权限策略同时覆盖源桶、目标桶的必要操作权限,缺任意一项都会报错,最少需要的权限包括:
    • 源桶侧:s3:GetReplicationConfiguration、s3:ListBucket、s3:GetObjectVersionForReplication、s3:GetObjectVersionAcl、s3:GetObjectVersionTagging
    • 目标桶侧:s3:ReplicateObject、s3:ReplicateDelete、s3:ReplicateTags、s3:PutObjectVersionAcl
      如果桶开启了KMS加密,还要给角色补充源KMS密钥的kms:Decrypt权限、目标KMS密钥的kms:GenerateDataKey权限,KMS权限缺失时不会返回明确的KMS报错,只会返回通用AccessDenied,非常容易漏。
  • 桶级访问拦截规则未放通复制角色
    检查源桶、目标桶的以下配置,有没有显式拒绝复制角色的请求:
    • 公有访问阻止(Public Access Block)的账号级/桶级规则有没有异常拦截
    • 桶策略里的强制MFA、强制VPC访问、强制TLS传输等Deny规则,有没有把复制角色加入白名单
    • 如果开了对象锁(Object Lock),还要给复制角色补充s3:GetObjectRetention、s3:PutObjectRetention权限
  • Provider配置错位
    你代码中给复制配置资源指定了provider = aws.central,要确认这个别名Provider对应的凭证、区域配置正确,跨账号/跨区域场景下如果Provider指向了错误的账号或区域,调用S3接口时也会返回无权限错误。

快速排查技巧:直接在IAM控制台的策略模拟器里,选择你创建的aws_iam_role.replication角色,分别模拟对源桶、目标桶的上述操作校验,几分钟就能定位到缺失的权限项,不用反复apply试错。
另外你额外加的delete_marker_replication { status = "Disabled" }配置本身没有问题,全桶无过滤规则场景下显式关闭删除标记复制是正确写法,不会触发权限类报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 07:21:20