如何使用系統政策來控制 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 位址。

先決條件:

  • 將 NFS 用戶端和 EFS 檔案系統的 VPC 與 VPC 對等互連或 VPC Transit Gateway 相連接。此連接可讓來自相同或不同帳戶的 Amazon Elastic Compute Cloud (Amazon EC2) 執行個體存取不同 VPC 中的 EFS 檔案系統。
  • 在 Amazon EFS 和 NFS 用戶端資源上授予 IAM 角色主控台或讀取權限。
  • 在 NFS 用戶端中安裝 Amazon EFS 用戶端botocore 套件。
    **注意:**在跨帳戶案例中,您無法執行一般的 NFS 命令,因此需要 botocore 套件和 Amazon EFS 用戶端。

解決方法

**注意:**如果您在執行 AWS Command Line Interface (AWS CLI) 命令時收到錯誤,請參閱排解 AWS CLI 錯誤。此外,請確定您使用的是最新的 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-Instance-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-File-System-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 位址。

將主機項目新增至 /etc/hosts 檔案,並掛載 EFS 檔案系統

完成下列步驟:

  1. 執行下列命令,將主機項目新增至 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 檔案系統

如果您在安裝檔案系統時遇到問題,請參閱疑難掛載問題疑難排解

相關資訊

建立檔案系統政策

AWS 官方
AWS 官方已更新 9 個月前