システムポリシーを使用して EFS ファイルシステムへのアクセスを制御するにはどうすればよいですか?

所要時間2分
0

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

簡単な説明

Amazon EFS ファイルシステムは、Amazon EFS マウントヘルパーで NFS クライアントの IAM 認証と 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. Amazon EFS クライアントbotocore パッケージが NFS クライアントにインストールされている。

解決方法

注意: AWS コマンドラインインターフェイス (AWS CLI) コマンドの実行時にエラーが発生する場合は、AWS CLI の最新バージョンを使用していることを確認してください

この例では、アカウント A に EFS ファイルシステムがあり、アカウント B に NFS クライアントがあります。    

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 コンソールにログインし、[Instances] (インスタンス) を選択します。[EC2-Instance-ID] を選択してから、[Networking] (ネットワーキング) を選択します。[Networking details] (ネットワーキングの詳細) にアベイラビリティーゾーンが表示されます。

-または-

  • 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 コンソールにログインして、[File Systems] (ファイルシステム) を選択します。[EFS-File-System-ID] を選択してから、[Network] (ネットワーク) にあるアベイラビリティーゾーンの 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 ファイルに 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 ファイルシステムをマウントしてシステムの使用を開始できます。エラーが発生した場合は、トラブルシューティングガイドを参照してください。


関連情報

Creating file system policies (ファイルシステムポリシーの作成)

AWS公式
AWS公式更新しました 1年前
コメントはありません

関連するコンテンツ