Vincoli gestiti

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 sostituto diretto 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:

    Select the tab for how you plan to use the samples on this page:

    Console

    When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.

    gcloud

    1. Installa Google Cloud CLI. Dopo l'installazione, inizializza Google Cloud CLI eseguendo il comando seguente:

      gcloud init

      Se utilizzi un provider di identità (IdP) esterno, devi prima accedere a gcloud CLI con la tua identità federata.

    2. Set a default region and zone.

    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. Dopo l'installazione, inizializza Google Cloud CLI eseguendo il comando seguente:

      gcloud init

      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:

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.create sul progetto
    • Per utilizzare un'immagine personalizzata per creare la VM: compute.images.useReadOnly sull'immagine
    • Per utilizzare uno snapshot per creare la VM: compute.snapshots.useReadOnly sullo snapshot
    • Per utilizzare un template di istanza per creare la VM: compute.instanceTemplates.useReadOnly sul template di istanza
    • Per assegnare una rete legacy alla VM: compute.networks.use sul progetto
    • Per specificare un indirizzo IP statico per la VM: compute.addresses.use sul progetto
    • Per assegnare un indirizzo IP esterno alla VM quando viene utilizzata una rete legacy: compute.networks.useExternalIp sul progetto
    • Per specificare una subnet per la VM: compute.subnetworks.use sul progetto o sulla subnet scelta
    • Per assegnare un indirizzo IP esterno alla VM quando viene utilizzata una rete VPC: compute.subnetworks.useExternalIp sul progetto o sulla subnet scelta
    • Per impostare i metadati dell'istanza VM per la VM: compute.instances.setMetadata sul progetto
    • Per impostare i tag per la VM: compute.instances.setTags sulla VM
    • Per impostare le etichette per la VM: compute.instances.setLabels sulla VM
    • Per impostare un service account da utilizzare per la VM: compute.instances.setServiceAccount sulla VM
    • Per creare un nuovo disco per la VM: compute.disks.create sul progetto
    • Per collegare un disco esistente in modalità di sola lettura o lettura/scrittura: compute.disks.use sul disco
    • Per collegare un disco esistente in modalità di sola lettura: compute.disks.useReadOnly sul 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.
Per impostazione predefinita, i collegamenti VLAN possono utilizzare qualsiasi tipo di crittografia.
Imposta IPSEC come valore consentito per forzare la creazione di collegamenti VLAN solo criptati.

constraints/compute.managed.allowedVlanAttachmentEncryption
Bloccare le funzionalità di anteprima di Compute Engine

Questo vincolo garantisce che le funzionalità di 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
Disabilita la virtualizzazione nidificata della VM

[Anteprima pubblica] Questo vincolo booleano disattiva la virtualizzazione nidificata con accelerazione hardware per tutte le VM Compute Engine appartenenti all'organizzazione, al progetto o alla cartella per cui questo vincolo è impostato su True.
Per impostazione predefinita, la virtualizzazione nidificata con accelerazione hardware è consentita per tutte le VM Compute Engine in esecuzione su piattaforme CPU Intel Haswell o successive.

constraints/compute.managed.disableNestedVirtualization
Limita l'attivazione dei metadati di accesso alla porta seriale VM

Anteprima: 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 singola VM, singola zona o singolo 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.
Importante: l'applicazione di questo vincolo non influisce sulle VM esistenti in cui serial-port-enable è già impostato su true. Queste VM manterranno l'accesso a meno che i relativi metadati non vengano aggiornati.

constraints/compute.managed.disableSerialPortAccess
Disabilita il logging delle porte seriali delle VM in Stackdriver

[Anteprima pubblica] Questo vincolo, se applicato, disattiva il logging delle porte seriali in Stackdriver dalle VM di Compute Engine.
Per impostazione predefinita, il logging delle porte seriali per le VM di Compute Engine è disattivato e può essere attivato selettivamente sulle singole VM o sui singoli progetti utilizzando gli attributi dei metadati. La disattivazione del logging delle porte seriali può causare il malfunzionamento di determinati servizi che lo utilizzano, ad esempio i cluster di Google Kubernetes Engine. Prima di applicare questo vincolo, verifica che i prodotti nel tuo progetto non utilizzino il logging delle porte seriali. Puoi consentire a istanze VM specifiche di utilizzare il logging della porta seriale. Applica prima i tag per contrassegnare le istanze, poi utilizza le regole condizionali basate sui valori dei tag per escludere correttamente queste istanze dall'applicazione.

constraints/compute.managed.disableSerialPortLogging
Limita l'utilizzo del DNS interno globale (gDNS) per i progetti con un'impostazione DNS ZonalOnly.

