本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用将数据从 S3 存储桶复制到另一个账户和区域 AWS CLI
由 Appasaheb Bagali (AWS) 和 Purushotham G K () 创作 AWS
摘要
此模式描述了如何将数据从源账户中的AWS亚马逊简单存储服务 (Amazon S3) 存储桶迁移到位于AWS同一区域或不同区域的AWS另一个账户中的目标 S3 存储桶。
源 S3 存储桶允许使用附加的资源策略进行AWS身份和访问管理 (IAM) 访问。目标账户中的用户必须代入拥有源存储桶 PutObject
和 GetObject
权限的角色。最后,运行 copy
和 sync
命令,将数据从源 S3 存储桶传输至目标 S3 存储桶。
账户拥有他们上传至 S3 存储桶的对象。如果您跨账户和地区复制对象,则将复制对象的权限授予目标账户。您可以通过将对象的访问控制列表 (ACL) 更改为,来更改其所有权bucket-owner-full-control
。但是,我们建议您向目标账户授予编程跨账户权限,因为ACLs可能很难管理多个对象。
这种情况要求IAM用户具有编程访问权限和长期证书,这会带来安全风险。为帮助减轻这种风险,我们建议仅向这些用户提供执行任务所需的权限,并在不再需要这些用户时将其移除。必要时可以更新访问密钥。有关更多信息,请参阅《IAM用户指南》中的更新访问密钥。 |
此模式涵盖一次性迁移。对于需要将新对象从源存储桶持续自动迁移到目标存储桶的场景,您可以改用 S3 Batch Replication,如使用 S3 Batch Replic ation 将数据从 S3 存储桶复制到另一个账户和区域模式中所述。
先决条件和限制
架构
最佳实践
操作说明
任务 | 描述 | 所需技能 |
---|
创建IAM用户并获取访问密钥。 | 登录AWS管理控制台并创建具有编程访问权限的IAM用户。有关详细步骤,请参阅IAM文档中的创建IAM用户。无需为此用户附加任何策略。 为该用户生成访问密钥与私有密钥。有关说明,请参阅AWS文档中的AWS账户和访问密钥。
| AWS DevOps |
创建IAM基于身份的策略。 | 使用以下IAM权限创建名为S3MigrationPolicy 的基于身份的策略。有关详细步骤,请参阅IAM文档中的创建IAM策略。 {
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:ListBucket",
"s3:GetObject",
"s3:GetObjectTagging",
"s3:GetObjectVersion",
"s3:GetObjectVersionTagging"
],
"Resource": [
"arn:aws:s3:::amazon-s3-demo-source-bucket",
"arn:aws:s3:::amazon-s3-demo-source-bucket/*"
]
},
{
"Effect": "Allow",
"Action": [
"s3:ListBucket",
"s3:PutObject",
"s3:PutObjectAcl",
"s3:PutObjectTagging",
"s3:GetObjectTagging",
"s3:GetObjectVersion",
"s3:GetObjectVersionTagging"
],
"Resource": [
"arn:aws:s3:::amazon-s3-demo-destination-bucket",
"arn:aws:s3:::amazon-s3-demo-destination-bucket/*"
]
}
]
}
这种基于身份的策略允许此角色用户访问源存储桶和目标存储桶。 | AWS DevOps |
创建一个 IAM 角色。 | 使用以下信任策略创建一个S3MigrationRole 名为的IAM角色,然后附加之前创建的角色S3MigrationPolicy 。有关详细步骤,请参阅IAM文档中的创建角色以向IAM用户委派权限。 {
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::<destination_account>:user/<user_name>"
},
"Action": "sts:AssumeRole",
"Condition": {}
}
]
}
根据您的用例,修改目标IAM角色的 Amazon 资源名称 (ARN) 或信任策略中的用户名。 此信任策略允许新创建的IAM用户假设S3MigrationRole 。 | AWS DevOps |
任务 | 描述 | 所需技能 |
---|
创建并附加 S3 存储桶策略。 | 登录您的源账户的AWS管理控制台并打开 Amazon S3 控制台。选择源 S3 存储桶,然后选择权限。在存储桶策略下,选择编辑,然后粘贴以下存储桶策略。选择保存。 {
"Version": "2012-10-17",
"Statement": [
{
"Sid": "DelegateS3Access",
"Effect": "Allow",
"Principal": {"AWS": "arn:aws:iam::<destination_account>:role/<RoleName>"},
"Action": ["s3:ListBucket",
"s3:GetObject",
"s3:GetObjectTagging",
"s3:GetObjectVersion",
"s3:GetObjectVersionTagging"
],
"Resource": [
"arn:aws:s3:::amazon-s3-demo-source-bucket/*",
"arn:aws:s3:::amazon-s3-demo-source-bucket"
]
}
]
}
请确保包含目标AWS账户的账户 ID,并根据您的要求配置存储桶策略模板。 此基于资源的策略允许目标角色 S3MigrationRole 访问源账户中的 S3 对象。 | 云管理员 |
任务 | 描述 | 所需技能 |
---|
创建目标 S3 存储桶。 | 登录目标账户的AWS管理控制台,打开 Amazon S3 控制台,然后选择创建存储桶。根据您的要求创建 S3 存储桶。有关更多信息,请参阅 Amazon S3 文档中的创建存储桶。 | 云管理员 |
任务 | 描述 | 所需技能 |
---|
AWSCLI使用新创建的用户凭据进行配置。 | 安装最新版本的AWSCLI。有关说明,请参阅AWSCLI文档AWSCLI中的安装或更新最新版本的。 使用您创建CLI的用户的AWS访问密钥运行$ aws configure 并进行更新。有关更多信息,请参阅AWSCLI文档中的配置和凭据文件设置。
| AWS DevOps |
代入 S3 迁移角色。 | 使用AWSCLI来假设S3MigrationRole : aws sts assume-role \
--role-arn "arn:aws:iam::<destination_account>:role/S3MigrationRole" \
--role-session-name AWSCLI-Session
此命令输出多条信息。在凭证数据块中,您需要 AccessKeyId 、SecretAccessKey 和 SessionToken 。此示例使用环境变量 RoleAccessKeyID 、RoleSecretKey 和 RoleSessionToken 。请注意,过期字段的时间戳以UTC时区为单位。时间戳表示IAM角色的临时证书何时过期。如果临时证书过期,则必须sts:AssumeRole API再次调用。 创建三个环境变量来代入IAM角色。这些环境变量通过以下输出填充: # Linux
export AWS_ACCESS_KEY_ID=RoleAccessKeyID
export AWS_SECRET_ACCESS_KEY=RoleSecretKey
export AWS_SESSION_TOKEN=RoleSessionToken
# Windows
set AWS_ACCESS_KEY_ID=RoleAccessKeyID
set AWS_SECRET_ACCESS_KEY=RoleSecretKey
set AWS_SESSION_TOKEN=RoleSessionToken
通过运行以下命令验证您是否代入了该IAM角色: aws sts get-caller-identity
有关更多信息,请参阅AWS知识中心。 | AWS 管理员 |
将数据从源 S3 存储桶复制并同步至目标 S3 存储桶。 | 当您代入 S3MigrationRole 角色后,您可使用复制 (cp) 或同步 (sync) 命令复制数据。 复制(有关详细信息,请参阅AWSCLI命令参考): aws s3 cp s3://amazon-s3-demo-source-bucket / \
s3://amazon-s3-demo-destination-bucket / \
--recursive --source-region SOURCE-REGION-NAME --region DESTINATION-REGION-NAME
同步(有关详细信息,请参阅AWSCLI命令参考): aws s3 sync s3://amazon-s3-demo-source-bucket / \
s3://amazon-s3-demo-destination-bucket / \
--source-region SOURCE-REGION-NAME --region DESTINATION-REGION-NAME
| 云管理员 |
故障排除
事务 | 解决方案 |
---|
调用 ListObjects 操作时发生错误 (AccessDenied ) :访问被拒绝 | |
相关资源