我希望我的 AWS 账户中的 AWS Transfer Family 服务器访问另一个账户中的 Amazon Elastic File System (Amazon EFS) 文件系统。我还想为我的 Transfer Family 服务器设置对 Amazon EFS 文件系统的跨账户访问权限。
解决方案
**注意:**如果您在运行 AWS CLI 命令时收到错误,请参阅 AWS CLI 错误故障排除。此外,请确保您使用的是最新版本的 AWS CLI。
要配置您的 Transfer Family 服务器,请在账户 A 中创建一个可访问账户 B 中文件系统的 AWS Identity and Access Management (IAM) 角色。然后,在账户 A 中创建一个配置了该 IAM 角色的 Transfer Family 服务器用户。确认账户 A 中的 Transfer Family 服务器用户可以访问账户 B 中的文件系统。
**注意:**AWS Transfer Family 控制台仅显示同一账户中的 Amazon EFS 文件系统。要将您的 Transfer Family 服务器与其他账户中的文件系统一起使用,请使用 AWS CLI 或 AWS SDK。
在账户 A 中创建一个可访问文件系统的 IAM 角色
为您的服务器用户创建 IAM 角色。对于角色的 IAM 策略,请使用以下策略语句:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "RootFileSystemAccess",
"Effect": "Allow",
"Action": [
"elasticfilesystem:ClientRootAccess",
"elasticfilesystem:ClientMount",
"elasticfilesystem:ClientWrite"
],
"Resource": "arn:aws:elasticfilesystem:region:accountB-id:file-system/file-system-id"
}
]
}
在账户 B 的文件系统中添加一个策略,向账户 A 的 IAM 角色授予权限:
{
"Sid": "EFS-TransferFamily",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::AccounA-id:role/RoleName"
},
"Action": [
"elasticfilesystem:ClientRootAccess",
"elasticfilesystem:ClientWrite",
"elasticfilesystem:ClientMount"
],
"Resource": "arn:aws:elasticfilesystem:region:accountB-id:file-system/file-system-id"
}
在账户 A 中创建一个具有该 IAM 角色的 Transfer Family 服务器用户
运行以下 create-user AWS CLI 命令以创建 Transfer Family 用户:
aws transfer create-user --user-name "sftp" --server-id "SERVER-ID" --role "arn:aws:iam::accountA-id:role/RoleName" --home-directory "/file-system-id/username"
该命令将返回服务器 ID 和用户名。
输出示例:
{
"ServerId": "MY_SERVER_ID",
"UserName": "MY_SERVER_USER_NAME"
}
验证账户 A 中的 Transfer Family 服务器用户是否可以访问账户 B 中的文件系统
完成以下步骤:
-
以您创建的用户身份连接到您的服务器。您可以运行以下 sftp OpenSSH 命令进行连接:
sftp -i myserveruser MY_SERVER_USER_NAME@MY_SERVER_ID.server.transfer.us-east-1.amazonaws.com
-
列出存储桶的主目录。如果您使用 OpenSSH,请运行 ls 命令:
ls
如果该命令返回主目录,则表明您的服务器用户对 Amazon EFS 文件系统具有跨账户访问权限。
相关信息
创建支持 SFTP 的服务器
创建文件系统策略
如何配置我的 AWS Transfer Family 服务器以使用其他 AWS 账户中的 Amazon S3 存储桶?
为 Transfer Family 配置跨账户访问权限