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

Terraform配置跨AWS账号S3存储桶复制报错求助

解决跨账号S3存储桶复制的账号匹配报错问题

针对你遇到的InvalidArgument: The destination bucket owner is different from the one specified in Account报错,从以下几个方向排查解决:

1. 验证目标桶的实际账号ID

确认var.replication_destination_account_id的值完全匹配目标桶所属的AWS账号ID:

  • 用AWS CLI命令查询目标桶的账号信息:aws s3api get-bucket-acl --bucket <目标桶名称>,返回结果中的Owner.ID是目标桶所属账号的Canonical ID;同时在目标账号环境下执行aws sts get-caller-identity获取纯数字账号ID,确保var.replication_destination_account_id与该值完全一致。
  • 检查是否存在输入错误,比如多写/少写数字、包含空格等。

2. 给目标桶配置正确的权限策略

目标桶必须允许源账号的复制角色执行复制相关操作,在目标账号的Terraform配置中添加Bucket Policy:

resource "aws_s3_bucket_policy" "destination_bucket_policy" {
  bucket = aws_s3_bucket.destination_bucket.id
  policy = jsonencode({
    Version = "2012-10-17"
    Statement = [
      {
        Effect = "Allow"
        Principal = {
          AWS = "<源账号复制角色的ARN>"
        }
        Action = [
          "s3:ReplicateObject",
          "s3:ReplicateDelete",
          "s3:ReplicateTags",
          "s3:GetObjectVersionTagging"
        ]
        Resource = [
          "${aws_s3_bucket.destination_bucket.arn}/*",
          aws_s3_bucket.destination_bucket.arn
        ]
      }
    ]
  })
}

3. 检查源账号复制角色的权限和信任策略

  • 信任策略:确保复制角色允许S3服务扮演它,信任策略内容应为:
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "s3.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}
  • 权限策略:复制角色需要具备源桶的读取权限和目标桶的写入权限:
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "s3:GetObjectVersionForReplication",
        "s3:GetObjectVersionAcl",
        "s3:GetObjectVersionTagging"
      ],
      "Resource": "<源桶ARN>/*"
    },
    {
      "Effect": "Allow",
      "Action": [
        "s3:ListBucket",
        "s3:GetReplicationConfiguration"
      ],
      "Resource": "<源桶ARN>"
    },
    {
      "Effect": "Allow",
      "Action": [
        "s3:ReplicateObject",
        "s3:ReplicateDelete",
        "s3:ReplicateTags"
      ],
      "Resource": "<目标桶ARN>/*"
    }
  ]
}

4. 确认源桶和目标桶都启用了版本控制

S3跨账号复制要求两端存储桶都开启版本控制,目标桶的Terraform配置需添加:

resource "aws_s3_bucket_versioning" "destination_bucket_versioning" {
  bucket = aws_s3_bucket.destination_bucket.id
  versioning_configuration {
    status = "Enabled"
  }
}

同时确认源桶的版本控制也处于启用状态。

5. 可选:移除冗余的account参数

如果已经确认目标桶账号ID和配置的值一致,但报错依旧,可以尝试移除destination块中的account参数——当设置access_control_translation { owner = "Destination" }时,S3会自动识别目标桶的账号,显式指定account反而可能因配置冲突导致报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 13:21:36