S3跨区域复制(CRR)加密对象无法自动复制问题求助
排查S3跨区域复制(CRR)加密对象不复制的问题
核心问题定位
你的Terraform代码中,S3复制配置的目标区域块未显式指定KMS密钥ID,这是导致加密对象无法自动复制的关键原因。AWS要求:当目标存储桶使用KMS加密,或者需要将加密对象复制到目标桶时,必须在CRR规则的destination配置中明确指定目标KMS密钥ARN,否则即使IAM角色权限配置正确,S3复制服务也不会自动关联该密钥——这就是手动在控制台添加密钥后生效的原因,控制台操作补全了这个缺失的配置项。
具体排查步骤
补全CRR配置的目标密钥指定
查看你的aws_s3_bucket_replication_configuration资源,当前rule内的destination块仅配置了storage_class和bucket,缺少kms_key_id参数。修正后的配置需添加目标KMS密钥ARN:resource "aws_s3_bucket_replication_configuration" "source_bucket_replication" { provider = aws.source bucket = aws_s3_bucket.source_bucket.bucket role = aws_iam_role.replication_role.arn rule { status = "Enabled" destination { storage_class = "STANDARD" bucket = aws_s3_bucket.dest_bucket.arn # 新增:指定目标区域的KMS密钥ARN kms_key_id = aws_kms_key.dest_key.arn } } depends_on = [aws_iam_role_policy_attachment.role_policy_attach] }验证KMS密钥策略权限
除了IAM角色的权限,目标区域的KMS密钥策略必须允许源区域的复制IAM角色执行kms:Encrypt操作。检查目标KMS密钥的策略是否包含类似语句:{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::你的账号ID:role/源区域复制角色名" }, "Action": "kms:Encrypt", "Resource": "*", "Condition": { "StringLike": { "kms:ViaService": "s3.目标区域.amazonaws.com", "kms:EncryptionContext:aws:s3:arn": "arn:aws:s3:::目标桶名" } } }确认复制配置的实际生效状态
执行Terraform状态查看命令,确认实际生成的CRR配置是否包含目标KMS密钥:terraform state show aws_s3_bucket_replication_configuration.source_bucket_replication将输出内容与控制台手动配置后的CRR配置对比,检查是否存在差异。
测试新对象的复制行为
CRR仅对配置生效后新创建的对象生效,测试时需上传新的加密对象到源桶,等待几分钟后查看目标桶是否同步,避免使用配置前已存在的对象测试。查看S3复制日志
在源桶的CRR配置中启用复制日志,通过日志排查是否存在权限拒绝或配置错误的报错:rule { status = "Enabled" # 新增日志配置 metrics { status = "Enabled" event_threshold { minutes = 15 } } destination { storage_class = "STANDARD" bucket = aws_s3_bucket.dest_bucket.arn kms_key_id = aws_kms_key.dest_key.arn } # 指定日志存储桶(需提前创建) log_delivery { bucket = "arn:aws:s3:::你的日志桶名" prefix = "replication-logs/" } }
内容的提问来源于stack exchange,提问作者user23350878
相关产品推荐
相关产品推荐

