如何使用系統政策來控制 EFS 檔案系統的存取?

2 分的閱讀內容
0

我想要跨帳戶存取我的 Amazon Elastic File System (Amazon EFS) 檔案系統,以便共用檔案。如何針對 NFS 用戶端和 EFS 存取點使用 AWS Identity and Access Management (IAM) 授權來執行此操作?

簡短描述

您可以透過 Amazon EFS 掛載協助程式,為 NFS 用戶端和存取點使用 IAM 授權來掛載 Amazon EFS 檔案系統。依預設,掛載協助程式會使用 DNS 來解析掛載目標的 IP 地址。因此,如果您是從其他帳戶或 Amazon Virtual Private Cloud (Amazon VPC) 掛載,則必須手動解析 Amazon EFS 掛載目標 IP 地址。

先決條件

  1. NFS 用戶端和 EFS 檔案系統的 VPC 之間是使用 VPC 對等互連或 VPC Transit Gateway 來連線。這可讓來自相同或不同帳戶的 Amazon Elastic Compute Cloud (Amazon EC2) 執行個體存取不同 VPC 中的 EFS 檔案系統。
  2. 您的 IAM 角色 (執行個體角色或任何其他角色) 在 Amazon EFS 和 NFS 用戶端資源上具有主控台或讀取存取權限。
  3. NFS 用戶端中已安裝 Amazon EFS 用戶端botocore 套件。

解決方案

**注意:**如果您在執行AWS CLI 命令時收到錯誤,請確定您使用的是最新的 AWS Command Line Interface (AWS CLI) 版本

在此範例中,EFS 檔案系統是位於帳戶 A 中,而 NFS 用戶端則是位於帳戶 B 中。    

1.    為了存取和掛載跨帳戶 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 角色附加到執行個體。

2.    或者,您可以使用 AWS CLI 來擔任該角色。請注意,AWS CLI 無法解析位於另一個 VPC 中的 EFS 檔案系統的 DNS。因此,請先確認您用戶端的正確掛載目標 IP 地址。然後,設定用戶端以使用該 IP 地址掛載 EFS 檔案系統。

為了確保高可用性,請務必使用與 NFS 用戶端相同之可用區域 (AZ) 中的掛載目標 IP 地址。不同帳戶間的 AZ 名稱對應可能會有所不同。因為您是要掛載其他帳戶中的 EFS 檔案系統,所以 NFS 用戶端和掛載目標必須位於相同的 AZ ID 中。

若要確認 EC2 執行個體的 AZ,請使用以下方法之一呼叫 DescribeAvailabilityZone API:

  • 登入 Amazon EC2 主控台,然後選擇執行個體。選擇 EC2-Instance-ID,然後選擇聯網。在聯網詳細資訊下,您可以找到可用區域。

-或-

  • 從具有充分 Amazon EC2 讀取權限的 IAM 實體,執行與下方類似的命令,並取得類似的輸出:
$ 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"
        }
    ]
}

3.    若要確認本地 AZ 的掛載目標 IP 地址,請使用下列方法之一呼叫 DescribeMountTargets API:

  • 登入 Amazon EFS 主控台,然後選擇檔案系統。選擇 EFS-File-System-ID,然後在網路下,記下您可用區域的 IP 地址。

-或-

  • 從具有充分 Amazon EC2 讀取權限的 IAM 實體,執行與下方類似的命令,並取得類似的輸出:
$ 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"
        }
    ]
}

4.    從您取得的輸出中,記下 EC2 執行個體在 AZ 中的對應掛載目標 IP 地址。

5.    使用您取得的 IP 地址,在 NFS 用戶端的 /etc/hosts 檔案中新增主機項目。DNS 名稱的格式為 mount-target-IP-Address file-system-ID.efs.region.amazonaws.com

請參閱此範例命令:

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

6.    使用掛載協助程式掛載 EFS 檔案系統。

注意: 在跨帳戶案例中,您無法使用一般的 NFS 命令,因此需要 botocore 和 Amazon EFS 用戶端。

完成這些步驟後,您就可以掛載 EFS 檔案系統並開始使用。如果您遇到任何錯誤,請參閱疑難排解指南


相關資訊

建立檔案系統政策

AWS 官方
AWS 官方已更新 1 年前