このページでは、Filestore インスタンスへのアクセスを制御する方法について説明します。
Filestore では、Filestore インスタンスへのアクセス保護に Kerberos がサポートされません。Linux オプションで NFS アクセスを制御し、IAM(Identity and Access Management) でインスタンスの作成、編集、表示、削除などのインスタンス操作へのアクセスを制御することができます。
ファイル共有のエクスポート設定
Filestore のファイル共有には、次のデフォルトの /etc/exports
設定が割り当てられます。
- クライアント リストは、Filestore インスタンスに選択した VPC ネットワーク内のすべての内部 IP アドレスで構成され、ファイル共有への接続が許可されるクライアントを識別します。内部 IP アドレスは、サブネット範囲に含まれる任意の範囲を指定できます。ただし、クライアントがRFC 1918以外のサブネット範囲を使用する場合は、IP ベースのアクセス制御を使用して Filestore インスタンスへのアクセス権を明示的に付与する必要があります。
rw
オプションが使用されるため、ファイル共有は読み書き可能です。- ユーザー ID マッピング オプション
no_root_squash
が使用されるため、Filestore インスタンスとクライアントの双方で、root ユーザーを含むすべてのユーザーとグループが同じであると想定されます。 - 他のすべてのオプションでは、
/etc/exports
のデフォルトが使用されます。
IP ベースのアクセス制御
これらのエクスポート設定を変更するには、Google Cloud コンソールを使用してアクセス制御ルールを作成するか、インスタンスの作成時に gcloud CLI を使用して JSON 構成ファイルを指定します。詳細については、IP ベースのアクセス制御を構成するをご覧ください。
また、インスタンスを作成した後に、新しいアクセス制御ルールの追加や、既存のアクセス制御ルールの変更を行えます。詳細については、インスタンスの編集をご覧ください。
ファイル共有の権限
Filestore インスタンスを作成する場合、そのインスタンスのファイル共有には rwxr-xr-x
のデフォルトの POSIX ファイル権限が設定されます。これらの権限は、Filestore インスタンス上で、接続クライアントの root ユーザーのみにファイル共有への読み取り / 書き込みアクセス権が付与されることを意味します。その他のユーザーにはデフォルトで読み取りアクセスのみが付与されます。クライアントの root ユーザーは権限やオーナーを変更できます。
ファイル共有のアクセス権限を構成する
ファイル共有をマウントする際は、マウント オプションと /etc/fstab
設定を使用して、ファイル共有が書き込み可能であるかどうか、また、ファイルに対して実行可能かどうか確認できます。ファイル共有のマウント後に、chmod
や setfacl
などの標準の Linux コマンドを使用して、ファイルおよびファイル共有のアクセス権限を設定できます。ベーシック ティアのみが setfacl
をサポートします。
一貫性のあるアクセス権限を設定する
権限昇格を防ぐため、同じ Filestore インスタンスに接続するすべてのクライアントの各ユーザーには、一貫性のあるアクセス権限を設定することを強くおすすめします。ファイル共有が複数のクライアントにマウントされ、ユーザーが 1 つのクライアントに複数のルート権限を持ち、他にない場合、次の権限昇格のシナリオが考えられます。
- ユーザーは、ルートアクセス権を持つクライアントから実行可能ファイルに
setuid
属性を設定します。 - 次にユーザーは、実行可能ファイルをファイル共有にアップロードします。
- ユーザーは、少なくとも読み取り権限を持っているクライアントで、アップロードされたファイルを root として実行します。
setuid
ビットを使用すると、ファイルのオーナー権限(この場合は root)を使用してファイルを実行できるため、このシナリオが可能です。
IAM のロールと権限
ユーザーに Identity and Access Management(IAM)のロールを付与することで、Filestore オペレーションへのアクセス権を付与します。
IAM の権限は、Filestore インスタンスの作成など、Filestore オペレーションへのアクセス権のみを制御します。読み取りや実行など、ファイル共有でのオペレーションを制御するには、POSIX ファイル権限を使用します。
Filestore の役割を使用する
ユーザーに Filestore 権限を付与するには、Filestore 編集者(roles/file.editor)ロールと Filestore 閲覧者(roles/file.viewer)ロールを使用します。これには、必要に応じて基本の役割を使用することもできます。
次の表を参照して、基本のロールに関連付けられる Filestore のアクセス権限を確認してください。
権限 | 操作 | Filestore 編集者 | Filestore 閲覧者 |
file.locations.get | このサービスでサポートされる場所に関する情報を取得します。 | ✓ | ✓ |
file.locations.list | このサービスでサポートされる場所に関する情報をリストします。 | ✓ | ✓ |
file.instances.create | Filestore インスタンスを作成します。 | ✓ | |
file.instances.update | Filestore インスタンスを更新します。 | ✓ | |
file.instances.delete | Filestore インスタンスを削除します。 | ✓ | |
file.instances.get | 特定の Filestore インスタンスの詳細を取得します。 | ✓ | ✓ |
file.instances.list | プロジェクト内の Filestore インスタンスをリストします。 | ✓ | ✓ |
file.instances.revert | プロジェクト内の Filestore インスタンスをスナップショットの状態に戻します。 | ✓ | |
file.operations.get | Filestore インスタンスのオペレーションのステータスを取得します。 | ✓ | ✓ |
file.operations.list | Filestore インスタンスのオペレーションをリストします。 | ✓ | ✓ |
file.operations.cancel | Filestore インスタンスのオペレーションをキャンセルします。 | ✓ | |
file.operations.delete | Filestore インスタンスのオペレーションを削除します。 | ✓ | |
file.backups.create | Filestore のバックアップを作成する。 | ✓ | |
file.backups.update | Filestore のバックアップを更新します。 | ✓ | |
file.backups.delete | Filestore のバックアップを削除します。 | ✓ | |
file.backups.get | 特定の Filestore バックアップの詳細を取得します。 | ✓ | ✓ |
file.backups.list | プロジェクト内の Filestore インスタンスを一覧表示します。 | ✓ | ✓ |
file.snapshots.create | Filestore スナップショットを作成します。 | ✓ | |
file.snapshots.update | Filestore スナップショットを更新します。 | ✓ | |
file.snapshots.delete | Filestore スナップショットを削除します。 | ✓ | |
file.snapshots.get | 特定の Filestore スナップショットの詳細を取得します。 | ✓ | ✓ |
file.snapshots.list | プロジェクト内の Filestore スナップショットのリストを取得します。 | ✓ | ✓ |
基本のロールの使用
Filestore の権限は、オーナー、編集者、閲覧者という IAM の基本のロールにも関連付けられます。Filestore のロールをユーザーに付与するには、これらのロールを Filestore のロールに加えて使用できます。
次の表を参照して、基本のロールに関連付けられる Filestore の権限を確認してください。
権限 | 操作 | プロジェクト オーナー | プロジェクト編集者 | プロジェクト閲覧者 |
file.locations.get | このサービスでサポートされる場所に関する情報を取得します。 | ✓ | ✓ | ✓ |
file.locations.list | このサービスでサポートされる場所に関する情報をリストします。 | ✓ | ✓ | ✓ |
file.instances.create | Filestore インスタンスを作成します。 | ✓ | ✓ | |
file.instances.update | Filestore インスタンスを更新します。 | ✓ | ✓ | |
file.instances.delete | Filestore インスタンスを削除します。 | ✓ | ✓ | |
file.instances.get | 特定の Filestore インスタンスの詳細を取得します。 | ✓ | ✓ | ✓ |
file.instances.list | プロジェクト内の Filestore インスタンスをリストします。 | ✓ | ✓ | ✓ |
file.instances.revert | プロジェクト内の Filestore インスタンスをスナップショットの状態に戻します。 | ✓ | ✓ | |
file.operations.get | Filestore インスタンスのオペレーションのステータスを取得します。 | ✓ | ✓ | ✓ |
file.operations.list | Filestore インスタンスのオペレーションをリストします。 | ✓ | ✓ | ✓ |
file.operations.cancel | Filestore インスタンスのオペレーションをキャンセルします。 | ✓ | ✓ | |
file.operations.delete | Filestore インスタンスのオペレーションを削除します。 | ✓ | ✓ | |
file.backups.create | Filestore のバックアップを作成する。 | ✓ | ✓ | |
file.backups.update | Filestore のバックアップを更新します。 | ✓ | ✓ | |
file.backups.delete | Filestore のバックアップを削除します。 | ✓ | ✓ | |
file.backups.get | 特定の Filestore バックアップの詳細を取得します。 | ✓ | ✓ | ✓ |
file.backups.list | プロジェクト内の Filestore インスタンスを一覧表示します。 | ✓ | ✓ | ✓ |
file.snapshots.create | Filestore スナップショットを作成します。 | ✓ | ✓ | |
file.snapshots.update | Filestore スナップショットを更新します。 | ✓ | ✓ | |
file.snapshots.delete | Filestore スナップショットを削除します。 | ✓ | ✓ | |
file.snapshots.get | 特定の Filestore スナップショットの詳細を取得します。 | ✓ | ✓ | ✓ |
file.snapshots.list | プロジェクト内の Filestore スナップショットのリストを取得します。 | ✓ | ✓ | ✓ |
カスタムの役割
事前定義された IAM ロールがニーズに合わない場合は、IAM のカスタムロールを使用して、指定した権限を含むカスタムロールを定義できます。Filestore のカスタムロールを作成する際は、ロールにプロジェクトのリソースをクエリする権限を含めるため、必ず resourcemanager.projects.get
と resourcemanager.projects.list
の両方を含めてください。