IAM および EFS アクセスポイントを使用して、特定の EC2 インスタンスにディレクトリアクセスを許可するにはどうすればよいですか?

所要時間4分
0

AWS Identity and Access Management (IAM) と Amazon Elastic File System (Amazon EFS) を使用して、特定の Amazon Elastic Compute Cloud Amazon (Amazon EC2) インスタンスにディレクトリアクセスを許可したいと考えています。

簡単な説明

異なるインスタンスに同じファイルシステムを使用し、Amazon EFS アクセスポイントを使用して特定のディレクトリへのアクセスを許可します。アクセスポイントと IAM を使用してディレクトリへのアクセスを制御するには、次を実行します。

1.    ファイルシステム用の Amazon EFS アクセスポイントを作成します。

2.    各インスタンスの IAM ポリシーを作成するための ClientMount 許可と ClientWrite 許可を付与します。その後、ポリシーのロールを作成します。

3.    ファイルシステム用の Amazon EFS ポリシーを作成します。

4.    設定をテストします。

解決方法

要件

1.    ファイルシステムに使用する同じ VPC に 2 つの Amazon EC2 インスタンスが必要です。または、インスタンスがファイルシステムに到達できることを確認する必要があります。最新の Amazon Linux 2 AMI を使用するのがベストプラクティスです。インスタンスにアタッチされたセキュリティグループは、ポート 2049 で Amazon EFS へのアウトバウンドアクセスを許可する必要があります。

2.    ファイルシステムをマウントする前に、Amazon EC2 セキュリティグループからのインバウンド NFS アクセスを許可するルールをマウントターゲットセキュリティグループに追加します。詳細については、「Using VPC security groups for Amazon EC2 instances and mount targets」(Amazon EC2 インスタンスとマウントターゲットの VPC セキュリティグループの使用) を参照してください。
注: マウントオプションとしてファイルシステムの DNS 名を使用するのがベストプラクティスです。ファイルシステムの DNS 名は、接続している EC2 インスタンスのアベイラビリティーゾーンにあるマウントターゲットの IP アドレスに自動的に解決されます。コンソールからファイルシステムの DNS 名を取得します。または、ファイルシステム ID が判明している場合は、次の例を使用してファイルシステム DNS 名を作成します。

file-system-id.efs.aws-region.amazonaws.com

3.    EFS FQDN またはショートネームにマウントするクライアントシステムからの接続をテストするには、次のいずれかを実行する必要があります。

  • テルネット

2049 を実行します。

  • amazon-efs-utils が必要ない場合は、EFS FQDN を使用して EFS を NFS タイプとしてマウントします。

次のコマンドは、ファイルシステムを両方の EC2 インスタンスにマウントします。

sudo mount -t nfs4 -o nfsvers=4.1,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,noresvport file-system-id.efs.ap-southeast-2.amazonaws.com:/ /efs

注: サンプルファイルシステムを、使用しているファイルシステムに置き換えます。

マウントしてテストする場合は、マウント後、ファイルシステムとすべての EC2 インスタンスで umount コマンドを実行します。umount を実行しない場合、後で EFS ポリシーを適用するときに誤った操作を実行すると I/O エラーが発生します。

sudo umount /efs

4.    Amazon EFS でアクセスポイントと IAM ポリシーを使用するには、amazon-efs-utils ツールが必要です。amazon-efs-utils をインストールするには、次のコマンドを実行します。

sudo yum install -y amazon-efs-utils

Amazon Linux 2 以外のディストリビューションを実行していて、amazon-efs-utils のインストール手順が必要な場合は、「Using the amazon-efs-utils tools」(amazon-efs-utils ツールの使用) を参照してください。また、GitHub などのサードパーティーのソースコードを確認します。

Amazon EFS アクセスポイントを作成する

重要: この解決方法では、アクセスポイントまたは IAM ポリシーを使用せずに Amazon EFS を既に作成していることを前提としています。ファイルシステムにアタッチされたセキュリティグループが、使用中の EC2 インスタンスのポート 2049 でのインバウンドアクセスを許可していることを確認します。

注: サンプル名 (APP_team と DB_team) は実際のリソース名に置き換えてください。

1.    Amazon EFS コンソールを開きます。

2.    [File systems] (ファイルシステム) を選択し、アクセスを管理するファイルシステムを選択して、[View details] (詳細の表示) を選択します。

3.    [Access points] (アクセスポイント) を選択し、[Create access point] (アクセスポイントの作成) を選択します。

