基于 IP 的访问权限控制

Managed Lustre 通过根用户废除功能提供基于 IP 的访问权限控制。

根用户废除是一项安全功能,可防止客户端虚拟机上的根用户在 Managed Lustre 文件系统上拥有根权限。当根用户访问 Managed Lustre 文件系统时,其权限会被“废除”为权限较低的用户的权限。

您可以为新的 Managed Lustre 实例或现有实例配置根用户废除。您可以将默认根用户废除设置应用于所有客户端,也可以为某些客户端指定自定义规则。

默认情况下,Managed Lustre 实例上未配置根用户废除。

安全限制和建议

限制客户端虚拟机上的根访问权限

限制根访问权限的最佳机制是首先禁止用户成为根用户。向用户授予对虚拟机的 root 权限可能会导致持久性风险:用户可能会滥用这些权限来创建新用户账号或安装后门,以便持续访问虚拟机。 如需了解如何限制根访问权限,请参阅 控制 SSH 登录访问权限的最佳实践

如果您无法阻止用户在虚拟机上拥有根权限,那么 Managed Lustre 基于 IP 的访问权限控制功能可以在访问 Managed Lustre 实例时限制根用户权限。 不过,这些访问权限检查是尽力而为,此功能并非旨在提供安全保障。您应依赖 VPC 防火墙规则作为主要安全 边界,并确保只有使用受信任虚拟机映像的受信任客户端虚拟机才能对 Managed Lustre 实例进行网络访问。如需了解详情,请参阅 Google Cloud 安全最佳实践

停用 IP 转发

默认 Compute Engine 配置允许实例启用 IP 转发。为防止用户通过模拟其他来源 IP 地址来规避根用户废除政策,您应使用 constraints/compute.vmCanIpForward 组织政策停用 IP 转发。如需了解相关说明,请参阅 创建和管理组织政策

配置默认根用户废除

如需将根用户废除应用于连接到实例的所有客户端,请指定默认废除 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 控制台配置根用户废除。

配置根用户废除,但有例外情况

如需将根用户废除应用于除一组特定受信任客户端之外的所有客户端,请指定访问权限规则 。此规则指定了要将根用户废除为的默认 UID 和 GID,以及根据 IP 地址或地址范围免除某些客户端的废除规则。

废除 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 控制台配置根用户废除。

从实例中移除根用户废除

如需从实例中移除所有根用户废除设置,请更新实例以清除访问权限规则并将默认模式设置为 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 控制台配置根用户废除。