使用 S3 批量复制将数据从 S3 存储桶复制到其他账户和区域
Appasaheb Bagali、Lakshmikanth B D、Shubham Harsora、Purushotham G K 和 Suman Rajotia,Amazon Web Services
摘要
此模式说明了在设置存储桶后,如何使用 Amazon Simple Storage Service(Amazon S3)批量复制将一个 S3 存储桶的内容自动复制到另一个 S3 存储桶,而无需任何手动干预。源存储桶和目标存储桶可以位于相同或不同的 AWS 账户 或区域中。
S3 批量复制为您提供了一种方法,以复制在复制配置实施之前就已存在的 Amazon S3 对象、已经复制的对象和复制失败的对象。此方法使用 S3 批量操作任务。任务完成后,您将收到完成报告。
若有场景需要新对象从源存储桶持续自动迁移到目标存储桶,则可以使用 S3 批量复制。对于一次性迁移,您可以改用 AWS Command Line Interface(AWS CLI),如模式使用 AWS CLI 将数据从 S3 存储桶复制到其他账户和区域中所述。
先决条件和限制
源 AWS 账户。
目标 AWS 账户。
源账户中的一个 S3 存储桶,包含多个对象(文件或文件夹)。
目标账户中的一个或多个 S3 存储桶。
源和目标存储桶必须均已启用 S3 版本控制。
AWS Identity and Access Management(IAM)权限,用于在源和目标账户上创建 IAM 策略、IAM 角色和 S3 存储桶策略。
当 S3 批复制任务处于活动状态时,即会禁用 Amazon S3 生命周期规则。这可确保源存储桶和目标存储桶的对等。否则这些目标存储存储桶将不会与源存储存储桶完全一样。
架构
AWS 服务
最佳实践
以下来自 AWS re:Invent 2022 的视频讨论了使用 Amazon S3 复制实现监管合规、数据保护和提高应用程序性能的最佳实践。
https://www.youtube-nocookie.com/embed/hrJEbISBL04?controls=0
操作说明
| 任务 | 描述 | 所需技能 |
|---|
为跨账户复制创建 IAM 策略。 | 在 AWS 源账户中: 打开 IAM 管理控制台。 创建新的 IAM 策略。 在策略编辑器部分,选择 JSON,然后粘贴以下程式码。 {
"Version": "2012-10-17",
"Statement": [
{
"Sid": "GetSourceBucketConfiguration",
"Effect": "Allow",
"Action": [
"s3:ListBucket",
"s3:GetBucketLocation",
"s3:GetBucketAcl",
"s3:GetReplicationConfiguration",
"s3:GetObjectVersionForReplication",
"s3:GetObjectVersionAcl",
"s3:GetObjectVersionTagging"
],
"Resource": [
"arn:aws:s3:::source-bucket-name",
"arn:aws:s3:::source-bucket-name/*"
]
},
{
"Sid": "ReplicateToDestinationBuckets",
"Effect": "Allow",
"Action": [
"s3:List*",
"s3:*Object",
"s3:ReplicateObject",
"s3:ReplicateDelete",
"s3:ReplicateTags"
],
"Resource": [
"arn:aws:s3:::destination-bucket-name*",
"arn:aws:s3:::destination-bucket-name/*"
]
},
{
"Sid": "PermissionToOverrideBucketOwner",
"Effect": "Allow",
"Action": [
"s3:ObjectOwnerOverrideToBucketOwner"
],
"Resource": [
"arn:aws:s3:::destination-bucket-name*",
"arn:aws:s3:::destination-bucket-name/*"
]
}
]
}
该策略包含三条语句: GetSourceBucketConfiguration:提供对复制配置和对象版本的访问权限,以便能在源存储桶上复制。
ReplicateToDestinationBuckets:提供复制到目标存储桶的访问权限。您可以在数组中指定多个目标存储桶。 PermissionToOverrideBucketOwner:提供对 ObjectOwnerOverrideToBucketOwner 的访问权限,以便目标存储桶可以拥有目标账户中从源账户复制的对象。
选择下一步,提供策略名称(例如 cross-account-bucket-replication-policy),然后选择创建策略。
有关更多信息,请参阅 IAM 文档中的创建 IAM 策略。 | 云管理员、AWS 管理员 |
为跨账户复制创建 IAM 角色。 | 在 AWS 源账户中: 在 IAM 控制台上,使用以下信息创建一个 IAM 角色: 在可信实体类型中选择 Amazon Web Services。 对于服务,选择 S3。 对于使用案例,选择 S3 批量操作。 选择在上一步中创建的策略。
提供角色名称,例如 cross-account-bucket-replication-role,然后选择创建角色。
有关更多信息,请参阅 IAM 文档中的创建 IAM 角色。 | 云管理员、AWS 管理员 |
| 任务 | 描述 | 所需技能 |
|---|
在源账户中,针对源存储桶创建复制规则。 | 在 AWS 源账户中: 打开 Amazon S3 控制台。 导航到源存储桶,然后选择管理选项卡。 使用以下配置创建复制规则: 提供规则名称,例如 s3-replication-rule。 对于 Status(状态),选择 Enabled(已启用)。 对于规则范围,选择应用到存储桶中的所有对象。 对于目标,选择在其他账户中指定存储桶,然后输入目标 AWS 账户 编号和存储桶名称。 选择将对象所有权更改为目标存储桶所有者的选项。 对于 IAM 角色,选择您之前在原账户中创建的角色。 对于其他复制选项,选择所有可用选项。它们提供了快速复制内容、通过 Amazon CloudWatch 指标监控复制进度、复制删除标记和复制元数据更改的功能。 选择保存。
如果您有多个目标存储桶,请创建其他复制规则。
有关更多信息,请参阅 Amazon S3 文档中的当源存储桶和目标存储桶由不同账户拥有时配置复制。 | AWS 管理员、云管理员 |
| 任务 | 描述 | 所需技能 |
|---|
为目标存储桶添加存储桶策略。 | 必须对 AWS 目标账户中的每个目标存储桶单独执行此步骤。 在 AWS 目标账户中: 打开 Amazon S3 控制台,导航到目标存储桶,然后选择权限选项卡。 通过提供以下 JSON 代码编辑存储桶策略,然后保存策略:
{
"Version": "2012-10-17",
"Id": "PolicyForDestinationBucket",
"Statement": [
{
"Sid": "Permissions on objects and buckets",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::SourceAWSAccountNumber:role/IAM-Role-created-in-step1-in-source-account"
},
"Action": [
"s3:List*",
"s3:GetBucketVersioning",
"s3:PutBucketVersioning",
"s3:ReplicateDelete",
"s3:ReplicateObject"
],
"Resource": [
"arn:aws:s3:::destination-bucket",
"arn:aws:s3:::destination-bucket/*"
]
},
{
"Sid": "Permission to override bucket owner",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::SourceAWSAccountNumber:role/IAM-Role-created-in-step1-in-source-account"
},
"Action": "s3:ObjectOwnerOverrideToBucketOwner",
"Resource": "arn:aws:s3:::destination-bucket/*"
}
]
}
该策略包含两条语句: | AWS 管理员、AWS 系统管理员、云管理员 |
| 任务 | 描述 | 所需技能 |
|---|
验证复制是否正常运行。 | 将对象添加到源存储桶。 验证新对象是否出现在目标账户的 S3 存储桶中。 查看 CloudWatch 指标: 在源存储桶中,选择指标选项卡。 在复制指标部分,选择复制规则。 请选择 Display charts (显示图表)。这些图表会显示待复制、复制延迟和待复制字节数等,以此反映复制的状态。
有关更多信息,请参阅 Amazon S3 文档中的使用 Amazon CloudWatch 监控指标。 | AWS 管理员、云管理员 |
相关资源