4.    [Name] (名前) および [Root directory path] (ルートディレクトリパス) を入力して、最初のアクセスポイントを作成します。例:

名前: App_team_AP

ルートディレクトリパス: /App_team

注: Amazon EFS は、そのディレクトリに OwnUid、OwnGID、および許可が指定されている場合にのみ、アクセスポイントのルートディレクトリを作成します。この情報を提供しない場合、Amazon EFS はルートディレクトリを作成しません。ルートディレクトリが存在しない場合、アクセスポイントを使用してマウントしようとすると、「'b'mount.nfs4: access denied by server while mounting 127.0.0.1:/」('b'mount.nfs4: 127.0.0.1:/ のマウント中にサーバーによってアクセスが拒否されました) などのエラーメッセージが表示されて失敗します。

アクセスポイントのルートディレクトリの所有権と許可を指定しない場合、Amazon EFS はルートディレクトリを作成しません。アクセスポイントをマウントしようとすると失敗し、「access denied」(アクセス拒否) というエラーが表示されます。詳細については、「Enforce root directory access point in EFS」(EFS でルートディレクトリアクセスポイントを強制する) を参照してください。

5.    [Create access point] (アクセスポイントを作成) を選択します。

6.    ステップ 2~4 を繰り返して、2 つ目のアクセスポイントを作成します。例:

名前: DB_team_AP

ルートディレクトリパス: /DB_team

7.    [Create access point] (アクセスポイントを作成) を選択します。

8.    アクセスポイント ID を書き留めます。アクセスポイント ID は、次のようなものです。

アクセスポイント ID: fsap-0093c87d798ae5ccb

注: アクセスポイントを使用して、アクセスポイントを介して行われたすべてのファイルシステムリクエストに対して POSIX ID (ユーザー ID、グループ ID) を強制することもできます。この機能をアクティブ化するには、アクセスポイントの作成時にユーザーおよびグループ ID を指定します。詳細については、「アクセスポイントを使用したユーザー ID の適用」を参照してください。

インスタンスの IAM ポリシーとロールを作成する

1.    IAM コンソールを開きます。

2.    インスタンスごとに IAM ポリシーを作成します。次のポリシーは、ClientMount および ClientWrite の許可を付与します。これらのポリシーは参照として使用できます。まず、これらの例の [Resource] (リソース) に示されている値を、リソースの ARN に置き換えます。その後、ファイルシステム ID とアクセスポイント ID を正しい値に置き換えます。例:

App_team_policy

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "elasticfilesystem:ClientMount",
        "elasticfilesystem:ClientWrite"
      ],
      "Resource": "arn:aws:elasticfilesystem:ap-southeast-2:123456789012:file-system/fs-8ce001b4",
      "Condition": {
        "ForAnyValue:StringEquals": {
          "elasticfilesystem:AccessPointArn": "arn:aws:elasticfilesystem:ap-southeast-2:123456789012:access-point/fsap-0093c87d798ae5ccb"
        }
      }
    }
  ]
}

DB_team_policy

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "elasticfilesystem:ClientMount",
        "elasticfilesystem:ClientWrite"
      ],
      "Resource": "arn:aws:elasticfilesystem:ap-southeast-2:123456789012:file-system/fs-8ce001b4",
      "Condition": {
        "ForAnyValue:StringEquals": {
          "elasticfilesystem:AccessPointArn": "arn:aws:elasticfilesystem:ap-southeast-2:123456789012:access-point/fsap-054969ebbe52a6121"
        }
      }
    }
  ]
}

3.    [Roles] (ロール) を選択し、[Create role] (ロールの作成) を選択します。

4.    ユースケースとして [EC2] を選択し、[Next: Permissions] (次へ: 許可) を選択します。

5.    作成したポリシーの 1 つを選択し、[Next: Tags] (次へ: タグ) を選択します。

6.    [Next: Review] を選択します。

7.    [Role name] (ロール名) を入力して、[Create role] (ロールの作成) を選択します。例:

ロール名: App_team_role

ポリシー: App_team_policy

8.    2 番目のポリシーについて、ステップ 3~7 を繰り返します。例:

ロール名: DB_team_role

ポリシー: DB_team_policy

EFS ポリシーを作成する

1.    Amazon EFS コンソールを開きます。

2.    [File systems] (ファイルシステム) を選択し、ファイルシステムを選択してから、 [View Details] (詳細の表示) を選択します。

3.    [File system policy] (ファイルシステムポリシー) を選択し、[Policy] (ポリシー) セクションの [Edit] (編集) を選択します。

