Controllo degli accessi basato su IP

Managed Lustre fornisce il controllo dell'accesso basato su IP tramite la funzionalità root squash.

Root squash è una funzionalità di sicurezza che impedisce a un utente root su una VM client di avere privilegi root su un file system Managed Lustre. Quando un utente root accede al file system Managed Lustre, i suoi privilegi vengono "compressi" a quelli di un utente con meno privilegi.

Root squash può essere configurato per una nuova istanza Managed Lustre o per una esistente. Puoi applicare un'impostazione root squash predefinita a tutti i client o specificare regole personalizzate per determinati client.

Per impostazione predefinita, root squash non è configurato su un'istanza Managed Lustre.

Limitazioni e consigli di sicurezza

Limitare l'accesso root sulle VM client

Il meccanismo migliore per limitare l'accesso root è impedire agli utenti di essere root in primo luogo. La concessione agli utenti dei privilegi di root su una VM può esporre a rischi di persistenza: gli utenti potrebbero abusare di questi privilegi per creare nuovi account utente o installare backdoor per mantenere l'accesso permanente alla VM. Per istruzioni su come limitare l'accesso root, consulta Best practice per il controllo dell'accesso al login SSH.

Se non riesci a impedire agli utenti di avere privilegi root sulle VM, la funzionalità di controllo dell'accesso basata su IP di Managed Lustre può limitare i privilegi dell'utente root quando accede alle istanze Managed Lustre. Tuttavia, questi controlli di accesso sono di tipo best effort e questa funzionalità non è intesa come garanzia di sicurezza. Devi fare affidamento sulle regole firewall VPC come perimetro di sicurezza principale e assicurarti che solo le VM client attendibili che utilizzano immagini VM attendibili abbiano accesso alla rete alle tue istanze Managed Lustre. Per ulteriori informazioni, consulta le best practice di sicurezza di Google Cloud.

Disattivare l'IP forwarding

La configurazione predefinita di Compute Engine consente alle istanze di abilitare l'IP forwarding. Per impedire agli utenti di aggirare le policy di root squash impersonando un indirizzo IP di origine diverso, devi disattivare l'IP forwarding utilizzando la policy dell'organizzazione constraints/compute.vmCanIpForward. Per istruzioni, consulta Creare e gestire le policy dell'organizzazione.

Configurare root squash predefinito

Per applicare root squash a tutti i client che si connettono all'istanza, specifica un UID e un GID di squash predefiniti e imposta la modalità di squash su ROOT_SQUASH. Un valore di uso comune per UID e GID è 65534, che si traduce nell'utente nobody.

Tieni presente che, per impostazione predefinita, un utente nobody è limitato all'accesso in lettura ed esecuzione. Solo gli utenti root e i membri del gruppo Owner hanno accesso in scrittura al file system.

Crea istanza

Per creare un'istanza con root squash predefinito:

gcloud

Utilizza i flag --default-squash-mode, --default-squash-uid e --default-squash-gid per impostare i valori predefiniti:

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

Dove:

  • --default-squash-mode è ROOT_SQUASH.
  • --default-squash-uid e --default-squash-gid specificano gli ID predefiniti a cui convertire gli utenti root.

Per un elenco completo e una descrizione dei campi disponibili durante la creazione di un'istanza, consulta il gcloud lustre instances create riferimento.

REST

Per creare un'istanza utilizzando l'API REST, invia una richiesta al seguente endpoint e includi un oggetto 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
  }
}

Dove:

  • defaultSquashMode è ROOT_SQUASH.
  • defaultSquashUid e defaultSquashGid sono i valori dell'ID utente e gruppo a cui convertire gli utenti root.

Per informazioni dettagliate sulla creazione di un'istanza utilizzando l'API REST, consulta il projects.locations.instances.create riferimento API.

Google Cloud Console

Root squash non può essere configurato utilizzando la Google Cloud console.

Aggiorna istanza

Per aggiornare un'istanza esistente in modo che utilizzi root squash predefinito:

gcloud

Utilizza i flag --default-squash-mode, --default-squash-uid e --default-squash-gid per impostare i valori predefiniti:

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

Dove:

  • --default-squash-mode è ROOT_SQUASH.
  • --default-squash-uid e --default-squash-gid specificano gli ID predefiniti a cui comprimere gli utenti root.

REST

Per aggiornare un'istanza utilizzando l'API REST, invia una richiesta PATCH al relativo endpoint specifico. Devi specificare accessRulesOptions in 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
  }
}

