Control de acceso basado en IP

Managed Lustre proporciona control de acceso basado en IP a través de la función root squash.

Root squash es una función de seguridad que evita que un usuario raíz en una VM de cliente tenga privilegios de raíz en un sistema de archivos Lustre administrado. Cuando un usuario raíz accede al sistema de archivos Lustre administrado, sus privilegios se "reducen" a los de un usuario con menos privilegios.

Se puede configurar la compresión de raíz para una instancia de Managed Lustre nueva o existente. Puedes aplicar un parámetro de configuración de compresión raíz predeterminado a todos los clientes o especificar reglas personalizadas para ciertos clientes.

De forma predeterminada, la compresión de raíz no está configurada en una instancia de Lustre administrada.

Limitaciones y recomendaciones de seguridad

Restringe el acceso raíz en las VMs de cliente

El mejor mecanismo para restringir el acceso raíz es no permitir que los usuarios sean raíz en primer lugar. Otorgar privilegios de raíz a los usuarios en una VM puede exponerte a riesgos de persistencia: los usuarios podrían abusar de estos privilegios para crear cuentas de usuario nuevas o instalar puertas traseras para mantener el acceso persistente a la VM. Consulta Prácticas recomendadas para controlar el acceso de SSH para obtener instrucciones sobre cómo restringir el acceso raíz.

Si no puedes evitar que los usuarios tengan privilegios de raíz en las VMs, la función de control de acceso basado en IP de Lustre administrado puede restringir los privilegios de usuario raíz cuando se accede a las instancias de Lustre administrado. Sin embargo, estas verificaciones de acceso se realizan con el mayor esfuerzo posible, y esta función no está diseñada para ser una garantía de seguridad. Debes usar las reglas de firewall de VPC como tu perímetro de seguridad principal y asegurarte de que solo las VMs cliente de confianza que usan imágenes de VM de confianza tengan acceso a la red de tus instancias de Lustre administrado. Para obtener más información, consulta las prácticas recomendadas de seguridad de Google Cloud.

Inhabilita el reenvío de IP

La configuración predeterminada de Compute Engine permite que las instancias habiliten el reenvío de IP. Para evitar que los usuarios eludan las políticas de compresión de raíz suplantando una dirección IP de origen diferente, debes inhabilitar el reenvío de IP con la política de la organización constraints/compute.vmCanIpForward. Consulta Crea y administra políticas de la organización para obtener instrucciones.

Configura el squash raíz predeterminado

Para aplicar el squash de raíz a todos los clientes que se conecten a la instancia, especifica un UID y un GID de squash predeterminados, y configura el modo de squash en ROOT_SQUASH. Un valor que se usa con frecuencia para el UID y el GID es 65534, que se traduce en el usuario nobody.

Ten en cuenta que, de forma predeterminada, un usuario de nobody solo tiene acceso de lectura y ejecución. Solo los usuarios raíz y los miembros del grupo Owner tienen acceso de escritura al sistema de archivos.

Crear instancia

Para crear una instancia con compresión de raíz predeterminada, haz lo siguiente:

gcloud

Usa las marcas --default-squash-mode, --default-squash-uid y --default-squash-gid para establecer los valores predeterminados:

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

Aquí:

  • --default-squash-mode es ROOT_SQUASH.
  • --default-squash-uid y --default-squash-gid especifican los IDs predeterminados a los que se convertirán los usuarios raíz.

Para obtener una lista completa y una descripción de los campos disponibles cuando creas una instancia, consulta la referencia de gcloud lustre instances create.

REST

Para crear una instancia con la API de REST, envía una solicitud al siguiente extremo y, luego, incluye un objeto 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
  }
}

Aquí:

  • defaultSquashMode es ROOT_SQUASH.
  • defaultSquashUid y defaultSquashGid son los valores de ID de usuario y de grupo a los que se convertirán los usuarios raíz.

Para obtener detalles sobre cómo crear una instancia con la API de REST, consulta la referencia de la API de projects.locations.instances.create.

Consola de Google Cloud

No se puede configurar la eliminación de raíz con la consola de Google Cloud .

Actualizar instancia

Para actualizar una instancia existente para que use el squash de raíz predeterminado, haz lo siguiente:

gcloud

Usa las marcas --default-squash-mode, --default-squash-uid y --default-squash-gid para establecer los valores predeterminados:

gcloud lustre instances update INSTANCE_NAME \
  --project=PROJECT_ID \
  --location=LOCATION \
  --default-squash-mode=ROOT_SQUASH \
  --default-squash-uid=UID \
  --default-squash-gid=GID

Aquí:

  • --default-squash-mode es ROOT_SQUASH.
  • --default-squash-uid y --default-squash-gid especifican los IDs predeterminados a los que se comprimen los usuarios raíz.

REST

