Terraform创建S3存储桶复制配置报AccessDenied如何解决
Terraform配置S3存储桶复制报403 AccessDenied排查方案
这个是配置S3复制时的高频踩坑问题,哪怕给执行Terraform的服务账号开全量权限也会触发,核心排查点按出现概率从高到低排列如下:
- 混淆了Terraform执行身份和S3复制执行角色的权限
这是90%以上同类问题的根因:你给跑Terraform的账号开全权限没用,S3复制任务实际运行、以及配置校验时使用的是你代码里指定的aws_iam_role.replication角色,这个角色的配置有问题就会直接抛403。
首先要确认该角色的信任策略(assume_role_policy)允许S3服务主体代入,正确的信任策略片段如下:
如果是跨账号复制,还需要在信任策略里加Condition,限制仅源桶所属账号的S3服务可代入该角色。{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "s3.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
其次要确认该角色的权限策略同时覆盖源桶、目标桶的必要操作权限,缺任意一项都会报错,最少需要的权限包括:- 源桶侧:
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
相关产品推荐
相关产品推荐

