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 log e nei messaggi 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, Cloud de Confiance by S3NS 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 Cloud de Confiance by S3NS . 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 Cloud de Confiance per accedere ai servizi Cloud de Confiance by S3NS e alle API, non devi configurare l'autenticazione.

    gcloud

    1. Installa Google Cloud CLI, quindi accedi a gcloud CLI con la tua identità federata. Dopo aver eseguito l'accesso, inizializza Google Cloud CLI eseguendo il comando seguente:

      gcloud init
  • 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, quindi accedi a gcloud CLI con la tua identità federata.

    Per saperne di più, consulta Autenticati per usare REST nella documentazione sull'autenticazione di Cloud de Confiance .

  • 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:

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 durante l'implementazione graduale di 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 Cloud de Confiance , 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. L'applicazione delle modifiche ai metadati gerarchici potrebbe richiedere alcune ore 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 sistemiCloud de Confiance by S3NS 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 l'accesso OS Login attivato, anche se la policy rimane applicata rigorosamente per il 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 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 limitazioni:

  1. Scopri: identifica la nuova alternativa al vincolo gestito.
  2. Analizza e convalida: utilizza il Simulatore di criteri e il dry run 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 Cloud de Confiance console e filtra per orgpolicy.Policy e per il nome del vincolo legacy per identificare tutti i criteri 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