Para actualizar una instancia con la API de REST, envía una solicitud PATCH a su extremo específico. Debes especificar accessRulesOptions en updateMask:

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

Aquí:

  • defaultSquashMode es ROOT_SQUASH.
  • defaultSquashUid y defaultSquashGid son los valores de ID de usuario y de grupo a los que se convertirán los usuarios raíz.

Para obtener más información sobre cómo actualizar una instancia, consulta Administra instancias.

Consola de Google Cloud

No se puede configurar la eliminación de raíz con la consola de Google Cloud .

Cómo configurar el squash de raíz con excepciones

Para aplicar el squash de raíz a todos los clientes, excepto a un conjunto específico de clientes de confianza, especifica una regla de acceso. Esta regla especifica el UID y el GID predeterminados para comprimir los usuarios raíz, además de una regla que exime a ciertos clientes de la compresión según su dirección IP o rangos de direcciones.

Un valor que se usa con frecuencia para el UID y el GID de squash es 65534, que se traduce en el usuario nobody. Ten en cuenta que el usuario nobody no tiene acceso de escritura al sistema de archivos. Solo los usuarios raíz y los miembros del grupo Owner tienen acceso de lectura, escritura y ejecución. Los demás usuarios solo tienen acceso de lectura y ejecución.

Crea una instancia

gcloud

Para crear una instancia, sigue estos pasos:

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

Aquí:

  • --default-squash-mode es ROOT_SQUASH.
  • --default-squash-uid y --default-squash-gid especifican los IDs predeterminados a los que se comprimen los usuarios raíz.
  • --access-rules especifica las excepciones al aplastamiento de raíz. Se deben especificar los siguientes valores:
    • name es el nombre de esta regla de acceso.
    • ipAddressRanges es una lista separada por comas de una o más direcciones IP o rangos de CIDR que no se superponen. Los rangos se especifican en el siguiente formato: 192.168.0.0/24.
    • squashMode debe ser NO_SQUASH

Para obtener una lista completa y una descripción de los campos disponibles, consulta Crea una instancia de Lustre administrada.

REST

Para crear una instancia con la API de REST, envía una solicitud al siguiente extremo y, luego, incluye un objeto 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
  }
}

Cuando configures una regla de acceso específica, se requerirán los siguientes campos:

  • name es un nombre definido por el usuario para esta regla. Debe usar solo caracteres alfanuméricos y guiones bajos (_) y tener 16 caracteres o menos.

  • ipAddressRanges es una lista de una o más direcciones IP o rangos de CIDR que no se superponen. Los rangos se especifican en el siguiente formato: 192.168.0.0/24.

  • squashMode siempre es NO_SQUASH.

  • defaultSquashMode es ROOT_SQUASH.

  • defaultSquashUid y defaultSquashGid son los valores de ID de usuario y de grupo a los que se convertirán los usuarios raíz que no coincidan con ninguna regla de acceso específica.

Por ejemplo, para establecer un squash raíz predeterminado con una excepción para los usuarios raíz de un rango específico de direcciones IP y una dirección IP en particular, el objeto accessRulesOptions se ve de la siguiente manera:

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

Para obtener detalles sobre cómo crear una instancia con la API de REST, consulta Crea una instancia de Lustre administrada.

Consola de Google Cloud

No se puede configurar la eliminación de raíz con la consola de Google Cloud .

Actualizar una instancia

gcloud

Para actualizar una instancia, sigue estos pasos:

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

Aquí:

  • --default-squash-mode es ROOT_SQUASH.
  • --default-squash-uid y --default-squash-gid especifican los IDs predeterminados a los que se comprimen los usuarios raíz.
  • --access-rules especifica las excepciones al aplastamiento de raíz. Se deben especificar los siguientes valores:
    • name es el nombre de esta regla de acceso.
    • ipAddressRanges es una lista separada por comas de una o más direcciones IP o rangos de CIDR que no se superponen. Los rangos se especifican en el siguiente formato: 192.168.0.0/24.
    • squashMode debe ser NO_SQUASH

Para obtener más información sobre cómo actualizar una instancia, consulta Administra instancias.

REST

Para actualizar una instancia con la API de REST, envía una solicitud PATCH a su extremo específico. Debes especificar accessRulesOptions como el valor de updateMask en la URL del extremo:

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

Para obtener más información sobre cómo actualizar una instancia, consulta Administra instancias.

Consola de Google Cloud

No se puede configurar la eliminación de raíz con la consola de Google Cloud .

Cómo quitar el squash de raíz de una instancia

Para quitar todos los parámetros de configuración de squash de raíz de una instancia, actualiza la instancia para borrar las reglas de acceso y establecer el modo predeterminado en 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"
  }
}

Consola de Google Cloud

No se puede configurar la eliminación de raíz con la consola de Google Cloud .