依據 IP 設定的存取權控管機制

Managed Lustre 透過根目錄壓縮功能提供 IP 式存取控管。

Root 權限壓縮是一項安全功能,可防止用戶端 VM 的超級使用者取得 Managed Lustre 檔案系統的 Root 權限。當根使用者存取受管理 Lustre 檔案系統時,系統會將其權限「壓縮」為權限較低的使用者。

您可以為新的或現有的 Managed Lustre 執行個體設定 Root Squash。您可以對所有用戶端套用預設的根目錄壓縮設定,也可以為特定用戶端指定自訂規則。

根據預設,受管理 Lustre 執行個體不會設定根目錄壓縮。

安全限制和建議

限制用戶端 VM 的 Root 存取權

限制 Root 存取權的最佳機制,就是從一開始就禁止使用者取得 Root 權限。授予使用者 VM 的 Root 權限可能會導致持續性風險:使用者可能會濫用這些權限建立新的使用者帳戶,或安裝後門程式,以維持對 VM 的持續存取權。如要瞭解如何限制根存取權,請參閱「控管 SSH 登入存取權的最佳做法」。

如果無法禁止使用者在 VM 上擁有 Root 權限,Managed Lustre 的 IP 型存取權控管功能可限制存取 Managed Lustre 執行個體時的 Root 使用者權限。不過,這些存取權檢查是盡力而為,這項功能並非安全保障。您應以虛擬私有雲防火牆規則做為主要安全防護範圍,並確保只有使用受信任 VM 映像檔的受信任用戶端 VM,才能透過網路存取 Managed Lustre 執行個體。詳情請參閱 Google Cloud 安全性最佳做法

停用 IP 轉送

根據預設,Compute Engine 設定允許執行個體啟用 IP 轉送。為防止使用者透過模擬其他來源 IP 位址規避 Root 權限壓縮政策,您應使用constraints/compute.vmCanIpForward機構政策停用 IP 轉送。如需操作說明,請參閱「建立及管理組織政策」。

設定預設的根目錄壓縮

如要對連線至執行個體的所有用戶端套用 Root 權限壓縮,請指定預設壓縮 UID 和 GID,並將壓縮模式設為 ROOT_SQUASH。UID 和 GID 的常用值為 65534,這會轉譯為 nobody 使用者。

請注意,根據預設,nobody 使用者只能讀取及執行。 只有根使用者和 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 指定要轉換根使用者的預設 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 是要轉換為超級使用者的使用者和群組 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 指定要將根使用者壓縮至的預設 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
  }
}

其中:

  • defaultSquashModeROOT_SQUASH
  • defaultSquashUiddefaultSquashGid 是要轉換為超級使用者的使用者和群組 ID 值。

如要進一步瞭解如何更新執行個體,請參閱「管理執行個體」。

Google Cloud 控制台

您無法使用 Google Cloud 控制台設定根目錄壓縮。

設定根目錄壓縮功能 (例外狀況)

如要對特定信任用戶端以外的所有用戶端套用 Root 權限壓縮,請指定存取規則。這項規則會指定要將根使用者壓縮成的預設 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-modeROOT_SQUASH
  • --default-squash-uid--default-squash-gid 指定要將根使用者壓縮至的預設 ID。
  • --access-rules 指定根壓縮的例外狀況。必須指定下列值:
    • name 是這項存取規則的名稱。
    • ipAddressRanges 是以半形逗號分隔的清單,包含一或多個不重疊的 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 是一或多個不重疊的 IP 位址或 CIDR 範圍清單。範圍的指定格式如下: 192.168.0.0/24

  • squashMode 一律為 NO_SQUASH

  • defaultSquashModeROOT_SQUASH

  • defaultSquashUiddefaultSquashGid 是使用者和群組 ID 值,可將不符合任何特定存取規則的根使用者轉換為這些值。

舉例來說,如要設定預設的根目錄壓縮,但特定 IP 位址範圍和特定 IP 位址的根使用者除外,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 指定要將根使用者壓縮至的預設 ID。
  • --access-rules 指定根壓縮的例外狀況。必須指定下列值:
    • name 是這項存取規則的名稱。
    • ipAddressRanges 是以半形逗號分隔的清單,包含一或多個不重疊的 IP 位址或 CIDR 範圍。範圍的指定格式如下:192.168.0.0/24
    • squashMode 必須為 NO_SQUASH

如要進一步瞭解如何更新執行個體,請參閱「管理執行個體」。

REST

如要使用 REST API 更新執行個體,請將 PATCH 要求傳送至特定端點。您必須在端點網址中,將 accessRulesOptions 指定為 updateMask 的值:

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 控制台設定根目錄壓縮。