如何使用对象锁定在我的 Amazon S3 桶之间设置跨账户复制?
我希望在已启用对象锁定的 Amazon Simple Storage Service(Amazon S3)桶上设置跨账户复制。
解决方法
要使用对象锁定在 Amazon S3 桶上设置跨账户复制,请完成以下先决条件:
- 确保目标桶已启用对象锁定。如果目标桶的对象锁定未启用,请联系 AWS Support 提出您的请求。
- 确保您可以访问 AWS 命令行界面(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 密钥权限
确保目标账户的 AWS KMS 密钥允许访问源账户中的复制 IAM 角色。
示例:
{ "Sid": "AllowS3ReplicationSourceRoleToUseTheKey", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123456789101:role/s3-replication-role" }, "Action": [ "kms:GenerateDataKey", "kms:Encrypt" ], "Resource": "*" }
注意: 您不能使用托管 AWS KMS 密钥 aws/S3 进行跨账户复制。但是,可以使用 SSE-S3 加密。
注意:如果您在密钥策略中使用星号 (*) 作为资源,则该策略仅向复制角色授予密钥权限。该策略不允许复制角色提升其权限。
步骤 3: 将以下桶策略添加到目标账户
在 Principal(主体)部分中,确保添加您在步骤 1 中创建的复制 IAM 角色的 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 加密的对象,请通过在 Encryption(加密)下选择 Replicate objects encrypted with AWS KMS(复制已使用 AWS KMS 加密的对象)来修改复制配置。
相关信息
相关内容
- AWS 官方已更新 9 个月前
- AWS 官方已更新 2 年前
- AWS 官方已更新 1 年前
- AWS 官方已更新 2 年前