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-uide--default-squash-gidspecificano 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.defaultSquashUidedefaultSquashGidsono 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-uide--default-squash-gidspecificano 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.defaultSquashUidedefaultSquashGidsono 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-uide--default-squash-gidspecificano gli ID predefiniti a cui comprimere gli utenti root.--access-rulesspecifica 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.squashModedeve essereNO_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è sempreNO_SQUASH.defaultSquashModeèROOT_SQUASH.defaultSquashUidedefaultSquashGidsono 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-uide--default-squash-gidspecificano gli ID predefiniti a cui comprimere gli utenti root.--access-rulesspecifica 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.squashModedeve essereNO_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.