ネットワークファイルシステム (NFS) レベルのユーザー、グループ、およびアクセス許可
ファイルシステムを作成した後、デフォルトでは、ルートユーザー (UID 0) のみが読み取り/書き込み/実行のアクセス許可を持ちます。他のユーザーがファイルシステムを変更できるようにするには、ルートユーザーは、明示的にアクセス許可を付与する必要があります。アクセスポイントを使用すると、root 以外のユーザーによる書き込み可能なディレクトリの作成を自動化できます。詳細については、「Amazon EFS アクセスポイントの使用」を参照してください。
Amazon EFS ファイルシステムオブジェクトには、Unix 形式のモードが関連付けられています。このモード値は、そのオブジェクトに対してアクションを実行するアクセス許可を定義します。Unix スタイルのシステムに精通しているユーザーは、これらのアクセス許可に関して Amazon EFS がどのように動作するかを簡単に理解できます。
さらに、Unix 形式のシステムでは、ユーザーとグループは Amazon EFS がファイルの所有権を表すために使用する数値 ID にマッピングされます。Amazon EFS では、ファイルシステムオブジェクト (ファイル、ディレクトリなど) は、単一の所有者と単一のグループによって所有されます。Amazon EFS は、ユーザーがファイルシステムオブジェクトにアクセスしようとすると、マッピングされた数値 ID を使用してアクセス許可をチェックします。
注記
NFS プロトコルは 1 ユーザーあたり最大 16 のグループ ID (GID) をサポートし、追加の GID は NFS クライアント要求から切り捨てられます。詳細については、「NFS ファイルシステム上の許可されたファイルへのアクセスが拒否されました」を参照してください。
以下では、アクセス許可の例、および Amazon EFS での NFS のアクセス許可に関する考慮事項について説明します。
トピック
Amazon EFS ファイルシステムのユースケースとアクセス許可の例
Amazon EFS ファイルシステムを作成し、VPC にファイルシステムのターゲットをマウントしたら、リモートファイルシステムを Amazon EC2 インスタンスにローカルにマウントできます。mount
コマンドは、ファイルシステムの任意のディレクトリをマウントできます。ただし、最初にファイルシステムを作成するときは、/
にルートディレクトリは 1 つしかありません。ルートユーザーとルートグループは、マウントされたディレクトリを所有します。
次の mount
コマンドは、ファイルシステムの DNS 名で識別される Amazon EFS ファイルシステムのルートディレクトリを ローカルディレクトリにマウントします。
sudo mount -t nfs -o nfsvers=4.1,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,noresvport
file-system-id
.efs.aws-region.amazonaws.com:/ efs-mount-point
最初のアクセス許可のモードでは、次のことを許可します。
-
所有者の
read-write-execute
ルートに対する アクセス許可 -
グループの
read-execute
ルートに対する アクセス許可 -
他のユーザーに対する
read-execute
アクセス許可
ルートユーザーのみがこのディレクトリを変更できます。たとえば、ルートユーザーは、他のユーザーにこのディレクトリに書き込むアクセス許可を付与することもできます。
-
書き込み可能なユーザーごとのサブディレクトリを作成します。手順については、「チュートリアル: 書き込み可能なユーザーごとのサブディレクトリを作成する」を参照してください。
-
ユーザーが Amazon EFS ファイルシステムルートに書き込むことを許可します。ルート権限を持つユーザーは、他のユーザーにファイルシステムへのアクセスを許可することができます。
-
Amazon EFS ファイルシステムの所有権を非ルートユーザーとグループに変更するには、以下を使用します。
$ sudo chown
user
:group
/EFSroot
-
ファイルシステムのアクセス許可をより制限の低いものに変更するには、以下を使用します。
$ sudo chmod 777 /
EFSroot
このコマンドは、ファイルシステムがマウントされているすべての EC2 インスタンス上のすべてのユーザーに読み取り/書き込み/実行の権限を許可します。
-
ファイルシステム内のファイルとディレクトリに対するユーザー ID およびグループ ID のアクセス許可
Amazon EFS ファイルシステムのファイルとディレクトリでは、ユーザー ID とグループ ID に基づいて標準 UNIX 形式の読み取り、書き込み、実行のアクセス許可がサポートされます。NFS クライアントがアクセスポイントを使用せずに EFS ファイルシステムをマウントした場合は、クライアントから提供されたユーザー ID とグループ ID が信頼されます。EFS アクセスポイントにより、NFS クライアントによって使用されるユーザー ID とグループ ID を上書きできます。ユーザーがファイルとディレクトリにアクセスしようとすると、Amazon EFS はユーザー ID とグループ ID を確認して、ユーザーにオブジェクトへのアクセス権限があることを確認します。Amazon EFS は、これらの ID をユーザーが作成する新しいファイルやディレクトリの所有者およびグループ所有者を示すために使用します。Amazon EFS は、ユーザー名またはグループ名を調べません。数値 ID のみを使用します。
注記
EC2 インスタンスでユーザーを作成すると、任意の数値のユーザー ID (UID) とグループ ID (GID) をユーザーに割り当てることができます。数値のユーザー ID は、Linux システムの /etc/passwd
ファイルに設定されます。数値グループ ID は、/etc/group
ファイルにあります。これらのファイルは、名前と ID の間のマッピングを定義します。EC2 インスタンスの外部では、Amazon EFS は、0 のルート ID を含むこれらの ID の認証を実行しません。
ユーザーが 2 つの異なる EC2 インスタンスから Amazon EFS ファイルシステムにアクセスする場合、これらのインスタンスでユーザーの UID が同じか異なるかによって、次のような異なる動作になります。
-
ユーザー ID が両方の EC2 インスタンスで同じである場合、Amazon EFS は使用された EC2 インスタンスに関係なく、それらが同じユーザーを示すとみなします。ファイルシステムにアクセスする際のユーザーエクスペリエンスは、両方の EC2 インスタンスで同じです。
-
ユーザー ID が両方の EC2 インスタンスで同じでない場合、Amazon EFS はユーザーを異なるユーザーと見なします。2 つの異なる EC2 インスタンスから Amazon EFS ファイルシステムにアクセスする場合には、ユーザーエクスペリエンスは同じではありません。
-
異なる EC2 インスタンスの 2 人の異なるユーザーが ID を共有する場合、Amazon EFS はそれらを同じユーザーとみなします。
EC2 インスタンス間でユーザー ID マッピングを一貫して管理することを検討することもできます。ユーザーは、id
コマンドを使用して数値 ID を確認することができます。
$ id uid=502(joe) gid=502(joe) groups=502(joe)
ID マッパーを無効にする
オペレーティングシステムの NFS ユーティリティには、ユーザー名と ID の間のマッピングを管理する ID マッパーと呼ばれるデーモンが含まれています。Amazon Linux では、デーモンは rpc.idmapd
と呼ばれ、Ubuntu では、idmapd
と呼ばれます。これは、ユーザーおよびグループ ID を名前に変換し、逆も行います。ただし、Amazon EFS は、数値 ID のみを扱います。EC2 インスタンスでこのプロセスを無効にすることをお勧めします。Amazon Linux では、マッパーは通常無効です。この場合、ID マッパーを有効にしないでください。ID マッパーを無効にするには、以下に示すコマンドを使用します。
$ service rpcidmapd status $ sudo service rpcidmapd stop
ルートスカッシュなし
デフォルトでは、ルートスカッシュは EFS ファイルシステムで無効になっています。Amazon EFS は、no_root_squash
を使用する Linux NFS サーバーのように動作します。ユーザーまたはグループ ID が 0 の場合、Amazon EFS はそのユーザーを root
ユーザーとして処理し、アクセス許可チェックをバイパスします (すべてのファイルシステムオブジェクトへのアクセスと変更を許可します)。AWS Identity and Access Management (AWS IAM) の ID ポリシーまたはリソースポリシーが ClientRootAccess
アクションへのアクセスを許可しない場合、ルートスカッシュをクライアント接続で有効にすることができます。ルートスカッシュが有効になっている場合、ルートユーザーは NFS サーバー上で制限されたアクセス許可を持つユーザーに変換されます。
詳細については、「IAM を使用してファイルシステムのデータアクセスを制御する」を参照してください。
NFS クライアントの IAM 認可を使用したルートスカッシュの有効化
Amazon EFS の設定により、1 つの管理ワークステーションを除くすべての AWS プリンシパルを対象に、Amazon EFS ファイルシステムへのルートアクセスを拒否することができます。そのためには、ネットワークファイルシステム (NFS) クライアントの AWS Identity and Access Management (IAM) 認可を設定します。
これを行うには、次に示すように、2 つの IAM アクセス許可ポリシーを設定する必要があります。
-
ファイルシステムへの読み取りおよび書き込みアクセスを明示的に許可し、ルートアクセスを暗黙的に拒否する EFS ファイルシステムポリシーを作成します。
-
Amazon EC2 インスタンスプロファイルを使用して、ファイルシステムへのルートアクセスを必要とする Amazon EC2 管理ワークステーションに IAM ID を割り当てます。Amazon EC2 インスタンスプロファイルの詳細については、AWS Identity and Access Managementユーザーガイドの「インスタンスプロファイルの使用」を参照してください。
-
AmazonElasticFileSystemClientFullAccess
AWS 管理ポリシーを、管理ワークステーションの IAM ロールに割り当てます。EFS の AWS 管理ポリシーの詳細については、「Amazon EFS のためのアイデンティティとアクセス管理」を参照してください。
NFS クライアントの IAM 認可を使用してルートスカッシュを有効にするには、以下の手順を使用します。
ファイルシステムへのルートアクセスを無効にするには
Amazon Elastic File System コンソール (https://console.aws.amazon.com/efs/
) を開きます。 [File Systems (ファイルシステム)] を選択します。
ルートスカッシュを有効にするファイルシステムを選択します。
-
[File System details] ページで、[ファイルシステムポリシー] 、続いて編集を選択します。[File system policy (ファイルシステムポリシー)] ページが表示されます。
-
ポリシーオプションの選択デフォルトで root アクセスを禁止する*を選択します。ポリシー JSON オブジェクトがポリシーエディターに表示されます。
[Save (保存)] を選択して、ファイルシステムポリシーを保存します。
非匿名クライアントは、アイデンティティベースのポリシーを通じてファイルシステムへのルートアクセスを取得できます。AmazonElasticFileSystemClientFullAccess
管理ポリシーをワークステーションのロールにアタッチすると、IAM はその ID ポリシーに基づいてワークステーションへのルートアクセスを許可します。
管理ワークステーションからルートアクセスを有効にするには
IAM コンソール (https://console.aws.amazon.com/iam/
) を開きます。 Amazon EC2 の「
EFS-client-root-access
」というロールを作成します。IAM は、作成した EC2 ロールと同じ名前を使用してインスタンスプロファイルを作成します。作成した EC2 ロールに AWS 管理ポリシー
AmazonElasticFileSystemClientFullAccess
を割り当てます。このポリシーの内容は次のとおりです。{ "Version”: "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "elasticfilesystem:ClientMount", "elasticfilesystem:ClientRootAccess", "elasticfilesystem:ClientWrite", "elasticfilesystem:DescribeMountTargets" ], "Resource": "*" } ] }
以下に説明するように、管理ワークステーションとして使用している EC2 インスタンスにインスタンスプロファイルをアタッチします。詳細については、Linux インスタンス用 Amazon EC2 ユーザーガイドの「IAM ロールをインスタンスにアタッチする」を参照してください。
Amazon EC2 コンソール (https://console.aws.amazon.com/ec2/
) を開きます。 ナビゲーションペインで、[インスタンス] を選択します。
インスタンスを選択します。[Actions (アクション)] で [インスタンスの設定] を選択し、[IAM ロールの割り当て/置換] を選択します。
最初のステップで作成した IAM ロール (
EFS-client-root-access
) を選択してから、[Apply (適用)] を選択します。
管理ワークステーションに EFS マウントヘルパーをインストールします。EFS マウントヘルパーと amazon-efs-utils パッケージの詳細については、「Amazon EFS クライアントの手動インストール」を参照してください。
以下のコマンドと
iam
マウントオプションを使用して、管理ワークステーションに EFS ファイルシステムをマウントします。$
sudo mount -t efs -o tls,iamfile-system-id
:/efs-mount-point
IAM 認可を使用してファイルシステムを自動的にマウントするように Amazon EC2 インスタンスを設定できます。IAM 認可を使用した EFS ファイルシステムのマウントの詳細については、「IAM 認可を使用してマウントする」を参照してください。
アクセス許可のキャッシュ
Amazon EFS は、短期間、ファイルのアクセス許可をキャッシュします。その結果、最近アクセスを取り消されたユーザーが、まだそのオブジェクトに短期間アクセスできることがあります。
ファイルシステムオブジェクトの所有権の変更
Amazon EFS は、POSIX chown_restricted
属性を適用します。これは、ルートユーザーだけがファイルシステムオブジェクトの所有者を変更できることを意味します。ルートユーザーまたは所有者ユーザーは、ファイルシステムオブジェクトの所有者グループを変更できます。ただし、ユーザーがルートでない限り、そのグループは所有者ユーザーがメンバーになっているものにのみ変更できます。
EFS アクセスポイント
アクセスポイントは、アクセスポイントを介したすべてのシステム要求に対して、オペレーティングシステムのユーザー、グループ、およびファイルシステムのパスを適用します。アクセスポイントのオペレーティングシステムのユーザーおよびグループは、NFS クライアントから提供されるすべての ID 情報を上書きします。ファイルシステムのパスは、アクセスポイントのルートディレクトリとしてクライアントに公開されます。このアプローチにより、各アプリケーションは共有ファイルベースのデータセットにアクセスするときに、常に正しいオペレーティングシステム ID と正しいディレクトリを使用できます。アクセスポイントを使用するアプリケーションは、それ自体のディレクトリ以下のデータにのみアクセスできます。アクセスポイントの詳細については、「Amazon EFS アクセスポイントの使用」を参照してください。