[アップデート] Amazon EFSでIAM認証とアクセスポイントの設定が可能に

2020.01.14

こんにちは、森です。

Amazon EFSで2つの新しい機能が導入されました。

  • NFSクライアントのIAM認証と承認
    • クライアントを識別し、IAMポリシーを使用してクライアント固有のアクセス許可を管理
  • EFSアクセスポイント
    • オペレーティングシステムのユーザーとグループの使用を強制し、オプションでファイルシステム内のディレクトリへのアクセスを制限

New for Amazon EFS – IAM Authorization and Access Points

試してみる

NFSクライアントのIAM認証と承認

IAMユーザー、グループ、またはロールで使用されるポリシーなどのIDベースのポリシーは、デフォルトのアクセス許可をオーバーライドできます

マネージメントコンソールからEFSファイルシステムを作成します。

ステップ3のクライアントアクセスを設定

  • デフォルトでルートアクセスを無効にする
  • デフォルトで読み取り専用アクセスを強制する

にチェックを入れ、ポリシーを保存します。 上記の状態のポリシーは以下の内容になります。

{
    "Version": "2012-10-17",
    "Id": "efs-policy-wizard-67fe6bdb-916a-4c47-9435-ca4267f1b705",
    "Statement": [
        {
            "Sid": "efs-statement-644737fc-aa90-407a-aa85-96d3bbf82408",
            "Effect": "Allow",
            "Principal": {
                "AWS": "*"
            },
            "Action": "elasticfilesystem:ClientMount",
            "Resource": "arn:aws:elasticfilesystem:ap-northeast-1:[MyAccount]:file-system/fs-0bacf32a"
        }
    ]
}

elasticfilesystem:ClientMountのみ許可されていることがわかります。

IAMポリシーでは以下のアクションを管理することができます。

  • ClientMount 読み取り専用アクセスでファイルシステムをマウントする許可を与える
  • ClientWrite ファイルシステムに書き込めるようにする
  • ClientRootAccess ルートとしてファイルにアクセスする

では、作成したEFSをEC2(Linux)にマウントしてみます。

IAM認証、転送中の暗号化、またはその両方を使用してクライアントに接続するには、efs-utilsが必要なので、インストールされていない環境であればインストールします。

※ 2020/01/14時には最新のyumパッケージがなかったので、以下の手順でソースからビルドします

$ git clone https://github.com/aws/efs-utils
$ cd efs-utils
$ sudo yum -y install rpm-build
$ make rpm
$ sudo yum -y install build/amazon-efs-utils*rpm

セキュリティグループの設定も必要ですので、セキュリティを参照に設定しておきます。

SSHでEC2にログインし、mountコマンドを利用してEFSファイルシステムをマウントしてみましょう。

$ sudo mkdir /mnt/shared
$ sudo mount -t efs -o tls [作成したEFSのID] /mnt/shared
$ ls -la /mnt/shared

マウント完了後、ファイルを保存してみます。

$ sudo touch /mnt/shared/hoge.txt
touch: `/mnt/shared/hoge.txt' に touch できません: Read-only file system

現状では、デフォルトで読み取り専用アクセスを強制する 設定を入れていたので、ファイルの作成はできません。

この操作ができるようにIAMポリシーを作成し、EC2のIAMロールに紐づけます。

IAMポリシー

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "elasticfilesystem:ClientMount",
                "elasticfilesystem:ClientWrite",
                "elasticfilesystem:ClientRootAccess"
            ],
            "Resource": "arn:aws:elasticfilesystem:ap-northeast-1:[MyAccount]:file-system/fs-0bacf32a"
        }
    ]
}

IAM認証を使用して、mountコマンドにオプションを追加します(tlsIAM認証が機能するために必要です)

sudo mount -t efs -o tls,iam fs-e7a9f6c6 /mnt/shared

このマウントオプションを使用すると、EC2インスタンスプロファイルのIAMロールが、ルートアクセスを含むそのロールにアタッチされたアクセス許可とともに接続に使用されます。

$ sudo touch /mnt/shared/hoge.txt
$ ls -la /mnt/shared/hoge.txt
-rw-r--r-- 1 root root 0  1月 14 05:31 /mnt/shared/hoge.txt

ファイルの書き込みができました!

EFSアクセスポイント

NFS環境へのアプリケーションアクセスを簡単に管理でき、ファイルシステムへのアクセス時に使用するPOSIXユーザーとグループを指定し、ファイルシステム内のディレクトリへのアクセスを制限できます。

EFSコンソールで、ファイルシステム用に2つのアクセスポイントを作成してみます。

/alice にはすべてのユーザーに読み取りおよび実行アクセス権を与え、/bobにはオーナー以外は読み取り専用のアクセス権を与えてみました。

/aliceアクセスポイントをマウントしてみます。

$ sudo mount -t efs -o tls,accesspoint=[aliceのアクセスポイントID] [ファイルシステムID] /mnt/shared
$ sudo touch /mnt/shared/datafile
$ ls -la /mnt/shared
-rw-r--r-- 1 1001 1001    0  1月 14 06:15 datafile

アクセスポイントのユーザーとグループIDを自動的に使用していることがわかります。

アクセスポイントを使用せずにマウントしてみます。

$ sudo mount -t efs -o tls fs-e7a9f6c6 /mnt/shared
$ ls -la /mnt/shared/
alice/    bob/      hoge.txt 
$ ls -la /mnt/shared/alice/
-rw-r--r-- 1 1001 1001    0  1月 14 06:15 datafile

ファイルは/aliceディレクトリに保存されていることがわかります。 アクセスポイントを使用してマウントすると、他のディレクトリにはアクセスできません。

/bobアクセスポイントをマウントしてみます。

$ sudo mount -t efs -o tls,accesspoint=[bobのアクセスポイントID] [ファイルシステムID] /mnt/shared
$ sudo touch /mnt/shared/datafile
touch: `/mnt/shared/datafile' に touch できません: Permission denied

所有者以外は書き込みできませんね。

アクセスポイントですが、IAM認証と併用して特定のアクセスポイントのみ利用できるようにIAMロールを制限することも可能です。 以下のようにConditionを追加します。

"Condition": {
    "StringEquals": {
        "elasticfilesystem:AccessPointArn" : "arn:aws:elasticfilesystem:us-east-2:[MyAccountID]:access-point/[許可するアクセスポイントのID]"
    }
}

最後に

今回のアップデートにより別のAWSアカウント・特定のIAMロールにアクセス許可を付与するなど、より高度なポリシーを作成することができるようになり、ファイルシステム内のディレクトリへのアクセスを制限(読み取り専用アプリケーションや他のAWSアカウントとの共有など)できるようになりました。

比較的容易にできるようになっているので、データ共有やデータ構成を決定するときに役に立つのではないでしょうか。

ではでは。

参考