我想要跨 AWS 账户访问我的 Amazon Elastic File System (Amazon EFS) 文件系统,以便能够共享文件。我想要对网络文件系统 (NFS) 客户端和 Amazon EFS 接入点使用 AWS Identity and Access Management (IAM) 授权。
解决方案
**注意:**如果您在运行 AWS 命令行界面 (AWS CLI) 命令时收到错误,请参阅 AWS CLI 错误故障排除。此外,请确保您使用的是最新版本的 AWS CLI。
连接 VPC
使用 VPC 对等连接将 NFS 客户端的虚拟私有云 (VPC) 和 EFS 文件系统连接起来。或者,使用 Amazon Virtual Private Cloud (Amazon VPC) Transit Gateway。凭借此连接,相同或不同账户中的 Amazon Elastic Compute Cloud (Amazon EC2) 实例可访问不同 VPC 中的 EFS 文件系统。
授予访问和挂载跨账户 EFS 文件系统的权限
要授予访问和挂载跨账户 EFS 文件系统的权限,请在您的 IAM 策略中添加以下语句:
{ "Sid": "EfsPermissions",
"Effect": "Allow",
"Action": [
"elasticfilesystem:ClientMount",
"elasticfilesystem:ClientWrite",
"elasticfilesystem:ClientRootAccess"
],
"Resource": "arn:aws:elasticfilesystem:region:account-id:file-system/file-system-id"
}
**注意:**上述示例语句允许 IAM 角色在 EFS 文件系统上具有挂载、写入和根访问权限。如果 NFS 客户端是一个 EC2 实例,请将 IAM 角色附加到该实例。
或者,使用 AWS CLI 代入 IAM 角色。
**注意:**AWS CLI 无法解析位于另一个 VPC 中的 EFS 文件系统的 DNS。因此,您必须为您的客户端确定正确的挂载目标 IP 地址。然后,配置该客户端。要挂载 EFS 文件系统,请使用与 NFS 客户端位于同一可用区的挂载目标 IP 地址。可用区名称映射可能因账户而异。当在另一个账户中挂载 EFS 文件系统时,NFS 客户端和挂载目标必须位于同一个可用区中。
确定您的实例的可用区
完成以下步骤:
- 打开 Amazon EC2 控制台。
- 选择 Instances(实例)。
- 选择您的实例,然后选择 Networking(联网)。
- 在 Networking details(联网详细信息)下,找到可用区。
或者,从对 Amazon EC2 具有足够读取权限的 IAM 实体运行以下 describe-availability-zones AWS CLI 命令:
aws ec2 describe-availability-zones --zone-name `curl -s http://169.254.169.254/latest/meta-data/placement/availability-zone`
输出示例:
{
"AvailabilityZones": [
{
"State": "available",
"ZoneName": "us-east-2b",
"Messages": [],
"ZoneId": "use2-az2",
"RegionName": "us-east-2"
}
]
}
确定本地可用区的挂载目标 IP 地址
完成以下步骤:
- 打开 Amazon EFS 控制台。
- 选择 File Systems(文件系统)。
- 选择您的文件系统。
- 在 Network(网络)下,记下可用区的 IP 地址。
或者,从对 Amazon EC2 具有足够读取权限的 IAM 实体运行以下 describe-mount-targets 命令:
aws efs describe-mount-targets --file-system-id fs-cee4feb7
**注意:**将 fs-cee4feb7 替换为您的文件系统 ID。
在命令的输出中,记下与实例的可用区中的挂载目标对应的 IP 地址。输出示例:
aws efs describe-mount-targets --file-system-id fs-cee4feb7{
"MountTargets": [
{
"MountTargetId": "fsmt-a9c3a1d0",
"AvailabilityZoneId": "use2-az2",
"NetworkInterfaceId": "eni-048c09a306023eeec",
"AvailabilityZoneName": "us-east-2b",
"FileSystemId": "fs-cee4feb7",
"LifeCycleState": "available",
"SubnetId": "subnet-06eb0da37ee82a64f",
"OwnerId": "958322738406",
"IpAddress": "10.0.2.153"
},
...
{
"MountTargetId": "fsmt-b7c3a1ce",
"AvailabilityZoneId": "use2-az3",
"NetworkInterfaceId": "eni-0edb579d21ed39261",
"AvailabilityZoneName": "us-east-2c",
"FileSystemId": "fs-cee4feb7",
"LifeCycleState": "available",
"SubnetId": "subnet-0ee85556822c441af",
"OwnerId": "958322738406",
"IpAddress": "10.0.3.107"
}
]
}
挂载 EFS 文件系统
完成以下步骤:
- 运行以下命令,将 hosts 条目添加到 NFS 客户端中的 /etc/hosts 文件:
echo "10.0.2.153 fs-cee4feb7.efs.us-east-2.amazonaws.com" | sudo tee -a /etc/hosts
**注意:**将 10.0.2.153 替换为您的挂载目标 IP 地址,将 fs-cee4feb7 替换为您的文件系统 ID,将 us-east-2 替换为您的 AWS 区域。
- 使用挂载助手挂载 EFS 文件系统。默认情况下,挂载助手使用 DNS 来解析挂载目标的 IP 地址。如果从其他账户或 Amazon VPC 挂载,则必须手动解析 Amazon EFS 挂载目标 IP 地址。
如果在挂载文件系统时遇到问题,请参阅对挂载问题进行故障排除。
相关信息
Creating file system policies