S3 跨账号复制

场景背景

公司业务中可能涉及到内部账号之间数据的迁移,那么如何迁移整个 S3 中的数据到另外一个账户可能困扰着我们。今天我们就要教大家怎么实现跨账号的 S3 数据迁移,请准备两个Amazon Web Services 账户,一起开启数据迁移之旅。

要确保目标账户拥有从另一个账户复制 S3 的对象,请授予目标账户拥有跨账户复制的权限。大致按照以下步骤配置跨账户权限,将对象从账户 A 中的源存储桶复制到账户 B 中的目标存储桶:

  • 存储桶策略 附加到账户 A 中的源存储桶。
  • Amazon IAM 策略 附加到账户 B 中的目标用户。
  • 使用目标账户 B 中的 IAM 用户执行跨账户复制。
  • 整个存储桶迁移的过程就是从A存储桶迁移到B存储桶的过程

步骤一:创建A存储桶

在账户 A 中创建 S3 存储桶。

登录账号 A, 点击 服务,进入 S3 服务控制台,并选择 创建存储桶

接着,设定存储桶的相关配置:

  • 存储桶名称:请根据需要自行创建一个全球唯一的存储桶名称
  • 区域:请根据需要自行选择;

其他配置保持默认,选择创建存储桶;

步骤二:A存储桶策略添加

选择第一步创建的 S3 存储桶,选择 权限,向下滚动,找到 存储桶策略,点击 编辑

将以下存储桶策略复制进去,并修改以下相关配置:

arn:aws:iam::11111111111:user/s3-demo 替换为账户 B 中 IAM 用户的 ARN

sourcebucketname 替换为在账号 A 中创建的 S3 存储桶名称;

其他配置保留默认。

Global区域

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "DelegateS3Access",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::11111111111:user/s3-demo"
},
"Action": [
"s3:ListBucket",
"s3:GetObject"
],
"Resource": [
"arn:aws:s3:::source_bucket_name/*",
"arn:aws:s3:::source_bucket_name"
]
}
]
}

中国区域

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "DelegateS3Access",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::11111111111:user/s3-demo"
},
"Action": [
"s3:ListBucket",
"s3:GetObject",
"s3:PutObject"
],
"Resource": [
"arn:aws-cn:s3:::sensors2aws/*",
"arn:aws-cn:s3:::sensors2aws"
]
}
]
}

步骤三:创建B存储桶

同理,在账号 B 中也创建一个 S3 存储桶,作为目标存储桶。具体操作过程请参考创建A存储桶

步骤四:B账号添加IAM策略

在账户 B 中,创建 IAM 客户托管策略。

点击 服务,进入 IAM 服务控制台,选择 策略,选择 创建策略,接着选择 JSON

接着,将以下 IAM 策略复制进去,并修改以下相关配置:

sourcebucketname 替换为源存储桶的名称,即在账户 A 中创建的 S3 存储桶名称;

destinationbucketname 替换为目标存储桶的名称,即在账户 B 中创建的 S3 存储桶名称。

这条策略是允许 IAM 用户将对象从账户 A 中的源存储桶复制到账户 B 中的目标存储桶。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:ListBucket",
"s3:GetObject"
],
"Resource": [
"arn:aws:s3:::source_bucket_name",
"arn:aws:s3:::source_bucket_name/*"
]
},
{
"Effect": "Allow",
"Action": [
"s3:ListBucket",
"s3:PutObject",
"s3:PutObjectAcl"
],
"Resource": [
"arn:aws:s3:::destination_bucket_name",
"arn:aws:s3:::destination_bucket_name/*"
]
}
]
}

中国区域

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:ListBucket",
"s3:GetObject"
],
"Resource": [
"arn:aws-cn:s3:::source_bucket_name",
"arn:aws-cn:s3:::source_bucket_name/*"
]
},
{
"Effect": "Allow",
"Action": [
"s3:ListBucket",
"s3:PutObject",
"s3:PutObjectAcl"
],
"Resource": [
"arn:aws-cn:s3:::destination_bucket_name",
"arn:aws-cn:s3:::destination_bucket_name/*"
]
}
]
}

再接着,选择 查看策略,输入策略的 名称和描述,最后选择 创建策略

步骤五:创建B账户的IAM用户

在账号 B 中,创建 IAM 用户。并将步骤 4 中的 IAM 策略附加到该用户中[1]。具体操作步骤可以参考以下官方文档:

[1] https://docs.aws.amazon.com/zh_cn/IAM/latest/UserGuide/id_users_create.html

注意:请把用户的访问密钥(访问密钥 ID 和秘密访问密钥)下载下来,后续会用到。

步骤六:本地安装CLI工具

在本地电脑安装AWS CLI 工具[2],并配置账号 B 的访问密钥[3]。

具体操作步骤可以参考以下官方文档:

[2] https://docs.aws.amazon.com/zh_cn/cli/latest/userguide/cli-chap-install.html

[3] https://docs.aws.amazon.com/zh_cn/cli/latest/userguide/cli-chap-configure.html

步骤七:测试跨账号复制

请在账号 A 的存储桶上传一个文件,并在账户 B 中的 IAM 用户可以使用 AWS 命令行界面 (AWS CLI) 运行 sync 命令:

1
aws s3 sync s3://source_bucket_name   s3://destination_bucket_name

并修改以下相关配置:

sourcebucketname 替换为源存储桶的名称,即在账户 A 中创建的 S3 存储桶名称;

destinationbucketname 替换为目标存储桶的名称,即在账户 B 中创建的 S3 存储桶名称。

原始地址

https://www.ecloudrover.com/h-nd-112.html