Managed Lustre は、ルート スカッシュ機能を使用して IP ベースのアクセス制御を提供します。
ルート スカッシュは、クライアント VM の root ユーザーがマネージド Lustre ファイル システムで root 権限を持つことを防ぐセキュリティ機能です。ルートユーザーが Managed Lustre ファイル システムにアクセスすると、権限が権限の低いユーザーの権限に「圧縮」されます。
ルート スカッシュは、新しい Managed Lustre インスタンスまたは既存の Managed Lustre インスタンスに対して構成できます。デフォルトのルート スカッシュ設定をすべてのクライアントに適用することも、特定のクライアントにカスタムルールを指定することもできます。
デフォルトでは、マネージド Lustre インスタンスで root スカッシュは構成されていません。
セキュリティの制限事項と推奨事項
クライアント VM で root アクセスを制限する
root アクセスを制限する最善のメカニズムは、そもそもユーザーが root になることを許可しないことです。VM に対する root 権限をユーザーに付与すると、永続的なリスクにさらされる可能性があります。ユーザーがこれらの権限を悪用して新しいユーザー アカウントを作成したり、バックドアをインストールして VM への永続的なアクセスを維持したりする可能性があります。ルートアクセスを制限する方法については、SSH ログイン アクセスを制御する際のベスト プラクティスをご覧ください。
VM でユーザーが root 権限を持つことを防ぐことができない場合は、Managed Lustre の IP ベースのアクセス制御機能を使用して、Managed Lustre インスタンスにアクセスする際の root ユーザー権限を制限できます。ただし、これらのアクセス チェックはベスト エフォートであり、この機能はセキュリティを保証するものではありません。VPC ファイアウォール ルールを主なセキュリティ境界として使用し、信頼できる VM イメージを使用する信頼できるクライアント VM のみがマネージド Lustre インスタンスにネットワーク アクセスできるようにする必要があります。詳細については、Google Cloud セキュリティのベスト プラクティスをご覧ください。
IP 転送を無効にする
デフォルトの Compute Engine 構成では、インスタンスで IP 転送を有効にできます。ユーザーが別の送信元 IP アドレスを偽装してルート スカッシュ ポリシーを回避できないようにするには、constraints/compute.vmCanIpForward 組織ポリシーを使用して IP 転送を無効にする必要があります。手順については、組織のポリシーの作成と管理をご覧ください。
デフォルトのルート スカッシュを構成する
インスタンスに接続するすべてのクライアントにルート スカッシュを適用するには、デフォルトのスカッシュ UID と GID を指定し、スカッシュ モードを ROOT_SQUASH に設定します。UID と GID によく使用される値は 65534 です。これは nobody ユーザーに変換されます。
デフォルトでは、nobody ユーザーは読み取りと実行のアクセス権のみに制限されます。ファイル システムへの書き込みアクセス権を持つのは、root ユーザーと Owner グループのメンバーのみです。
インスタンスを作成
デフォルトの root squash を使用してインスタンスを作成するには:
gcloud
--default-squash-mode、--default-squash-uid、--default-squash-gid の各フラグを使用して、デフォルト値を設定します。
gcloud lustre instances create INSTANCE_NAME \
--project=PROJECT_ID \
--location=LOCATION \
--network=NETWORK_NAME \
--per-unit-storage-throughput=PER_UNIT_STORAGE_THROUGHPUT \
--capacity-gib=CAPACITY \
--filesystem=FS_NAME \
--default-squash-mode=ROOT_SQUASH \
--default-squash-uid=UID \
--default-squash-gid=GID
ここで
--default-squash-modeはROOT_SQUASHです。--default-squash-uidと--default-squash-gidは、root ユーザーの変換先のデフォルト ID を指定します。
インスタンスの作成時に使用できるフィールドの完全なリストと説明については、gcloud lustre instances create リファレンスをご覧ください。
REST
REST API を使用してインスタンスを作成するには、次のエンドポイントにリクエストを送信し、accessRulesOptions オブジェクトを含めます。
POST https://lustre.googleapis.com/v1/projects/PROJECT_ID/locations/ZONE/instances?instanceId=INSTANCE_NAME
Authorization: Bearer AUTH_TOKEN
{
"filesystem": "FS_NAME",
"perUnitStorageThroughput": "PER_UNIT_STORAGE_THROUGHPUT",
"capacityGib": "CAPACITY_GIB",
"network": "NETWORK",
"accessRulesOptions": {
"defaultSquashMode": "SQUASH_MODE",
"defaultSquashUid": UID,
"defaultSquashGid": GID
}
}
ここで
defaultSquashModeはROOT_SQUASHです。defaultSquashUidとdefaultSquashGidは、ルートユーザーの変換先のユーザー ID とグループ ID の値です。
REST API を使用してインスタンスを作成する方法の詳細については、projects.locations.instances.create API リファレンスをご覧ください。
Google Cloud コンソール
ルート スカッシュは、 Google Cloud コンソールを使用して構成できません。
インスタンスを更新
既存のインスタンスを更新してデフォルトのルート スカッシュを使用するには:
gcloud
--default-squash-mode、--default-squash-uid、--default-squash-gid の各フラグを使用して、デフォルト値を設定します。
gcloud lustre instances update INSTANCE_NAME \
--project=PROJECT_ID \
--location=LOCATION \
--default-squash-mode=ROOT_SQUASH \
--default-squash-uid=UID \
--default-squash-gid=GID
ここで
--default-squash-modeはROOT_SQUASHです。--default-squash-uidと--default-squash-gidは、root ユーザーを統合するデフォルトの ID を指定します。
REST
REST API を使用してインスタンスを更新するには、特定のエンドポイントに PATCH リクエストを送信します。updateMask で accessRulesOptions を指定する必要があります。
PATCH https://lustre.googleapis.com/v1/projects/PROJECT_ID/locations/ZONE/instances/INSTANCE_NAME?updateMask=accessRulesOptions
Authorization: Bearer AUTH_TOKEN
{
"accessRulesOptions": {
"defaultSquashMode": "ROOT_SQUASH",
"defaultSquashUid": UID,
"defaultSquashGid": GID
}
}
ここで
defaultSquashModeはROOT_SQUASHです。defaultSquashUidとdefaultSquashGidは、ルートユーザーの変換先のユーザー ID とグループ ID の値です。
インスタンスの更新の詳細については、インスタンスを管理するをご覧ください。
Google Cloud コンソール
ルート スカッシュは、 Google Cloud コンソールを使用して構成できません。
例外を使用してルート スカッシュを構成する
特定の信頼できるクライアントを除くすべてのクライアントにルート スカッシュを適用するには、アクセスルールを指定します。このルールでは、ルートユーザーをスクワッシュするデフォルトの UID と GID を指定します。また、IP アドレスまたはアドレス範囲に基づいて、特定のクライアントをスクワッシュから除外するルールも指定します。
squash UID と GID によく使用される値は 65534 です。これは nobody ユーザーに変換されます。nobody ユーザーにはファイル システムへの書き込みアクセス権がないことに注意してください。読み取り、書き込み、実行のアクセス権を持つのは、ルートユーザーと Owner グループのメンバーのみです。他のユーザーは、読み取りと実行のアクセス権のみに制限されます。
インスタンスの作成
gcloud
インスタンスを作成するには、次の手順に従います。
gcloud lustre instances create INSTANCE_NAME \
--project=PROJECT_ID \
--location=LOCATION \
--network=NETWORK_NAME \
--per-unit-storage-throughput=PER_UNIT_STORAGE_THROUGHPUT \
--capacity-gib=CAPACITY \
--filesystem=FS_NAME \
--default-squash-mode=ROOT_SQUASH \
--default-squash-uid=UID \
--default-squash-gid=GID \
--access-rules=name="ACCESS_RULE_NAME",ipAddressRanges="IP_ADDRESS_OR_CIDR_RANGE",squashMode=NO_SQUASH
ここで
--default-squash-modeはROOT_SQUASHです。--default-squash-uidと--default-squash-gidは、root ユーザーを統合するデフォルトの ID を指定します。--access-rulesは、ルート スカッシュの例外を指定します。次の値を指定する必要があります。nameは、このアクセスルールの名前です。ipAddressRangesは、重複しない 1 つ以上の IP アドレスまたは CIDR 範囲のカンマ区切りリストです。範囲は192.168.0.0/24の形式で指定します。squashModeがNO_SQUASHでなければなりません。
使用可能なフィールドの完全なリストと説明については、Managed Lustre インスタンスを作成するをご覧ください。
REST
REST API を使用してインスタンスを作成するには、次のエンドポイントにリクエストを送信し、accessRulesOptions オブジェクトを含めます。
POST https://lustre.googleapis.com/v1/projects/PROJECT_ID/locations/ZONE/instances?instanceId=INSTANCE_NAME
Authorization: Bearer AUTH_TOKEN
{
"filesystem": "FS_NAME",
"perUnitStorageThroughput": "PER_UNIT_STORAGE_THROUGHPUT",
"capacityGib": "CAPACITY_GIB",
"network": "NETWORK",
"accessRulesOptions": {
"accessRules": [
{
"name": "ACCESS_RULE_NAME",
"ipAddressRanges": [
"IP_ADDRESS_OR_CIDR_RANGE_1",
"IP_ADDRESS_OR_CIDR_RANGE_2"
],
"squashMode": "NO_SQUASH"
}
],
"defaultSquashMode": "SQUASH_MODE",
"defaultSquashUid": UID,
"defaultSquashGid": GID
}
}
特定のアクセスルールを設定する場合は、次のフィールドが必要です。
nameは、このルールのユーザー定義名です。英数字とアンダースコア(_)のみを使用し、16 文字以下にする必要があります。ipAddressRangesは、重複しない 1 つ以上の IP アドレスまたは CIDR 範囲のリストです。範囲は192.168.0.0/24の形式で指定します。squashModeは常にNO_SQUASHです。defaultSquashModeはROOT_SQUASHです。defaultSquashUidとdefaultSquashGidは、特定のアクセスルールに一致しない root ユーザーを変換するユーザー ID 値とグループ ID 値です。
たとえば、特定の IP アドレス範囲と特定の IP アドレスの root ユーザーを除外してデフォルトの root スカッシュを設定する場合、accessRulesOptions オブジェクトは次のようになります。
{
"accessRulesOptions": {
"accessRules": [
{
"name": "dont_squash",
"ipAddressRanges": [
"192.100.1.10",
"192.168.0.0/24"
],
"squashMode": "NO_SQUASH"
}
],
"defaultSquashMode": "ROOT_SQUASH",
"defaultSquashUid": 65534,
"defaultSquashGid": 65534
}
}
REST API を使用してインスタンスを作成する方法については、マネージド Lustre インスタンスを作成するをご覧ください。
Google Cloud コンソール
ルート スカッシュは、 Google Cloud コンソールを使用して構成できません。
インスタンスの更新
gcloud
インスタンスを更新するには:
gcloud lustre instances update INSTANCE_NAME \
--project=PROJECT_ID \
--location=LOCATION \
--default-squash-mode=ROOT_SQUASH \
--default-squash-uid=UID \
--default-squash-gid=GID \
--access-rules=name="ACCESS_RULE_NAME",ipAddressRanges="IP_ADDRESS_OR_CIDR_RANGE",squashMode=NO_SQUASH
ここで
--default-squash-modeはROOT_SQUASHです。--default-squash-uidと--default-squash-gidは、root ユーザーを統合するデフォルトの ID を指定します。--access-rulesは、ルート スカッシュの例外を指定します。次の値を指定する必要があります。nameは、このアクセスルールの名前です。ipAddressRangesは、重複しない 1 つ以上の IP アドレスまたは CIDR 範囲のカンマ区切りリストです。範囲は192.168.0.0/24の形式で指定します。squashModeがNO_SQUASHでなければなりません。
インスタンスの更新の詳細については、インスタンスを管理するをご覧ください。
REST
REST API を使用してインスタンスを更新するには、特定のエンドポイントに PATCH リクエストを送信します。エンドポイント URL の updateMask の値として accessRulesOptions を指定する必要があります。
PATCH https://lustre.googleapis.com/v1/projects/PROJECT_ID/locations/ZONE/instances/INSTANCE_NAME?updateMask=accessRulesOptions
Authorization: Bearer AUTH_TOKEN
{
"accessRulesOptions": {
"accessRules": [
{
"name": "ACCESS_RULE_NAME",
"ipAddressRanges": [
"IP_ADDRESS_OR_CIDR_RANGE_1",
"IP_ADDRESS_OR_CIDR_RANGE_2"
],
"squashMode": "NO_SQUASH"
}
],
"defaultSquashMode": "SQUASH_MODE",
"defaultSquashUid": UID,
"defaultSquashGid": GID
}
}
インスタンスの更新の詳細については、インスタンスを管理するをご覧ください。
Google Cloud コンソール
ルート スカッシュは、 Google Cloud コンソールを使用して構成できません。
インスタンスから root スカッシュを削除する
インスタンスからすべてのルート スカッシュ設定を削除するには、インスタンスを更新してアクセスルールをクリアし、デフォルト モードを NO_SQUASH に設定します。
gcloud
gcloud lustre instances update INSTANCE_NAME \
--project=PROJECT_ID \
--location=LOCATION \
--default-squash-mode=NO_SQUASH \
--clear-access-rules \
--default-squash-uid=0 --default-squash-gid=0
REST
PATCH https://lustre.googleapis.com/v1/projects/PROJECT_ID/locations/ZONE/instances/INSTANCE_NAME?updateMask=accessRulesOptions
Authorization: Bearer AUTH_TOKEN
{
"accessRulesOptions": {
"defaultSquashMode": "NO_SQUASH"
}
}
Google Cloud コンソール
ルート スカッシュは、 Google Cloud コンソールを使用して構成できません。