I vincoli gestiti sono policy dell'organizzazione predefinite, create su una piattaforma moderna, che forniscono un controllo centralizzato e programmatico sulle risorse Compute Engine. Sono inclusi il supporto integrato per strumenti di implementazione sicuri come Policy Simulator e dry run.
I vincoli gestiti sono identificabili dal prefisso compute.managed.* e fungono da sostituzione diretta dei vincoli compute.* legacy.
Vantaggi
- Implementazione e monitoraggio sicuri: implementa le policy con strumenti completi, controllo delle modifiche più rapido e deployment graduale utilizzando le funzionalità di simulazione e prova generale.
- Logging coerente: impone l'uniformità nei messaggi di logging e di errore, semplificando il monitoraggio centralizzato e snellendo gli audit.
Ereditarietà delle policy
Le policy dell'organizzazione che imposti su una risorsa vengono ereditate dai discendenti di quella risorsa nella gerarchia delle risorse. Ad esempio, se applichi un criterio a una cartella, Google Cloud il criterio viene applicato a tutti i progetti contenuti nella cartella.
Prezzi
Il servizio Policy dell'organizzazione, incluse le policy predefinite (legacy), gestite e personalizzate, viene offerto senza costi aggiuntivi.
Prima di iniziare
-
Se non l'hai ancora fatto, configura l'autenticazione.
L'autenticazione verifica la tua identità per l'accesso ad API e servizi Google Cloud . Per eseguire
codice o esempi da un ambiente di sviluppo locale, puoi autenticarti su
Compute Engine selezionando una delle seguenti opzioni:
Seleziona la scheda relativa a come intendi utilizzare i campioni in questa pagina:
Console
Quando utilizzi la console Google Cloud per accedere ai servizi Google Cloud e alle API, non devi configurare l'autenticazione.
gcloud
-
Installa Google Cloud CLI. Dopo l'installazione, inizializza Google Cloud CLI eseguendo il comando seguente:
gcloud initSe utilizzi un provider di identità (IdP) esterno, devi prima accedere a gcloud CLI con la tua identità federata.
-
- Imposta una regione e una zona predefinite.
REST
Per utilizzare gli esempi di API REST in questa pagina in un ambiente di sviluppo locale, utilizzi le credenziali che fornisci a gcloud CLI.
Installa Google Cloud CLI.
Se utilizzi un provider di identità (IdP) esterno, devi prima accedere a gcloud CLI con la tua identità federata.
Per saperne di più, consulta Autenticati per usare REST nella documentazione sull'autenticazione di Google Cloud .
- Assicurati di conoscere il tuo ID organizzazione.
- Se non l'hai ancora fatto, installa
gcloud CLI e inizializzala eseguendo
gcloud init. - Imposta un progetto predefinito per i test.
Ruoli obbligatori
Per ottenere le autorizzazioni necessarie per gestire le policy dell'organizzazione con vincoli gestiti, chiedi all'amministratore di concederti i seguenti ruoli IAM:
-
Organization Policy Administrator (
roles/orgpolicy.policyAdmin) sulla risorsa dell'organizzazione -
Per testare i vincoli:
Compute Instance Admin (v1) (
roles/compute.instanceAdmin.v1) nel progetto
Per saperne di più sulla concessione dei ruoli, consulta Gestisci l'accesso a progetti, cartelle e organizzazioni.
Questi ruoli predefiniti contengono le autorizzazioni necessarie per gestire le policy dell'organizzazione con vincoli gestiti. Per vedere quali sono esattamente le autorizzazioni richieste, espandi la sezione Autorizzazioni obbligatorie:
Autorizzazioni obbligatorie
Per gestire le policy dell'organizzazione con vincoli gestiti sono necessarie le seguenti autorizzazioni:
-
orgpolicy.constraints.list -
orgpolicy.policies.create -
orgpolicy.policies.delete -
orgpolicy.policies.list -
orgpolicy.policies.update -
orgpolicy.policy.get -
orgpolicy.policy.set -
Per testare i vincoli:
compute.instances.createsul progetto- Per utilizzare un'immagine personalizzata per creare la VM:
compute.images.useReadOnlysull'immagine - Per utilizzare uno snapshot per creare la VM:
compute.snapshots.useReadOnlysullo snapshot - Per utilizzare un template di istanza per creare la VM:
compute.instanceTemplates.useReadOnlysul template di istanza - Per assegnare una rete legacy alla VM:
compute.networks.usesul progetto - Per specificare un indirizzo IP statico per la VM:
compute.addresses.usesul progetto - Per assegnare un indirizzo IP esterno alla VM quando viene utilizzata una rete legacy:
compute.networks.useExternalIpsul progetto - Per specificare una subnet per la VM:
compute.subnetworks.usesul progetto o sulla subnet scelta - Per assegnare un indirizzo IP esterno alla VM quando viene utilizzata una rete VPC:
compute.subnetworks.useExternalIpsul progetto o sulla subnet scelta - Per impostare i metadati dell'istanza VM per la VM:
compute.instances.setMetadatasul progetto - Per impostare i tag per la VM:
compute.instances.setTagssulla VM - Per impostare le etichette per la VM:
compute.instances.setLabelssulla VM - Per impostare un service account da utilizzare per la VM:
compute.instances.setServiceAccountsulla VM - Per creare un nuovo disco per la VM:
compute.disks.createsul progetto - Per collegare un disco esistente in modalità di sola lettura o lettura/scrittura:
compute.disks.usesul disco - Per collegare un disco esistente in modalità di sola lettura:
compute.disks.useReadOnlysul disco
Potresti anche ottenere queste autorizzazioni con ruoli personalizzati o altri ruoli predefiniti.
Vincoli gestiti disponibili
Per Compute Engine sono disponibili i seguenti vincoli di policy dell'organizzazione gestiti:
| Vincolo | Descrizione |
|---|---|
| Impostazioni della crittografia dei collegamenti VLAN consentite |
Questo vincolo di elenco definisce le impostazioni di crittografia consentite per i nuovi collegamenti VLAN. constraints/compute.managed.allowedVlanAttachmentEncryption
|
| Bloccare le funzionalità di anteprima di Compute Engine |
Questo vincolo garantisce che le funzionalità in anteprima siano bloccate, a meno che non sia esplicitamente consentito. Una volta impostata l'opzione Consenti, puoi controllare quali funzionalità di anteprima possono essere attivate o disattivate singolarmente per il tuo progetto. Nel progetto è possibile accedere solo alle funzionalità di anteprima attivate. La disattivazione successiva del criterio non modifica lo stato delle singole funzionalità di anteprima già impostate, che possono essere disattivate singolarmente. Questo vincolo si applica solo alle funzionalità dell'API Compute Alpha. constraints/compute.managed.blockPreviewFeatures
|
| Blocca chiavi SSH a livello di progetto |
Anteprima: questo vincolo impedisce che la chiave dei metadati block-project-ssh-keys venga impostata su false a livello di progetto, di zona del progetto o di istanza per le VM di Compute Engine all'interno dell'organizzazione, del progetto o della cartella in cui è applicato questo vincolo. Per impostazione predefinita, le chiavi SSH a livello di progetto sono consentite e possono essere disattivate a livello di progetto, zona del progetto o istanza utilizzando questa chiave di metadati. Per consentire le chiavi SSH a livello di progetto per VM specifiche, puoi esentarle da questo criterio utilizzando tag e regole condizionali. constraints/compute.managed.blockProjectSshKeys
|
| Disattiva attributi guest dei metadati di Compute Engine |
Anteprima: questo vincolo, se applicato, disabilita l'accesso all'API Compute Engine agli attributi guest delle VM Compute Engine. constraints/compute.managed.disableGuestAttributesAccess
|
| Disabilita la virtualizzazione nidificata della VM |
Questo vincolo booleano disattiva la virtualizzazione nidificata con accelerazione hardware per tutte le VM di Compute Engine appartenenti all'organizzazione, al progetto o alla cartella in cui questo vincolo è impostato su constraints/compute.managed.disableNestedVirtualization
|
| Disattiva i tipi di macchine non conformi a FIPS |
Anteprima: se applicato, questo vincolo impedisce la creazione o l'aggiornamento di istanze VM che utilizzano tipi di macchine non conformi allo standard FIPS. Per impostazione predefinita, sono consentiti tutti i tipi di macchine. Puoi esentare VM specifiche utilizzando tag e regole condizionali. constraints/compute.managed.disableNonFIPSMachineTypes
|
| Limita l'attivazione dei metadati di accesso alla porta seriale VM |
Questo vincolo impedisce che la chiave dei metadati serial-port-enable venga impostata su true per le VM di Compute Engine all'interno dell'organizzazione, del progetto o della cartella in cui è applicato il vincolo. Per impostazione predefinita, l'accesso alla porta seriale può essere abilitato per VM, zona o progetto utilizzando questa chiave di metadati. Per consentire l'accesso alla porta seriale per VM specifiche, puoi esentarle da questa policy utilizzando tag e regole condizionali. constraints/compute.managed.disableSerialPortAccess
|
| Disabilita il logging delle porte seriali delle VM in Stackdriver |
Quando applicato, questo vincolo disattiva il logging delle porte seriali in Stackdriver dalle VM di Compute Engine. constraints/compute.managed.disableSerialPortLogging
|
| Disattiva la creazione di istanze Compute Engine che utilizzano l'agente di avvio dei container (konlet) ritirato. |
Anteprima: questo vincolo booleano impedisce la creazione di istanze Compute Engine che utilizzano konlet, l'agente di avvio dei container ritirato. Se abilitata, non puoi creare istanze di computing con la chiave di metadati `gce-container-declaration`.Questo vincolo impedisce anche la creazione di istanze di computing da modelli di istanza che contengono la chiave di metadati `gce-container-declaration`, il che influisce sui gruppi di istanze gestite (MIG) che utilizzano questi modelli di istanza. constraints/compute.managed.disableVmsWithContainerStartupAgent
|
| Limita l'utilizzo del DNS interno globale (gDNS) per i progetti con un'impostazione DNS ZonalOnly. |
Se applicato, questo vincolo limita l'utilizzo di gDNS. Questa limitazione disattiva la creazione di VM gDNS e l'aggiornamento delle VM per utilizzare gDNS. Il ripristino di un progetto zDNS in gDNS non verrà bloccato, ma comporterà l'applicazione della violazione delle norme durante le successive chiamate all'API Instance. constraints/compute.managed.disallowGlobalDns
|
| Richiedi OS Config |
Quando applicato, questo vincolo richiede l'attivazione di VM Manager (OS Config) su tutti i nuovi progetti. Nei progetti nuovi ed esistenti, questo vincolo impedisce gli aggiornamenti dei metadati che disabilitano VM Manager a livello di progetto, di zona del progetto o di istanza. Puoi consentire a istanze VM specifiche di disabilitare VM Manager. Applica prima i tag per contrassegnare le istanze, poi utilizza regole condizionali basate sui valori dei tag per escludere correttamente queste istanze dall'applicazione. constraints/compute.managed.requireOsConfig
|
| Richiedi accesso al sistema operativo |
Se applicato, questo vincolo richiede l'abilitazione di OS Login in tutti i nuovi progetti creati. Nei progetti nuovi ed esistenti, questo vincolo impedisce gli aggiornamenti dei metadati che disabilitano OS Login a livello di progetto, di zona del progetto o di istanza. Puoi consentire a istanze VM specifiche di disattivare OS Login. Applica prima i tag per contrassegnare le istanze, poi utilizza regole condizionali basate sui valori dei tag per escludere correttamente queste istanze dall'applicazione. constraints/compute.managed.requireOsLogin
|
| Limita elementi non Confidential Computing |
Anteprima: richiede che tutte le nuove VM vengano create con Confidential Computing abilitato. Per impostazione predefinita, non è obbligatorio che le nuove VM utilizzino Confidential Computing. Puoi applicare/esonerare questo vincolo utilizzando i tag per contrassegnare le istanze VM e poi applicare il vincolo con regole condizionali basate sui tag applicati. constraints/compute.managed.restrictNonConfidentialComputing
|
| Limita l'utilizzo del forwarding del protocollo |
Questo vincolo ti consente di limitare i tipi di deployment di forwarding di protocollo (interno o esterno) che possono essere creati nella tua organizzazione. Per configurare il vincolo, specifica una lista consentita del tipo di deployment del forwarding di protocollo da consentire. La lista consentita può includere solo i seguenti valori:
constraints/compute.managed.restrictProtocolForwardingCreationForTypes
|
| Limita l'inoltro IP VM |
Questo vincolo definisce se le istanze VM di Compute Engine possono abilitare l'inoltro IP. Per impostazione predefinita, se non viene specificato alcun criterio, qualsiasi VM può abilitare l'inoltro IP in qualsiasi rete virtuale. Se applicato, questo vincolo negherà la creazione o l'aggiornamento di istanze VM con il forwarding IP abilitato. Puoi consentire a istanze VM specifiche di abilitare l'IP forwarding. Applica prima i tag per contrassegnare le istanze, poi utilizza regole condizionali basate sui valori dei tag per escludere correttamente queste istanze dall'applicazione. constraints/compute.managed.vmCanIpForward
|
| Limitare gli IP esterni per le istanze VM |
Questo vincolo definisce se le istanze VM di Compute Engine possono utilizzare indirizzi IP esterni IPv4. Per impostazione predefinita, tutte le istanze VM possono utilizzare indirizzi IP esterni. Se applicato, questo vincolo negherà la creazione o l'aggiornamento di istanze VM con indirizzi IP esterni IPv4. Questo vincolo non limiterà l'utilizzo di indirizzi IP esterni IPv6. Puoi consentire a istanze VM specifiche di utilizzare indirizzi IP IPv4 esterni. Applica prima i tag per contrassegnare le istanze, poi utilizza regole condizionali basate sui valori dei tag per escludere correttamente queste istanze dall'applicazione. constraints/compute.managed.vmExternalIpAccess
|
Valutazione gerarchica dei metadati
I vincoli gestiti che si basano su chiavi di metadati predefinite, come OS Login o l'accesso alla porta seriale, supportano la valutazione gerarchica. Quando Compute Engine valuta questi vincoli, controlla i valori dei metadati impostati a livello di istanza VM, progetto o zona.
L'impostazione dei valori dei metadati a livello di progetto o di zona consente di gestire le istanze VM su larga scala. Tuttavia, l'applicazione dei vincoli avviene solo durante le chiamate API di creazione o aggiornamento dell'istanza VM. Pertanto, le modifiche ai metadati del progetto o della zona influiscono sulla conformità ai vincoli di un'istanza VM solo quando l'istanza viene creata o aggiornata.
Vincoli e livelli basati sui metadati
| Vincolo | Chiave dei metadati | Livelli della gerarchia dei metadati |
|---|---|---|
compute.managed.disableSerialPortAccess |
serial-port-enable |
Progetto, zona, istanza |
compute.managed.requireOsLogin |
enable-oslogin |
Progetto, zona, istanza |
compute.managed.disableGuestAttributesAccess |
enable-guest-attributes |
Progetto, zona, istanza |
compute.managed.requireOsConfig |
enable-osconfig |
Progetto, zona, istanza |
compute.managed.disallowGlobalDns |
VmDnsSetting |
Progetto, istanza |
Implementazione sicura: il ciclo di vita dei criteri
Per evitare interruzioni del servizio quando implementi gradualmente nuovi vincoli, Google consiglia di implementare i vincoli gestiti seguendo questi passaggi:
Analizzare con Policy Simulator
Prima di applicare una policy, utilizza Policy Simulator per vedere quali risorse esistenti violano la policy. Segui questi passaggi:
Nella console Google Cloud , vai alla pagina Policy dell'organizzazione.
Nella barra dei filtri, cerca il vincolo, quindi fai clic sul nome del vincolo per passare alla pagina Dettagli policy.
Fai clic su Testa modifiche per generare un report di simulazione.
L'applicazione delle modifiche ai metadati gerarchici potrebbe richiedere alcune ore nel report di simulazione per i vincoli sulle impostazioni dei metadati VM.
Esamina il report per riconfigurare le risorse non conformi o richiedere esenzioni.
Convalida con dry run
La modalità dry run registra le violazioni in Cloud Logging, ma non applica le limitazioni.
Per testare un vincolo, utilizza il comando gcloud org-policies set-policy come segue:
Crea un file YAML della policy (ad esempio
dry-run-policy.yaml) con undryRunSpec:name: projects/PROJECT_ID/policies/compute.managed.requireOsLogin dryRunSpec: rules: - enforce: trueSostituisci
PROJECT_IDcon l'ID progetto.Applica la policy:
gcloud org-policies set-policy dry-run-policy.yaml
Applicazione completa
Dopo aver simulato e testato la policy, puoi applicarla a una risorsa. La propagazione delle modifiche alle policy in tutti i sistemiGoogle Cloud può richiedere fino a 15 minuti.
Test dell'applicazione dei vincoli
Dopo aver impostato un criterio, puoi verificarne l'applicazione utilizzando
gcloud CLI. Ad esempio, per testare il vincolo
compute.managed.requireOsLogin, segui questi passaggi:
Elenca le policy esistenti per confermare la configurazione:
gcloud org-policies list --project=PROJECT_IDApplica il criterio di applicazione utilizzando un file YAML:
gcloud org-policies set-policy enforce_managed_constraint.yamlVerifica l'applicazione forzata chiamando un'API di mutazione. Il tentativo di creare un'istanza VM con metadati non conformi dovrebbe non riuscire:
gcloud compute instances create VM_NAME \ --machine-type=MACHINE_TYPE \ --image-family=IMAGE_FAMILY \ --image-project=IMAGE_PROJECT \ --metadata=enable-oslogin=falseSostituisci quanto segue:
VM_NAME: il nome della nuova istanza VM.MACHINE_TYPE: un tipo di macchina valido, ad esempioe2-micro.IMAGE_FAMILY: una famiglia di immagini valida, ad esempiodebian-11.IMAGE_PROJECT: il progetto della famiglia di immagini, ad esempiodebian-cloud.
Controlla il messaggio di errore. Dovresti visualizzare un rifiuto che indica il vincolo specifico violato:
ERROR: (gcloud.compute.instances.create) Could not fetch resource: - Operation denied by org policy: [constraints/compute.managed.requireOsLogin]
Esenzioni condizionali con i tag
Puoi utilizzare i tag per concedere eccezioni a risorse specifiche in base alle esigenze aziendali. In questo esempio, utilizziamo un tag denominato osLoginOptional per identificare
le risorse esenti dal requisito OS Login. Quando associ questo
tag con un valore di true a una risorsa, la policy dell'organizzazione consente l'esistenza di questa
risorsa specifica senza l'accesso OS Login attivato, anche se la policy
rimane applicata rigorosamente per il resto dell'ambiente.
Per concedere un'eccezione utilizzando i tag:
Crea un tag: utilizza gcloud CLI per creare una chiave tag e un valore tag.
Crea la chiave tag:
gcloud resource-manager tags keys create osLoginOptional \ --parent=organizations/ORGANIZATION_IDCrea il valore del tag:
gcloud resource-manager tags values create true \ --parent=organizations/ORGANIZATION_ID/tagKeys/osLoginOptional
Sostituisci
ORGANIZATION_IDcon l'ID della tua organizzazione.Collega il tag a una risorsa. Per esentare un progetto dal vincolo
compute.managed.requireOsLogin, associa il tagosLoginOptional=trueal progetto utilizzando il comandogcloud resource-manager tags bindings create:gcloud resource-manager tags bindings create \ --tag-value=ORGANIZATION_ID/osLoginOptional/true \ --parent=//cloudresourcemanager.googleapis.com/projects/PROJECT_ID \ --location=globalSostituisci
ORGANIZATION_IDcon l'ID organizzazione ePROJECT_IDcon l'ID del progetto che vuoi esentare.Per scoprire come collegare i tag ad altre risorse, consulta Collega un tag a una risorsa.
Aggiorna la policy: crea o aggiorna il file YAML della policy (ad esempio,
policy.yaml) per includere la regola condizionale.name: projects/PROJECT_ID/policies/compute.managed.requireOsLogin spec: rules: - condition: expression: "resource.matchTag('ORGANIZATION_ID/osLoginOptional', 'true')" enforce: false - enforce: trueSostituisci quanto segue:
PROJECT_ID: il tuo ID progetto.ORGANIZATION_ID: l'ID organizzazione.
Applica la policy: utilizza il seguente comando gcloud CLI per attivare la configurazione:
gcloud org-policies set-policy policy.yaml
Migrazione dai vincoli legacy
Durante la migrazione, tieni presente che i vincoli gestiti migliorano, ma non replicano esattamente, il comportamento dei criteri legacy. I vincoli gestiti offrono una maggiore prevedibilità perché verificano le violazioni solo durante le richieste API che creano o modificano le risorse. Se una richiesta viola un vincolo, la chiamata API non va a buon fine e viene generato un errore chiaro. Ciò differisce dai criteri legacy, che potevano essere applicati in varie fasi di un'operazione o utilizzati come attributi delle risorse, rendendo il comportamento di applicazione meno prevedibile.
Quando passi da un vincolo compute.* legacy a un equivalente compute.managed.* moderno, segui questi passaggi per evitare un inasprimento involontario delle restrizioni:
- Scopri: identifica la nuova alternativa al vincolo gestito.
- Analizza e convalida: utilizza il Simulatore di criteri e il dry run come descritto in precedenza.
- Applica vincolo gestito: applica il nuovo vincolo gestito insieme a quello legacy.
- Elimina le policy legacy:
- Vai a Inventario asset nella console Google Cloud e filtra per
orgpolicy.Policye per il nome del vincolo legacy per identificare tutte le norme che utilizzano il vincolo legacy. - Elimina tutte le policy che utilizzano il vincolo legacy. L'eliminazione di un criterio ripristina il comportamento predefinito gestito da Google per questo vincolo.
- Vai a Inventario asset nella console Google Cloud e filtra per
Passaggi successivi
- Scopri di più sui concetti e sui vantaggi fondamentali del servizio in Introduzione al servizio Policy dell'organizzazione.
- Per istruzioni dettagliate sulla creazione e la gestione delle policy, consulta la documentazione di Resource Manager.
- Visualizza l'elenco completo dei vincoli disponibili in tutti i servizi Google Cloud .
- Scopri come utilizzare Policy Simulator per l'analisi avanzata dell'impatto delle policy dell'organizzazione.