如何使用 IAM 授权和 EFS 访问点跨账户访问 EFS 文件系统?

上次更新时间:2020 年 2 月 12 日

我想跨账户访问 Amazon Elastic File System (Amazon EFS) 文件系统,以便共享文件。如何使用针对 NFS 客户端和 EFS 访问点AWS Identity and Access Management (IAM) 授权来执行此操作?

简短描述

您可以使用针对 NFS 客户端和 EFS 访问点的 IAM 授权以及 Amazon EFS 挂载帮助程序来挂载您的 Amazon EFS 文件系统。默认情况下,挂载帮助程序将使用 DNS 解析挂载目标的 IP 地址,因此,如果您从其他账户或 VPC 挂载,则必须手动解析 EFS 挂载目标的 IP 地址。

先决条件

您的 NFS 客户端的 Amazon Virtual Private Cloud (Amazon VPC) 和您的 Amazon EFS 文件系统的 VPC 必须使用 VPC 对等连接VPC Transit Gateway 进行连接。使用 VPC 对等连接或 Transit Gateway 连接 VPC,这允许来自相同或不同账户的 Amazon Elastic Compute Cloud (Amazon EC2) 实例访问不同 VPC 中的 Amazon EFS 文件系统。

解决方法

确定要用于您的客户端的正确挂载目标 IP 地址,然后配置客户端以使用该 IP 地址挂载 Amazon EFS 文件系统。

1.    确定 EFS 挂载目标 IP 地址。

为确保高可用性,最佳做法是始终在与 NFS 客户端相同的可用区中使用挂载目标 IP 地址。可用区名称映射可能因账户而异。如果要在另一个账户中挂载 Amazon EFS 文件系统,请通过调用 DescribeAvailabilityZonesDescribeMountTargets 来确保 NFS 客户端和挂载目标位于相同的可用区 ID (AZ ID) 中。如果在同一个账户中,请通过附加了 AmazonElasticFileSystemReadOnlyAccess 托管策略的 IAM 角色调用这两个账户。如果在不同的账户中,请使用文件系统 IAM 资源策略,使用委托人 ARN 向跨账户角色授予 DescribeMountTargets 权限。

使用本地实例的可用区名称调用 DescribeAvailabilityZones 以确定 AZ ID。

[ec2-user@ip-172-30-2-10 ~]$ 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"
        }
    ]
}

在上述示例中,实例位于 AZ ID use2-az2 中。

调用文件系统上的 DescribeMountTargets,以确定本地 AZ 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"
        }
    ]
}

在上述示例输出中,AZ ID use2-as2 有一个 IP 为 10.0.2.153 的挂载目标。

2.    为挂载目标 IP 添加主机条目。

mount-target-IP-Address file-system-ID.efs.region.amazonaws.com 格式将行添加到客户端的 /etc/hosts 文件中。

echo "10.0.2.153 fs-cee4feb7.efs.us-east-2.amazonaws.com" | sudo tee -a /etc/hosts

3.    挂载您的文件系统。

使用挂载帮助程序来挂载您的文件系统。首先,确保已安装挂载帮助程序,然后创建挂载目标目录,最后进行挂载。下面的示例在运行 Amazon Linux 的主机上安装挂载帮助程序,创建一个目录,然后使用 IAM 凭证执行挂载。

sudo yum install -y amazon-efs-utils
sudo mkdir /efs/
sudo mount -t efs -o tls,iam fs-cee4feb7 /efs/

以下示例为使用访问点挂载文件系统。

sudo yum install -y amazon-efs-utils
sudo mkdir /efs/
sudo mount -t efs -o tls,iam,accesspoint=fsap-0b370416e358edbfd fs-cee4feb7 /efs/

这篇文章对您有帮助吗?

我们可以改进什么?


需要更多帮助?