如何使用对象锁定在我的 Amazon S3 桶之间设置跨账户复制?

如何使用对象锁定在我的 Amazon S3 桶之间设置跨账户复制?

我希望在已启用对象锁定的 Amazon Simple Storage Service(Amazon S3)桶上设置跨账户复制。
如何使用对象锁定在我的 Amazon S3 桶之间设置跨账户复制? 2023-08-16 18:44:38
如何使用对象锁定在我的 Amazon S3 桶之间设置跨账户复制? 0
如何使用对象锁定在我的 Amazon S3 桶之间设置跨账户复制?
## 解决方法 要使用对象锁定在 Amazon S3 桶上设置跨账户复制,请完成以下先决条件: * 确保目标桶已启用对象锁定。如果目标桶的对象锁定未启用,[请联系 Amazon Support](https://console.aws.amazon.com/support/home#/case/create?issueType=technical?trk=cndc-detail) 提出您的请求。 * 确保您可以访问亚马逊云科技命令行界面(Amazon CLI)或 Amazon CloudShell。 * 在开始复制之前,请确保您拥有对象锁定令牌。 ### 步骤 1: 创建具有必要权限的 IAM 角色以进行复制 1.    在 Amazon Identity and Access Management(IAM)控制台中为具有 Amazon S3 信任关系的源账户创建复制角色。 信任关系如下所示: ``` { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "s3.amazonamazon.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:amazon:s3:::SourceBucketName/*", "arn:amazon:s3:::SourceBucketName" ] }, { "Sid": "DestinationBucketPermissions", "Effect": "Allow", "Action": [ "s3:ReplicateObject", "s3:ObjectOwnerOverrideToBucketOwner", "s3:GetObjectVersionTagging", "s3:ReplicateTags", "s3:ReplicateDelete" ], "Resource": [ "arn:amazon:s3:::DestBucketName/*" ] } ] } ``` 3.    如果您使用的是 Amazon Key Management Service(Amazon 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:amazon:s3:::SourceBucketName/*", "arn:amazon:s3:::SourceBucketName" ] }, { "Sid": "DestinationBucketPermissions", "Effect": "Allow", "Action": [ "s3:ReplicateObject", "s3:ObjectOwnerOverrideToBucketOwner", "s3:GetObjectVersionTagging", "s3:ReplicateTags", "s3:ReplicateDelete" ], "Resource": [ "arn:amazon: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: 更新 Amazon KMS 密钥权限 确保目标账户的 Amazon KMS 密钥允许访问源账户中的复制 IAM 角色。 示例: ``` { "Sid": "AllowS3ReplicationSourceRoleToUseTheKey", "Effect": "Allow", "Principal": { "Amazon": "arn:amazon:iam::123456789101:role/s3-replication-role" }, "Action": [ "kms:GenerateDataKey", "kms:Encrypt" ], "Resource": "*" } ``` **注意**: 您不能使用托管 Amaozn KMS 密钥 **aws/S3** 进行跨账户复制。但是,可以使用 SSE-S3 加密。 **注意:**如果您在密钥策略中使用星号 (\*) 作为**资源**,则该策略仅向复制角色授予密钥权限。该策略不允许复制角色提升其权限。 ### 步骤 3: 将以下桶策略添加到目标账户 在 **Principal**(主体)部分中,确保添加您在步骤 1 中创建的复制 IAM 角色的 ARN。 ``` { "Version": "2012-10-17", "Id": "PolicyForDestinationBucket", "Statement": [ { "Sid": "ReplicationPermissions", "Effect": "Allow", "Principal": { "Amazon": "arn:amazon:iam::SourceBucket-account-ID:role/service-role/source-account-IAM-role" }, "Action": [ "s3:ReplicateDelete", "s3:ReplicateObject", "s3:ObjectOwnerOverrideToBucketOwner", "s3:GetBucketVersioning", "s3:PutBucketVersioning" ], "Resource": [ "arn:amazon:s3:::DestBucketName/*", "arn:amazon:s3:::DestBucketName" ] } ] } ``` ### 步骤 4: 创建 replication.json 文件 在源账户中创建名为 replication.json 的文件,该文件与以下内容类似: ``` { "Role": "arn:amazon:iam::123456789012:role/s3-replication-role", "Rules": [ { "Status": "Enabled", "Priority": 10, "DeleteMarkerReplication": { "Status": "Disabled" }, "Filter": { "Prefix": "" }, "Destination": { "Bucket": "arn:amazon:s3:::destination_bucket" } } ] } ``` 此文件包含用于设置复制的 JSON 格式的参数。这些参数与使用 Amazon S3 控制台设置复制时可能使用的参数相同。您必须使用 Amazon CLI 来设置复制,因为您还无法使用 Amazon S3 控制台进行设置。 确保将 **s3-replication-role** 替换为**步骤 1** 中的 IAM 角色。此外,根据需要包括目标桶的 ARN、前缀规范和删除标记首选项。 ### 步骤 5: 设置复制 保存上述配置后,使用以下 Amazon CLI 命令传递文件: ``` amazon s3api put-bucket-replication --bucket <SOURCE BUCKET> --replication-configuration file://Replication.json --token <TOKEN> ``` 要获取用于此命令的对象锁定令牌值,[请联系 Amazon Support](https://console.aws.amazon.com/support/home#/case/create?issueType=technical?trk=cndc-detail)。该 **\<TOKEN>** 值是源桶的对象锁定令牌。 ### 步骤 6: 验证 当您运行上述命令时,复制规则将添加到源桶。此规则允许将新添加的对象复制到目标桶。您可以通过向源添加新对象并检查目标来测试规则。 **注意**: 设置复制后,您可以使用 Amazon S3 控制台更新复制配置。要复制已使用 Amazon KMS 加密的对象,请通过在 **Encryption**(加密)下选择 **Replicate objects encrypted with Amazon KMS**(复制已使用 Amazon KMS 加密的对象)来修改复制配置。 ## 相关信息 [使用控制台配置 S3 对象锁定](https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-lock-console.html?trk=cndc-detail) [启用 S3 对象锁定](https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-lock-overview.html#object-lock-bucket-config-enable?trk=cndc-detail) [复制已使用服务器端加密(SSE-C、SSE-S3、SSE-KMS)创建的对象](https://docs.aws.amazon.com/AmazonS3/latest/userguide/replication-config-for-kms-objects.html?trk=cndc-detail)