AWS announces preview of AWS Interconnect - multicloud
AWS announces AWS Interconnect – multicloud (preview), providing simple, resilient, high-speed private connections to other cloud service providers. AWS Interconnect - multicloud is easy to configure and provides high-speed, resilient connectivity with dedicated bandwidth, enabling customers to interconnect AWS networking services such as AWS Transit Gateway, AWS Cloud WAN, and Amazon VPC to other cloud service providers with ease.
如何配置我的 AWS Transfer Family 服务器以使用其他 AWS 账户中的 Amazon S3 存储桶?
我希望账户 A 中的 AWS Transfer Family 服务器能够访问另一个账户(即账户 B)中的 Amazon Simple Storage Service (Amazon S3) 存储桶。我想设置自己的服务器以跨账户访问该存储桶。
简短描述
请按照以下步骤执行操作:
- 在账户 A 中创建一个拥有该存储桶访问权限的 AWS Identity and Access Management (IAM) 角色。
- 在账户 B 中更新存储桶策略以向该 IAM 角色授予跨账户访问权限。
- 在账户 A 中创建一个配置有该 IAM 角色的 Transfer Family 服务器用户。
- 验证账户 A 中的 Transfer Family 服务器用户是否可以访问账户 B 中的 S3 存储桶。
- (可选)将 S3 对象所有权设置为账户 B 中的首选存储桶拥有者。
**注意:**AWS Transfer Family 控制台只显示同一账户中的 Amazon S3 存储桶。要让您的 Transfer Family 服务器使用其他账户中的存储桶,您必须使用 AWS Command Line Interface (AWS CLI) 或 AWS 开发工具包。
解决方法
在账户 A 中创建一个拥有该存储桶访问权限的 IAM 角色
为您的服务器用户创建一个 IAM 角色。对于该角色的 IAM 策略,请使用以下内容:
**注意:**请将 destination-DOC-EXAMPLE-BUCKET 替换为您想让您的服务器访问的 S3 存储桶名称。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowListingBucketReadandWriteandDelete", "Effect": "Allow", "Action": [ "s3:PutObject", "s3:PutObjectAcl", "s3:GetObject", "s3:DeleteObjectVersion", "s3:DeleteObject", "s3:GetObjectVersion", "s3:ListBucket", "s3:GetBucketLocation" ], "Resource": [ "arn:aws:s3:::destination-DOC-EXAMPLE-BUCKET/*", "arn:aws:s3:::destination-DOC-EXAMPLE-BUCKET" ] } ] }
**注意:**Transfer Family 需要 s3:PutObjectAcl 权限才能进行跨账户 S3 上传。
在创建 IAM 角色之后,运行 get-role 命令以获取该角色的 ID,命令格式如下:
$ aws iam get-role --role-name "ROLE_NAME"
下一步将需要使用该角色 ID。
在账户 B 中更新存储桶策略以向该 IAM 角色授予跨账户访问权限
修改目标存储桶的策略以向您创建的 IAM 角色授予访问权限。您可以使用与以下内容类似的存储桶策略:
**注意:**请将 arn:aws:iam::123456789012:root 替换为您的服务器所属账户的 Amazon 资源名称 (ARN)。将 destination-DOC-EXAMPLE-BUCKET 替换为该存储桶的名称。将 AROA1234567890 替换为您创建的 IAM 角色的角色 ID。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "BucketPolicyForTransferFamily", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123456789012:root" }, "Action": [ "s3:PutObject", "s3:PutObjectAcl", "s3:GetObject", "s3:DeleteObjectVersion", "s3:DeleteObject", "s3:GetObjectVersion", "s3:ListBucket", "s3:GetBucketLocation" ], "Resource": [ "arn:aws:s3:::destination-DOC-EXAMPLE-BUCKET", "arn:aws:s3:::destination-DOC-EXAMPLE-BUCKET/*" ], "Condition": { "StringLike": { "aws:userId": "AROA1234567890:*" } } } ] }
此示例策略中的 Condition 元素是可选的。包含 Condition 元素以将存储桶访问权限仅授予您指定的 IAM 角色。也可移除该元素,从而向您的服务器所属账户的所有 IAM 角色和用户授予访问权限。
在账户 A 中创建一个配置有该 IAM 角色的 Transfer Family 服务器用户
1. 为您的 Transfer Family 服务器生成 SSH 密钥。
2. 获取服务器的服务器 ID。
3. 使用 AWS CLI 运行 create-user 命令。对于 --server-id,请输入服务器的 ID。对于 --role,请输入您创建的 IAM 角色的 ARN。对于 --ssh-public-key-body,请输入您创建 SSH 密钥时生成的 .pub 文件的内容。
$ aws transfer create-user --user-name "MY_SERVER_USER_NAME" --server-id "MY_SERVER_ID" --role "MY_IAM_ROLE_ARN" --home-directory "/destination-DOC-EXAMPLE-BUCKET/MY_SERVER_USER_NAME" --ssh-public-key-body "CONTENTS_OF_MY_SSH_.PUB_FILE"
注意:如果在运行 AWS CLI 命令时遇到错误,请确保您使用的是最新版本的 AWS CLI。
该命令会返回服务器 ID 和您创建的用户:
{ "ServerId": "MY_SERVER_ID", "UserName": "MY_SERVER_USER_NAME" }
**重要提示:**要限定服务器用户只能访问其主目录,请在 IAM 中创建一个范围缩小策略。然后编辑服务器用户的属性以应用您创建的范围缩小策略。
验证账户 A 中的 Transfer Family 服务器用户是否可以访问账户 B 中的存储桶
1. 以您创建的用户身份连接到您的服务器。例如,以下 OpenSSH 命令连接到 SFTP 服务器:
$ sftp -i myserveruser MY_SERVER_USER_NAME@MY_SERVER_ID.server.transfer.us-east-1.amazonaws.com
2. 列出该存储桶的主目录以进行测试。如果您使用的是 OpenSSH,请运行以下命令:
$ ls
如果命令返回主目录,说明您的服务器用户拥有跨账户访问该存储桶的权限。
(可选)将 S3 对象所有权设置为账户 B 中的首选存储桶拥有者
默认情况下,Amazon S3 对象由上传对象的 AWS 账户所有。这意味着,默认情况下,上传到目标存储桶的对象由源服务器的账户所有。
要使目标账户能够自动拥有跨账户上传的对象,请将目标存储桶的 S3 对象所有权设置为首选存储桶拥有者。执行此操作后,通过 AWS Transfer Family 服务器上传的所有新对象将自动归目标存储桶的账户所有。
相关信息
创建用户(AWS Transfer Family 用户指南)
添加用户(AWS Transfer Family 用户指南)
