跳至内容

如何为我的 AWS KMS 加密的 Amazon S3 存储桶设置跨账户、跨区域复制?

2 分钟阅读
0

我有一个使用 AWS Key Management Service (AWS KMS) 加密的 Amazon Simple Storage Service (Amazon S3) 存储桶。我想为我的存储桶中的对象设置跨多个 AWS 区域和 AWS 账户的复制。

简短描述

要从使用 AWS KMS 加密的源存储桶中复制对象,您必须在目标存储桶中使用 AWS KMS 加密。此外,目标存储桶的 AWS KMS 密钥必须与目标存储桶位于同一区域。

**注意:**如果您的源存储桶和目标存储桶位于不同的区域,则它们必须具有不同的 AWS KMS 密钥。

为您的目标创建 S3 存储桶

在与 AWS KMS 密钥相同的区域中创建新的目标 S3 存储桶

创建存储桶时,必须启用版本控制才能使用 Amazon S3 复制。

**注意:**最佳做法是使用新的 AWS KMS 密钥作为默认加密,以便存储桶只能使用一个 AWS KMS 密钥。

要降低加密成本,请在您的存储桶上启用 S3 存储桶密钥

(可选)编辑复制 IAM 角色的权限

创建复制规则时,您还可以创建 AWS Identity and Access Management (IAM) 角色。IAM 角色必须允许 Amazon S3 获取、复制、加密和解密对象。在将对象移动到另一个区域之前,必须包括解密对象的权限。然后,对目标中的对象进行加密。

完成以下步骤,为具有现有复制规则的存储桶配置权限:

  1. 确认您的 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:GetObjectVersionTagging",
            "s3:GetObjectVersionAcl",
            "s3:ListBucket",
            "s3:GetObjectVersionForReplication",
            "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:::DestinationBucketName/*"
          ]
        },
        {
          "Sid": "SourceBucketKMSKey",
          "Action": [
            "kms:Decrypt",
            "kms:GenerateDataKey"
          ],
          "Effect": "Allow",
          "Resource": "SourceBucketKMSKeyARN"
        },
        {
          "Sid": "DestinationBucketKMSKey",
          "Action": [
            "kms:Encrypt",
            "kms:GenerateDataKey"
          ],
          "Effect": "Allow",
          "Resource": "DestinationBucketKMSKeyARN"
        }
      ]
    }

**注意:**将 SourceBucketName 替换为源存储桶的名称,将 DestinationBucketName 替换为目标存储桶的名称。此外,将 SourceBucketKMSKeyARN 替换为源存储桶的 AWS KMS 密钥的 Amazon 资源名称 (ARN),将 DestinationBucketKMSKeyARN 替换为目标存储桶的 AWS KMS 密钥的 ARN。上述权限允许该角色访问源存储桶中的对象,并将对象复制到目标存储桶。这样还能使该角色使用 AWS KMS 密钥解密和加密对象

更新密钥策略以允许 IAM 角色在源存储桶和目标存储桶中同时使用密钥

更改 AWS KMS 密钥策略以允许 IAM 角色在源存储桶和目标存储桶中同时使用 AWS KMS 密钥。

更改目标存储桶的策略以允许复制到该存储桶

将目标存储桶的策略更改为以下策略:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "DestinationBucketPermissions",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::ACCOUNTNUMBER:role/IAMROLE"
      },
      "Action": [
        "s3:ReplicateObject",
        "s3:ObjectOwnerOverrideToBucketOwner",
        "s3:GetObjectVersionTagging",
        "s3:ReplicateTags",
        "s3:ReplicateDelete",
        "s3:GetBucketVersioning",  
        "s3:PutBucketVersioning"
      ],
      "Resource": [
        "arn:aws:s3:::DestinationBucketName/*",  
        "arn:aws:s3:::DestinationBucketName"
      ]
    }]
}

**注意:**将 AccountNumber 替换为您的源存储桶账号,将 IAMRole 替换为您的 IAM 角色,将 DestinationBucketName 替换为目标存储桶名称。

设置复制规则

完成以下步骤:

  1. 打开 Amazon S3 控制台
  2. 选择 Buckets(存储桶),然后选择您的源存储桶。
  3. 选择 Management(管理)选项卡。在 Replication rules(复制规则)下,选择 Create replication rule(创建复制规则)。
  4. 输入规则的名称。在 Source bucket(源存储桶)下,选择规则范围以确定复制应用于特定对象前缀还是应用于存储桶的全部内容。
  5. Destination(目标)下,选择 Specify a bucket in another account(指定另一个账户中的存储桶),然后输入目标存储桶的名称和账户 ID。
  6. IAM role(IAM 角色)下,选择 Choose from existing IAM roles(从现有 IAM 角色中选择)。
  7. IAM role(IAM 角色)下,如果您拥有具有所需权限的现有 IAM 角色,请选择 Choose from existing IAM roles(从现有 IAM 角色中选择)或 Enter IAM role ARN(输入 IAM 角色 ARN)。
    - 或 -
    选择 Create new role(创建新角色)以创建具有所需权限的新角色。
  8. Encryption(加密)下,选择 Replicate objects encrypted with AWS Key Management Service (AWS KMS)(复制使用 AWS Key Management Service (AWS KMS) 加密的对象)。然后,输入您的 AWS KMS 密钥的 ARN。
  9. (可选)配置 Destination storage class(目标存储类)和 Additional replication options(其他复制选项)。
  10. 查看配置,然后选择 Save(保存)。
  11. (可选)使用一次性的 S3 批量操作作业复制现有对象

验证您的复制

创建复制规则时,允许将新添加的对象从源存储桶无缝复制到目标存储桶。要测试您的复制,请完成以下步骤:

  1. 将新对象上传到源存储桶。
  2. 查看对象概述,然后检查对象的复制状态。
  3. 如果复制成功,您将会看到 COMPLETED 状态。

相关信息

复制加密对象(SSE-S3、SSE-KMS、DSSE-KMS、SSE-C)

针对不同账户中的存储桶配置复制

AWS 官方已更新 9 个月前