4.    作成したアクセスポイントに対して ClientMountClientWrite を許可するには、次のポリシーを追加します。リソースの ARN で [Resource] (リソース) を更新し、ファイルシステム ID とアクセスポイント ID を正しい値に置き換えてください。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "*"
      },
      "Action": [
        "elasticfilesystem:ClientMount",
        "elasticfilesystem:ClientWrite"
      ],
      "Resource": "arn:aws:elasticfilesystem:ap-southeast-2:123456789012:file-system/fs-8ce001b4",
      "Condition": {
        "StringEquals": {
          "aws:PrincipalArn": "arn:aws:iam::123456789012:role/DBA_team_role",
          "elasticfilesystem:AccessPointArn": "arn:aws:elasticfilesystem:ap-southeast-2:123456789012:access-point/fsap-054969ebbe52a6121"
        }
      }
    },
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "*"
      },
      "Action": [
        "elasticfilesystem:ClientMount",
        "elasticfilesystem:ClientWrite"
      ],
      "Resource": "arn:aws:elasticfilesystem:ap-southeast-2:123456789012:file-system/fs-8ce001b4",
      "Condition": {
        "StringEquals": {
          "aws:PrincipalArn": "arn:aws:iam::123456789012:role/App_team_role",
          "elasticfilesystem:AccessPointArn": "arn:aws:elasticfilesystem:ap-southeast-2:123456789012:access-point/fsap-0093c87d798ae5ccb"
        }
      }
    }
  ]
}

5.    [Save] (保存) を選択します。ファイルシステムを使用する準備ができました。

設定をテストする

1.    Amazon EC2 インスタンスにいかなる IAM ロールもアタッチせずに、Amazon EC2 インスタンス (この例では DB_team インスタンス) にアクセスします。

2.    mount コマンドを NFS タイプとして使用して、ファイルシステムのマウントを試行します。ファイルシステムレベルのリソースベースのアクセスポリシーを使用している場合は、次のようなエラーメッセージが表示されます。

sudo mount -t nfs4 -o nfsvers=4.1,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,noresvport fs-8ce001b4.efs.ap-southeast-2.amazonaws.com:/ /efs
        
mount.nfs4: access denied by server while mounting fs-8ce001b4.efs.ap-southeast-2.amazonaws.com:/

3.    Amazon EC2 コンソールを使用して、この Amazon EC2 インスタンス用に作成したロール (この例では DB_team_role) を DB_team Amazon EC2 インスタンスに割り当てます。詳細については、「既存の IAM ロールを EC2 インスタンスに割り当てるにはどうすればよいですか?」を参照してください。 ロールを Amazon EC2 インスタンスにプロファイルロールとして割り当てることができない場合は、アクセスポイントと一緒に、マウントオプションとして名前付きプロファイルを使用して IAM をマウントできます。例:

sudo mount -t efs -o tls,iam,awsprofile=namedprofile,accesspoint=fsap- file-system-id efs-mount-point/

4.    mount コマンドを実行して、作成した 2 番目のアクセスポイント (この例ではDB_team_AP) を使用してファイルシステムをマウントします。ファイルシステムが正常にマウントされると、インスタンスロールは許可を付与します。

sudo mount -t efs -o tls,accesspoint=fsap-054969ebbe52a6121,iam fs-8ce001b4:/ /efs

5.    umount コマンドを実行して、ファイルシステムをアンマウントします。

sudo umount /efs

6.    DB_team_role の割り当て先と同じ Amazon EC2 インスタンスから作成した最初のアクセスポイント (App_team_AP など) を使用してファイルシステムをマウントします。想定どおり、EFS アクセスポリシーと IAM ロール呼び出しが原因で、マウントオペレーションが拒否されました。

sudo mount -t efs -o tls,accesspoint=fsap-0093c87d798ae5ccb,iam fs-8ce001b4:/ /efs 

mount.nfs4: access denied by server while mounting 127.0.0.1:/

7.    App_team インスタンスに SSH 接続し、前述のステップを実行します。App_team_role を使用している間は、DB_team_AP を使用してファイルシステムをマウントすることはできません。

ファイルシステムでマウントが許可されるようになったのは、関係する EC2 インスタンスが必要な IAM ロールを使用している場合のみです。

sudo mount -t efs -o tls,accesspoint=fsap-0093c87d798ae5ccb,iam fs-8ce001b4:/ /efs

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

関連するコンテンツ