Dove:

  • defaultSquashMode è ROOT_SQUASH.
  • defaultSquashUid e defaultSquashGid sono i valori dell'ID utente e gruppo a cui convertire gli utenti root.

Per ulteriori informazioni sull'aggiornamento di un'istanza, consulta Gestire le istanze.

Google Cloud Console

Root squash non può essere configurato utilizzando la Google Cloud console.

Configurare root squash con eccezioni

Per applicare root squash a tutti i client tranne a un insieme specifico di client attendibili, specifica una regola di accesso. Questa regola specifica l'UID e il GID predefiniti a cui comprimere gli utenti root, oltre a una regola che esenta determinati client dalla compressione in base al loro indirizzo IP o intervalli di indirizzi.

Un valore di uso comune per l'UID e il GID di squash è 65534, che si traduce nell'utente nobody. Tieni presente che l'utente nobody non ha accesso in scrittura al file system. Solo gli utenti root e i membri del gruppo Owner hanno accesso in lettura, scrittura ed esecuzione. Gli altri utenti sono limitati all'accesso in lettura ed esecuzione.

Crea un'istanza

gcloud

Per creare un'istanza:

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

Dove:

  • --default-squash-mode è ROOT_SQUASH.
  • --default-squash-uid e --default-squash-gid specificano gli ID predefiniti a cui comprimere gli utenti root.
  • --access-rules specifica le eccezioni a root squash. Devi specificare i seguenti valori:
    • name è il nome di questa regola di accesso.
    • ipAddressRanges è un elenco separato da virgole di uno o più indirizzi IP o intervalli CIDR che non si sovrappongono. Gli intervalli sono specificati nel seguente formato: 192.168.0.0/24.
    • squashMode deve essere NO_SQUASH.

Per un elenco completo e una descrizione dei campi disponibili, consulta Creare un'istanza Managed Lustre.

REST

Per creare un'istanza utilizzando l'API REST, invia una richiesta al seguente endpoint e includi un oggetto 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
  }
}

Quando imposti una regola di accesso specifica, sono obbligatori i seguenti campi:

  • name è un nome definito dall'utente per questa regola. Deve utilizzare solo caratteri alfanumerici e trattini bassi (_) e avere una lunghezza massima di 16 caratteri.

  • ipAddressRanges è un elenco di uno o più indirizzi IP o intervalli CIDR che non si sovrappongono. Gli intervalli sono specificati nel seguente formato: 192.168.0.0/24.

  • squashMode è sempre NO_SQUASH.

  • defaultSquashMode è ROOT_SQUASH.

  • defaultSquashUid e defaultSquashGid sono i valori dell'ID utente e gruppo a cui convertire gli utenti root che non corrispondono a regole di accesso specifiche.

Ad esempio, per impostare un root squash predefinito con un'eccezione per gli utenti root di un intervallo specifico di indirizzi IP e un indirizzo IP particolare, l'oggetto accessRulesOptions ha il seguente aspetto:

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

Per informazioni dettagliate sulla creazione di un'istanza utilizzando l'API REST, consulta Creare un'istanza Managed Lustre.

Google Cloud Console

Root squash non può essere configurato utilizzando la Google Cloud console.

Aggiorna un'istanza

gcloud

Per aggiornare un'istanza:

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

Dove:

  • --default-squash-mode è ROOT_SQUASH.
  • --default-squash-uid e --default-squash-gid specificano gli ID predefiniti a cui comprimere gli utenti root.
  • --access-rules specifica le eccezioni a root squash. Devi specificare i seguenti valori:
    • name è il nome di questa regola di accesso.
    • ipAddressRanges è un elenco separato da virgole di uno o più indirizzi IP o intervalli CIDR che non si sovrappongono. Gli intervalli sono specificati nel seguente formato: 192.168.0.0/24.
    • squashMode deve essere NO_SQUASH.

Per ulteriori informazioni sull'aggiornamento di un'istanza, consulta Gestire le istanze.

REST

Per aggiornare un'istanza utilizzando l'API REST, invia una richiesta PATCH al relativo endpoint specifico. Devi specificare accessRulesOptions come valore di updateMask nell'URL dell'endpoint:

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

Per ulteriori informazioni sull'aggiornamento di un'istanza, consulta Gestire le istanze.

Google Cloud Console

Root squash non può essere configurato utilizzando la Google Cloud console.

Rimuovere root squash da un'istanza

Per rimuovere tutte le impostazioni di root squash da un'istanza, aggiorna l'istanza per cancellare le regole di accesso e imposta la modalità predefinita su 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 Console

Root squash non può essere configurato utilizzando la Google Cloud console.