IAM 認証と EFS アクセスポイントを使用して、アカウントをまたいで EFS ファイルシステムにアクセスする方法を教えてください。

最終更新日: 2020 年 2 月 12 日

ファイルを共有できるように、アカウントをまたいで Amazon Elastic File System (Amazon EFS) ファイルシステムにアクセスしたいと考えています。NFS クライアントの AWS Identity and Access Management (IAM) 認証EFS アクセスポイントを使用してこれを行うにはどうすればよいですか?

簡単な説明

Amazon EFS ファイルシステムをマウントするには、Amazon EFS マウントヘルパーで NFS クライアントの IAM 認証および EFS アクセスポイントを使用します。デフォルトでは、マウントヘルパーは DNS を使用してマウントターゲットの IP アドレスを解決するため、別のアカウントまたは VPC からマウントする場合は、EFS マウントターゲット IP を手動で解決する必要があります。

前提条件

NFS クライアントの Amazon Virtual Private Cloud (Amazon VPC) と Amazon EFS ファイルシステムの VPC は、VPC ピアリング接続または VPC Transit Gateway を使用して接続する必要があります。VPC ピアリング接続または転送ゲートウェイを使用して VPC に接続すると、同じアカウントまたは異なるアカウントの Amazon Elastic Compute Cloud (Amazon EC2) インスタンスから、異なる VPC 内の Amazon EFS ファイルシステムにアクセスできます。

解決方法

クライアントに使用する正しいマウントターゲット IP を決定し、その IP を使用して Amazon EFS ファイルシステムをマウントするようにクライアントを設定します。

1.    EFS マウントターゲット IP を確認します。

高可用性を確保するために、NFS クライアントと同じアベイラビリティーゾーンのマウントターゲット IP アドレスを常に使用することがベストプラクティスです。アベイラビリティーゾーン名のマッピングは、アカウントごとに異なる場合があります。別のアカウントに Amazon EFS ファイルシステムをマウントする場合は、DescribeAvailabilityZonesDescribe MountTargets の両方を呼び出して、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"
        }
    ]
}

前述の出力例では、IP 10.0.2.153のマウントターゲットがある AZ ID は use2-as2 です。

2.    マウントターゲット IP のホストエントリを追加します。

クライアントの /etc/hosts ファイルに、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

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/

この記事はお役に立ちましたか?

改善できることはありますか?


さらにサポートが必要な場合