如何为我的 Amazon S3 存储桶设置跨账户、跨区域、AWS KMS 加密的复制?
我有一个使用 AWS Key Management Service (AWS KMS) 加密的 Amazon Simple Storage Service (Amazon S3) 存储桶。我想为我的存储桶中的对象设置跨多个 AWS 区域和账户的复制。
简短描述
要从使用 AWS KMS 加密的源存储桶中复制对象,您必须在目标存储桶中使用 AWS KMS 加密。但是,这两个存储桶可以有不同的 AWS KMS 密钥。如果您有 AWS KMS 加密的源存储桶,则不能对目标存储桶中的对象使用其他加密方法。
此外,目标存储桶的 AWS KMS 密钥必须与目标存储桶位于同一区域。
**注意:**如果您的源存储桶和目标存储桶位于不同的区域,则它们必须具有不同的 AWS KMS 密钥。
为您的目标创建 S3 存储桶
在与 AWS KMS 密钥相同的区域中创建新的目标 S3 存储桶。
创建存储桶时,开启版本控制。这是 Amazon S3 复制的要求。
**注意:**最佳做法是使用新的 AWS KMS 密钥作为默认加密,以便存储桶只能使用一个 AWS KMS 密钥。
要降低加密成本,请在您的 S3 存储桶上激活 S3 存储桶密钥。
(可选)编辑复制 IAM 角色的权限
创建复制规则时,您还可以创建 AWS Identity and Access Management (IAM) 角色。IAM 角色必须允许 Amazon S3 获取、复制、加密和解密对象。在将对象移动到另一个区域之前,必须包括解密对象的权限。然后,对目标中的对象进行加密。确保 IAM 角色拥有以下信任关系和权限:
**注意:**以下权限适用于具有现有复制规则的存储桶。
-
确认您的角色与 Amazon S3 存在以下信任关系:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "s3.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
-
确认 IAM 角色拥有下列权限。这样该角色便可访问源存储桶中的对象,并将对象复制到目标存储桶。这样还能使该角色使用 AWS KMS 密钥解密和加密对象:
{ "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 密钥的 ARN。
- 将 DestinationBucketKMSKeyARN 替换为您的目标存储桶 AWS KMS 密钥的 ARN。
更新 AWS KMS 策略以允许 IAM 角色在源存储桶和目标存储桶中同时使用密钥
更改 AWS KMS 策略以授权 IAM 角色在源存储桶和目标存储桶中同时使用 AWS KMS 密钥。
对于跨账户复制,AWS KMS 密钥策略和 IAM 角色策略都必须具有加密和解密权限。
更改目标存储桶的策略以允许复制到该存储桶
将目标存储桶的策略更改为以下模板:
{ "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" ], "Resource": [ "arn:aws:s3:::DestinationBucketName/*" ] }] }
**注意:**将 AccountNumber 替换为您的源存储桶账号。将 IAMRole 替换为您正在使用的 IAM 角色。将 DestinationBucketName 替换为您的目标存储桶的名称。
设置复制规则
- 打开 Amazon S3 控制台。
- 选择 Buckets(存储桶),然后选择您的源存储桶。
- 选择 Management(管理)选项卡。在 Replication rules(复制规则)下,选择 Create replication rule(创建复制规则)。
- 输入规则的名称。在 Source bucket(源存储桶)下,选择规则范围以确定复制应用于特定对象前缀还是应用于存储桶的全部内容。
- 在 Destination(目标)部分下,选择复制对象的目标存储桶。
- 在 IAM role(IAM 角色)下,选择 Choose from existing IAM roles(从现有 IAM 角色中进行选择)。
- 选择 Create new role(创建新角色)。
- 或 -
要使用您已经创建的角色,请输入 IAM 角色的 ARN。如果您已有复制规则,请使用此方法。 - 在 Encryption(加密)下,选择 Replicate objects encrypted with AWS Key Management Service (AWS KMS)(复制使用 AWS Key Management Service (AWS KMS) 加密的对象)。然后,输入您的 AWS KMS 密钥的 ARN。
- (可选)配置 Destination storage class(目标存储类)和 Additional replication options(其他复制选项)。
- 查看配置,然后选择 Save(保存)。
- (可选)使用一次性的 S3 批量操作作业复制现有对象。
验证您的复制
创建复制规则时,允许将新添加的对象从源存储桶无缝复制到目标存储桶。要测试您的复制,请完成以下步骤:
- 将新对象上传到源存储桶。
- 查看对象概述,然后检查对象的复制状态。
- 如果复制成功,您将会看到 COMPLETED 状态。
相关信息

相关内容
- AWS 官方已更新 1 年前
- AWS 官方已更新 2 年前
- AWS 官方已更新 1 年前
- AWS 官方已更新 1 年前