如何使用系统策略来控制对我的 EFS 文件系统的访问?

3 分钟阅读
0

我想要跨 AWS 账户访问我的 Amazon Elastic File System(Amazon EFS)文件系统,以便能够共享文件。我想要对网络文件系统(NFS)客户端和 EFS 接入点使用 AWS Identity and Access Management(IAM)授权。

简短描述

要访问 Amazon EFS 文件系统,请对 NFS 客户端和接入点使用 IAM 授权。要挂载 EFS 文件系统,请使用 Amazon EFS 挂载助手。默认情况下,挂载助手使用 DNS 来解析挂载目标的 IP 地址。如果从其他账户或 Amazon Virtual Private Cloud(Amazon VPC)挂载,则必须手动解析 Amazon EFS 挂载目标 IP 地址。

先决条件:

  • 使用 VPC 对等连接或 VPC 中转网关连接 NFS 客户端的 VPC 和 EFS 文件系统。凭借此连接,相同或不同账户中的 Amazon Elastic Compute Cloud(Amazon EC2)实例可访问不同 VPC 中的 EFS 文件系统。
  • 向 IAM 角色授予对 Amazon EFS 和 NFS 客户端资源的控制台或读取访问权限。
  • 在 NFS 客户端中安装 Amazon EFS 客户端botocore 包。
    **注意:**在跨账户场景中,您无法运行通常的 NFS 命令,因此需要 botocore 包和 Amazon EFS 客户端。

解决方法

**注意:**如果在运行 AWS 命令行界面(AWS CLI)命令时收到错误,请参阅 Troubleshoot AWS CLI errors。此外,请确保使用的是最新版本的 AWS CLI

授予访问和挂载跨账户 EFS 文件系统的权限

要授予访问和挂载跨账户 EFS 文件系统的权限,请在 IAM 策略中添加语句,或使用 AWS CLI 代入角色。

添加策略语句

在 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

要使用 AWS CLI 代入角色,请参阅如何使用 AWS CLI 代入 IAM 角色?

由于 AWS CLI 无法解析位于另一个 VPC 中的 EFS 文件系统的 DNS,因此必须为客户端确定正确的挂载目标 IP 地址。然后,配置该客户端。要挂载 EFS 文件系统,请使用与 NFS 客户端位于同一可用区的挂载目标 IP 地址。可用区名称映射可能因账户而异。当在另一个账户中挂载 EFS 文件系统时,NFS 客户端和挂载目标必须位于同一个可用区中。

确定 EC2 实例的可用区

要确定 EC2 实例的可用区,请使用 Amazon EC2 控制台或 AWS CLI。

使用 Amazon EC2 控制台

完成下面的步骤:

  1. 打开 Amazon EC2 控制台
  2. 选择实例
  3. 选择 EC2 实例 ID,然后选择联网
  4. 联网详细信息下,找到可用区。

使用 AWS CLI

从对 Amazon EC2 具有足够读取权限的 IAM 实体运行 describe-availability-zones 命令:

$ 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 地址

要确定本地可用区的挂载目标 IP 地址,请使用 Amazon EFS 控制台或 AWS CLI。

使用 Amazon EFS 控制台

完成下面的步骤:

  1. 打开 Amazon EFS 控制台
  2. 选择文件系统
  3. 选择 EFS 文件系统 ID
  4. 网络下,记下可用区的 IP 地址。

使用 AWS CLI

完成下面的步骤:

  1. 从对 Amazon EC2 具有足够读取权限的 IAM 实体运行 describe-mount-targets 命令:

    $ 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"
            }
        ]
    }
  2. 从上述输出中,记下与实例的可用区中的挂载目标对应的 IP 地址。

将 hosts 条目添加到 /etc/hosts 文件并挂载 EFS 文件系统

完成下面的步骤:

  1. 运行以下命令,将 hosts 条目添加到 NFS 客户端中的 /etc/hosts 文件:
    $ echo "10.0.2.153 fs-cee4feb7.efs.us-east-2.amazonaws.com" | sudo tee -a /etc/hosts
    **注意:**在上述命令中,DNS 名称的格式为 mount-target-IP-Address file-system-ID.efs.region.amazonaws.com。将示例 IP 地址替换为挂载目标的 IP 地址。
  2. 使用挂载助手挂载 EFS 文件系统

如果在挂载文件系统时遇到问题,请参阅 Troubleshooting mount issues

相关信息

Creating file system policies

AWS 官方
AWS 官方已更新 9 个月前
没有评论