IP ベースのアクセス制御

Managed Lustre は、ルート スカッシュ機能を使用して IP ベースのアクセス制御を提供します。

ルート スカッシュは、クライアント VM の root ユーザーが Managed Lustre ファイル システムで root 権限を持つことを防ぐセキュリティ機能です。root ユーザーが Managed Lustre ファイル システムにアクセスすると、権限がより権限の少ないユーザーの権限に「スカッシュ」されます。

ルート スカッシュは、新しい Managed Lustre インスタンスまたは既存のインスタンスに対して構成できます。デフォルトのルート スカッシュ設定をすべてのクライアントに適用することも、特定のクライアントにカスタムルールを指定することもできます。

デフォルトでは、Managed Lustre インスタンスでルート スカッシュは構成されていません。

セキュリティの制限事項と推奨事項

クライアント VM での root アクセスを制限する

root アクセスを制限する最適なメカニズムは、ユーザーがそもそも root になれないようにすることです。VM に対する root 権限をユーザーに付与すると、永続的なリスクにさらされる可能性があります。ユーザーがこれらの権限を悪用して新しいユーザー アカウントを作成したり、バックドアをインストールして VM への永続的なアクセスを維持したりする可能性があります。root アクセスを制限する方法については、 SSH ログイン アクセスを制御するためのベスト プラクティス をご覧ください。

ユーザーが VM で root 権限を持つことを防ぐことができない場合、Managed Lustre の IP ベースのアクセス制御機能を使用すると、Managed Lustre インスタンスにアクセスする際の root ユーザー権限を制限できます。 ただし、これらのアクセス チェックはベスト エフォートであり、この機能はセキュリティ保証を目的としたものではありません。VPC ファイアウォール ルールを主要なセキュリティ境界として使用し、信頼できる VM イメージを使用する信頼できるクライアント VM のみが Managed Lustre インスタンスにネットワーク アクセスできるようにする必要があります。詳細については、 Google Cloud のセキュリティに関するベスト プラクティス をご覧ください。

IP 転送を無効にする

デフォルトの Compute Engine 構成では、インスタンスで IP 転送を有効にできます。ユーザーが別の送信元 IP アドレスを偽装してルート スカッシュ ポリシーを回避できないようにするには、constraints/compute.vmCanIpForward 組織のポリシーを使用して IP 転送を無効にする必要があります。手順については、 組織のポリシーの作成と管理をご覧ください。

デフォルトのルート スカッシュを構成する

インスタンスに接続するすべてのクライアントにルート スカッシュを適用するには、デフォルトのスカッシュ UID と GID を指定し、スカッシュモードを ROOT_SQUASH に設定します。UID と GID によく使用される値は 65534 で、これは nobody ユーザーに変換されます。

デフォルトでは、nobody ユーザーは読み取りと実行のアクセス権のみに制限されます。ファイル システムへの書き込みアクセス権を持つのは、root ユーザーと Owner グループのメンバーのみです。

インスタンスを作成

デフォルトのルート スカッシュでインスタンスを作成するには:

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-modeROOT_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
  }
}

ここで

  • defaultSquashModeROOT_SQUASH です。
  • defaultSquashUiddefaultSquashGid は、root ユーザーの変換先のユーザー 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-modeROOT_SQUASH です。
  • --default-squash-uid--default-squash-gid は、root ユーザーのスカッシュ先のデフォルト ID を指定します。

REST

REST API を使用してインスタンスを更新するには、特定のエンドポイントに PATCH リクエストを送信します。updateMaskaccessRulesOptions を指定する必要があります。

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
  }
}

ここで

  • defaultSquashModeROOT_SQUASH です。
  • defaultSquashUiddefaultSquashGid は、root ユーザーの変換先のユーザー ID とグループ ID の値です。

インスタンスの更新の詳細については、 インスタンスの管理をご覧ください。

Google Cloud コンソール

コンソールを使用してルート スカッシュを構成することはできません。 Google Cloud

例外を使用してルート スカッシュを構成する

特定の信頼できるクライアントのセットを除くすべてのクライアントにルート スカッシュを適用するには、アクセスルール を指定します。このルールでは、root ユーザーのスカッシュ先のデフォルト UID と GID に加えて、IP アドレスまたはアドレス範囲に基づいて特定のクライアントをスカッシュから除外するルールを指定します。

スカッシュ UID と GID によく使用される値は 65534 で、これは nobody ユーザーに変換されます。nobody ユーザーにはファイル システムへの書き込みアクセス権がないことに注意してください。読み取り、書き込み、実行のアクセス権を持つのは、root ユーザーと 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-modeROOT_SQUASH です。
  • --default-squash-uid--default-squash-gid は、root ユーザーのスカッシュ先のデフォルト ID を指定します。
  • --access-rules は、ルート スカッシュの例外を指定します。次の値を指定する必要があります。
    • name は、このアクセスルールの名前です。
    • ipAddressRanges は、重複しない 1 つ以上の IP アドレスまたは CIDR 範囲のカンマ区切りのリストです。範囲は 192.168.0.0/24 の形式で指定します。
    • squashModeNO_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 です。

  • defaultSquashModeROOT_SQUASH です。

  • defaultSquashUiddefaultSquashGid は、特定のアクセスルールに一致しない root ユーザーの変換先のユーザー ID とグループ ID の値です。

たとえば、特定の IP アドレス範囲と特定の IP アドレスの 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 を使用してインスタンスを作成する方法の詳細については、 Managed 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-modeROOT_SQUASH です。
  • --default-squash-uid--default-squash-gid は、root ユーザーのスカッシュ先のデフォルト ID を指定します。
  • --access-rules は、ルート スカッシュの例外を指定します。次の値を指定する必要があります。
    • name は、このアクセスルールの名前です。
    • ipAddressRanges は、重複しない 1 つ以上の IP アドレスまたは CIDR 範囲のカンマ区切りのリストです。範囲は 192.168.0.0/24 の形式で指定します。
    • squashModeNO_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

インスタンスからルート スカッシュを削除する

インスタンスからすべてのルート スカッシュ設定を削除するには、インスタンスを更新してアクセスルールをクリアし、デフォルト モードを 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