如何在啟用物件鎖定的 Amazon S3 儲存貯體中設定跨帳戶複寫?

3 分的閱讀內容
0

我想在已啟用物件鎖定的 Amazon Simple Storage Service (Amazon S3) 儲存貯體上設定跨帳戶複寫。

解決方法

若要在啟用物件鎖定的 Amazon S3 儲存貯體上設定跨帳戶複寫,請完成以下先決條件:

  • 確定目的地儲存貯體已啟用物件鎖定。如果目的地儲存貯體未啟用物件鎖定,請聯絡 AWS Support 以提出您的請求。
  • 確定您可以存取 AWS Command Line Interface (AWS CLI) 或 AWS CloudShell。
  • 在開始複寫之前,請確定您擁有物件鎖定權杖。

步驟 1: 為具有必要權限的複寫建立 IAM 角色

1.    在 AWS Identity and Access Management (IAM) 主控台中為具有 Amazon S3 信任關係的來源帳戶建立複寫角色。

信任關係如下所示:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "s3.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

2.    請務必將下列權限附加到 IAM 角色:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "SourceBucketPermissions",
      "Effect": "Allow",
      "Action": [
        "s3:GetObjectRetention",
        "s3:GetObjectVersionTagging",
        "s3:GetObjectVersionAcl",
        "s3:ListBucket",
        "s3:GetObjectVersionForReplication",
        "s3:GetObjectLegalHold",
        "s3:GetReplicationConfiguration"
      ],
      "Resource": [
        "arn:aws:s3:::SourceBucketName/*",
        "arn:aws:s3:::SourceBucketName"
      ]
    },
    {
      "Sid": "DestinationBucketPermissions",
      "Effect": "Allow",
      "Action": [
        "s3:ReplicateObject",
        "s3:ObjectOwnerOverrideToBucketOwner",
        "s3:GetObjectVersionTagging",
        "s3:ReplicateTags",
        "s3:ReplicateDelete"
      ],
      "Resource": [
        "arn:aws:s3:::DestBucketName/*"
      ]
    }
  ]
}

3.    如果您使用 AWS Key Management Service (AWS KMS) 金鑰,請務必同時附加下列權限:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "SourceBucketPermissions",
      "Effect": "Allow",
      "Action": [
        "s3:GetObjectRetention",
        "s3:GetObjectVersionTagging",
        "s3:GetObjectVersionAcl",
        "s3:ListBucket",
        "s3:GetObjectVersionForReplication",
        "s3:GetObjectLegalHold",
        "s3:GetReplicationConfiguration"
      ],
      "Resource": [
        "arn:aws:s3:::SourceBucketName/*",
        "arn:aws:s3:::SourceBucketName"
      ]
    },
    {
      "Sid": "DestinationBucketPermissions",
      "Effect": "Allow",
      "Action": [
        "s3:ReplicateObject",
        "s3:ObjectOwnerOverrideToBucketOwner",
        "s3:GetObjectVersionTagging",
        "s3:ReplicateTags",
        "s3:ReplicateDelete"
      ],
      "Resource": [
        "arn:aws:s3:::DestBucketName/*"
      ]
    },
    {
      "Sid": "SourceBucketKMSKey",
      "Action": [
        "kms:Decrypt",
        "kms:GenerateDataKey"
      ],
      "Effect": "Allow",
      "Resource": "SourceBucketKMSKeyARN"
    },
    {
      "Sid": "DestinationBucketKMSKey",
      "Action": [
        "kms:Encrypt",
        "kms:GenerateDataKey"
      ],
      "Effect": "Allow",
      "Resource": "DestinationBucketKMSKeyARN"
    }
  ]
}

步驟 2: 更新 AWS KMS key 權限

請確保目的地帳戶的 AWS KMS key 允許存取來源帳戶中的複寫 IAM 角色。

範例:

{
  "Sid": "AllowS3ReplicationSourceRoleToUseTheKey",
  "Effect": "Allow",
  "Principal": {
    "AWS": "arn:aws:iam::123456789101:role/s3-replication-role"
  },
  "Action": [
    "kms:GenerateDataKey",
    "kms:Encrypt"
  ],
  "Resource": "*"
}

注意: 您無法使用受管 AWS KMS key aws/S3 進行跨帳戶複寫。但您可以使用 SSE-S3 加密。

注意:如果您在金鑰政策中使用星號 (*) 作為資源,則該政策只會將金鑰權限授予複寫角色。政策不允許複寫角色提升其權限。

步驟 3: 將下列儲存貯體政策新增至目的地帳戶

主體區段中,請務必新增複寫 IAM 角色 (於步驟 1 中建立) 的 ARN。

{
  "Version": "2012-10-17",
  "Id": "PolicyForDestinationBucket",
  "Statement": [
    {
      "Sid": "ReplicationPermissions",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::SourceBucket-account-ID:role/service-role/source-account-IAM-role"
      },
      "Action": [
        "s3:ReplicateDelete",
        "s3:ReplicateObject",
        "s3:ObjectOwnerOverrideToBucketOwner",
        "s3:GetBucketVersioning",
        "s3:PutBucketVersioning"
      ],
      "Resource": [
        "arn:aws:s3:::DestBucketName/*",
        "arn:aws:s3:::DestBucketName"
      ]
    }
  ]
}

步驟 4: 建立 replication.json 檔案

在來源帳戶中建立名為 replication.json 的檔案,看起來類似以下內容:

{
  "Role": "arn:aws:iam::123456789012:role/s3-replication-role",
  "Rules": [
    {
      "Status": "Enabled",
      "Priority": 10,
      "DeleteMarkerReplication": {
        "Status": "Disabled"
      },
      "Filter": {
        "Prefix": ""
      },
      "Destination": {
        "Bucket": "arn:aws:s3:::destination_bucket"
      }
    }
  ]
}

此檔案包含設定複寫的 JSON 格式參數。這些參數與使用 Amazon S3 主控台設定複寫時可能使用的參數相同。您必須使用 AWS CLI 來設定複寫,因為您還無法使用 Amazon S3 主控台進行此操作。

請務必將 s3-replication-role 更換成步驟 1中建立的 IAM 角色。此外,請視需要包含目的地儲存貯體的 ARN、前綴規格,以及刪除標記偏好設定。

步驟 5: 設定複寫

儲存前述組態後,使用下列 AWS CLI 命令傳遞檔案:

aws s3api put-bucket-replication --bucket <SOURCE BUCKET> --replication-configuration file://Replication.json --token <TOKEN>

若要取得此命令使用的物件鎖定權杖值,請聯絡 AWS Support<TOKEN> 值是來源儲存貯體的物件鎖定權杖。

步驟 6: 驗證

當您執行前述命令時,複寫規則會新增至來源儲存貯體。此規則允許將新增的物件複寫到目的地儲存貯體。您可以透過新增物件至來源並檢查目的地來測試此規則。

注意: 設定複寫後,您可以使用 Amazon S3 主控台更新複寫組態。若要複寫使用 AWS KMS 加密的物件,請選取加密下的複寫 AWS KMS 加密物件來修改複寫組態。

相關資訊

使用主控台設定 S3 物件鎖定

啟用 S3 物件鎖定

複寫使用伺服器端加密 (SSE-C、SSE-S3、SSE-KMS) 建立的物件

AWS 官方
AWS 官方已更新 1 年前