[Anteprima pubblica] 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

[Anteprima pubblica] 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 le regole condizionali basate sui valori dei tag per escludere correttamente queste istanze dall'applicazione.

constraints/compute.managed.requireOsConfig
Richiedi accesso al sistema operativo

[Anteprima pubblica] 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 le regole condizionali basate sui valori dei tag per escludere correttamente queste istanze dall'applicazione.

constraints/compute.managed.requireOsLogin
Limita l'utilizzo del forwarding del protocollo

Questo vincolo 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 di forwarding di protocollo da consentire. La lista consentita può includere solo i seguenti valori:

  • INTERNAL
  • EXTERNAL
. Ad esempio, se la lista consentita è impostata su INTERNO, gli utenti possono configurare solo l'inoltro del protocollo interno. ovvero, tutte le regole di forwarding associate alle istanze di destinazione sono limitate allo schema di bilanciamento del carico interno e devono utilizzare solo indirizzi IP interni.

constraints/compute.managed.restrictProtocolForwardingCreationForTypes
Limita l'inoltro IP VM

[Anteprima pubblica] 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 le 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

[Anteprima pubblica] 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 le 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:

  1. Nella console Google Cloud , vai alla pagina Policy dell'organizzazione.

    Vai a Policy dell'organizzazione

  2. Nella barra dei filtri, cerca il vincolo, quindi fai clic sul nome del vincolo per passare alla pagina Dettagli policy.

  3. Fai clic su Testa modifiche per generare un report di simulazione.

  4. Potrebbero essere necessarie alcune ore prima che le modifiche ai metadati gerarchici vengano visualizzate nel report di simulazione per i vincoli sulle impostazioni dei metadati VM.

  5. 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:

  1. Crea un file YAML della policy (ad esempio dry-run-policy.yaml) con un dryRunSpec:

    name: projects/PROJECT_ID/policies/compute.managed.requireOsLogin
    dryRunSpec:
      rules:
      - enforce: true
    

    Sostituisci PROJECT_ID con l'ID progetto.

  2. 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:

  1. Elenca le policy esistenti per confermare la configurazione:

    gcloud org-policies list --project=PROJECT_ID
    
  2. Applica il criterio di applicazione utilizzando un file YAML:

    gcloud org-policies set-policy enforce_managed_constraint.yaml
    
  3. Verifica 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=false
    

    Sostituisci quanto segue:

    • VM_NAME: il nome della nuova istanza VM.
    • MACHINE_TYPE: un tipo di macchina valido, ad esempio e2-micro.
    • IMAGE_FAMILY: una famiglia di immagini valida, ad esempio debian-11.
    • IMAGE_PROJECT: il progetto della famiglia di immagini, ad esempio debian-cloud.
  4. 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 che sia abilitato OS Login, anche se la policy rimane applicata rigorosamente al resto dell'ambiente.

Per concedere un'eccezione utilizzando i tag:

  1. Crea un tag: utilizza gcloud CLI per creare una chiave tag e un valore tag.

    1. Crea la chiave tag:

      gcloud resource-manager tags keys create osLoginOptional \
          --parent=organizations/ORGANIZATION_ID
      
    2. Crea il valore del tag:

      gcloud resource-manager tags values create true \
          --parent=organizations/ORGANIZATION_ID/tagKeys/osLoginOptional
      

    Sostituisci ORGANIZATION_ID con l'ID della tua organizzazione.

  2. Collega il tag a una risorsa. Per esentare un progetto dal vincolo compute.managed.requireOsLogin, associa il tag osLoginOptional=true al progetto utilizzando il comando gcloud 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=global
    

    Sostituisci ORGANIZATION_ID con l'ID organizzazione e PROJECT_ID con l'ID del progetto che vuoi esentare.

    Per scoprire come collegare i tag ad altre risorse, consulta Collega un tag a una risorsa.

  3. 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: true
    

    Sostituisci quanto segue:

    • PROJECT_ID: il tuo ID progetto.
    • ORGANIZATION_ID: l'ID della tua organizzazione.
  4. 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:

  1. Scopri: identifica la nuova alternativa al vincolo gestito.
  2. Analizza e convalida: utilizza il simulatore di criteri e la prova generale come descritto in precedenza.
  3. Applica vincolo gestito: applica il nuovo vincolo gestito insieme a quello legacy.
  4. Elimina le policy legacy:
    • Vai a Inventario asset nella console Google Cloud e filtra per orgpolicy.Policy e 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.

Passaggi successivi