Gestisci le risorse firewall utilizzando vincoli personalizzati

I criteri dell'organizzazione di Google Cloud offrono un controllo centralizzato e programmatico sulle risorse dell'organizzazione. In qualità di amministratore dei criteri dell'organizzazione, puoi definire un criterio dell'organizzazione, ovvero un insieme di restrizioni chiamate vincoli che si applicano alle risorse Google Cloud e ai discendenti di tali risorse nella gerarchia delle risorse di Google Cloud. Puoi applicare i criteri dell'organizzazione a livello di organizzazione, cartella o progetto.

I criteri dell'organizzazione forniscono vincoli predefiniti per vari servizi Google Cloud. Tuttavia, se vuoi un controllo più granulare e personalizzabile sui campi specifici limitati nei criteri dell'organizzazione, puoi anche creare vincoli personalizzati e utilizzarli in un criterio dell'organizzazione.

Ereditarietà dei criteri

Per impostazione predefinita, i criteri dell'organizzazione vengono ereditati dai discendenti delle risorse su cui applichi i criteri. Ad esempio, se applichi un criterio a una cartella, Google Cloud applica il criterio a tutti i progetti nella cartella. Per scoprire di più su questo comportamento e su come modificarlo, consulta Regole di valutazione della gerarchia.

Risorse supportate da Cloud Firewall

Per le regole firewall VPC, puoi impostare vincoli personalizzati sulle risorse e sui campi seguenti.

  • Firewall: compute.googleapis.com/Firewall
    • Nome: resource.name
    • Descrizione: resource.description
    • Rete: resource.network
    • Priorità: resource.priority
    • Intervalli di origine: resource.sourceRanges[]
    • Intervalli di destinazione: resource.destinationRanges[]
    • Tag di origine: resource.sourceTags[]
    • Tag di destinazione: resource.targetTags[]
    • Regole consentite: resource.allowed[]
      • Protocollo: resource.allowed[].IPProtocol
      • Porte: resource.allowed[].ports[]
    • Regole di negazione: resource.denied[]
      • Protocollo: resource.denied[].IPProtocol
      • Porte: resource.denied[].ports[]
    • Direzione: resource.direction
    • Opzione disattivata: resource.disabled

Definizione di vincoli personalizzati

Un vincolo personalizzato è definito dalle risorse, dai metodi, dalle condizioni e dalle azioni supportate dal servizio su cui applichi il criterio dell'organizzazione. Le condizioni per i vincoli personalizzati vengono definite utilizzando il linguaggio CEL (Common Expression Language). Per ulteriori informazioni su come creare condizioni nei vincoli personalizzati utilizzando CEL, consulta la sezione CEL di Creazione e gestione dei vincoli personalizzati.

Oltre alle funzioni CEL standard, puoi utilizzare la funzione CEL personalizzata containsFirewallPort per creare vincoli personalizzati per le regole firewall. Puoi utilizzare questa funzione per creare un vincolo che fa riferimento a un particolare protocollo o a una combinazione di protocollo e porta.

  • Solo protocollo: resource.allowed.containsFirewallPort('PROTOCOL')
  • Protocollo e porta: resource.allowed.containsFirewallPort('PROTOCOL', 'PORT_NUMBER')

Per informazioni sui protocolli consentiti, consulta Protocolli e porte.

Prima di iniziare

  • Configurare l'autenticazione.

    Seleziona la scheda relativa a come intendi utilizzare gli esempi di questa pagina:

    Console

    Quando utilizzi la console Google Cloud per accedere ai servizi e alle API Google Cloud, non è necessario configurare l'autenticazione.

    gcloud

    1. Installa Google Cloud CLI, quindi inizializzalo eseguendo il comando seguente:

      gcloud init
    2. Imposta una regione e una zona predefinite.

    REST

    Per utilizzare gli esempi di API REST su questa pagina in un ambiente di sviluppo locale, devi utilizzare le credenziali che fornisci allgcloud CLI.

      Installa Google Cloud CLI, quindi inizializzalo eseguendo il comando seguente:

      gcloud init
* Assicurati di conoscere l'ID organizzazione. * Consulta le limitazioni.

Ruoli obbligatori

Per ottenere le autorizzazioni necessarie per gestire i criteri dell'organizzazione per le risorse Cloud Firewall, chiedi all'amministratore di concederti i ruoli IAM seguenti:

Per saperne di più sulla concessione dei ruoli, consulta Gestire l'accesso.

Questi ruoli predefiniti contengono le autorizzazioni necessarie per gestire i criteri dell'organizzazione per le risorse Cloud Firewall. Per visualizzare le autorizzazioni necessarie, espandi la sezione Autorizzazioni richieste:

Autorizzazioni obbligatorie

Per gestire i criteri dell'organizzazione per le risorse Cloud Firewall 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

Potresti anche essere in grado di ottenere queste autorizzazioni con i ruoli personalizzati o altri ruoli predefiniti.

Configura un vincolo personalizzato

Puoi creare un vincolo personalizzato e configurarlo per l'utilizzo nei criteri dell'organizzazione utilizzando la console Google Cloud o Google Cloud CLI.

Console

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

    Vai a Criteri dell'organizzazione

  2. Seleziona il selettore di progetti nella parte superiore della pagina.

  3. Dal selettore di progetti, seleziona la risorsa per cui vuoi impostare il criterio dell'organizzazione.

  4. Fai clic su Vincolo personalizzato.

  5. Nella casella Nome visualizzato, inserisci un nome intuitivo per il vincolo. Questo campo ha una lunghezza massima di 200 caratteri. Non utilizzare PII o dati sensibili nei nomi dei vincoli, perché potrebbero essere esposti nei messaggi di errore.

  6. Nella casella ID vincolo, inserisci il nome che vuoi per il nuovo vincolo personalizzato. Ad esempio, custom.httpFirewallRule. La lunghezza massima di questo campo è 70 caratteri, escluso il prefisso (ad esempio, organizations/123456789/customConstraints/custom.).

  7. Nella casella Descrizione, inserisci una descrizione intuitiva del vincolo da visualizzare come messaggio di errore in caso di violazione del criterio. Questo campo ha una lunghezza massima di 2000 caratteri.

  8. Nella casella Tipo di risorsa, seleziona il nome della risorsa REST Google Cloud contenente l'oggetto e il campo che vuoi limitare. Ad esempio, compute.googleapis.com/Firewall.

  9. In Metodo di applicazione, scegli se applicare il vincolo al metodo CREATE REST.

  10. Per definire una condizione, fai clic su Modifica condizione.

    1. Nel riquadro Aggiungi condizione, crea una condizione CEL che faccia riferimento a una risorsa di servizio supportata. Questo campo ha una lunghezza massima di 1000 caratteri.

    2. Fai clic su Salva.

  11. In Azione, scegli se consentire o negare il metodo valutato se la condizione riportata sopra è soddisfatta.

  12. Fai clic su Crea vincolo.

Dopo aver inserito un valore in ogni campo, sulla destra viene visualizzata la configurazione YAML equivalente per questo vincolo personalizzato.

gcloud

Per creare un vincolo personalizzato utilizzando Google Cloud CLI, crea un file YAML per il vincolo personalizzato:

name: organizations/ORGANIZATION_ID/customConstraints/CONSTRAINT_NAME
resource_types: compute.googleapis.com/RESOURCE_NAME
method_types:
- CREATE
condition: "CONDITION"
action_type: ACTION
display_name: DISPLAY_NAME
description: DESCRIPTION

Sostituisci quanto segue:

  • ORGANIZATION_ID: l'ID della tua organizzazione, ad esempio 123456789.

  • CONSTRAINT_NAME: il nome che vuoi assegnare al nuovo vincolo personalizzato. Questo campo ha una lunghezza massima di 100 caratteri, senza conteggiare il prefisso (ad esempio, organizations/123456789/customConstraints/). Un vincolo personalizzato deve iniziare con custom.. Ad esempio: custom.httpFirewallRule.

  • RESOURCE_NAME: il nome (non l'URI) della risorsa REST dell'API Compute Engine contenente l'oggetto e il campo che vuoi limitare. Ad esempio, Firewall.

  • CONDITION: una condizione CEL scritta in base a una rappresentazione di una risorsa di servizio supportata. Questo campo ha una lunghezza massima di 1000 caratteri. Consulta Risorse supportate per ulteriori informazioni sulle risorse disponibili per cui scrivere le condizioni.

  • ACTION: l'azione da intraprendere se condition viene soddisfatto. Può essere ALLOW o DENY.

  • DISPLAY_NAME: un nome intuitivo per il vincolo. Questo campo ha una lunghezza massima di 200 caratteri.

  • DESCRIPTION: una descrizione intuitiva del vincolo da mostrare come messaggio di errore in caso di violazione del criterio. Questo campo ha una lunghezza massima di 2000 caratteri.

Per saperne di più su come creare un vincolo personalizzato, consulta la sezione Definizione di vincoli personalizzati.

Dopo aver creato un nuovo vincolo personalizzato utilizzando Google Cloud CLI, devi configurarlo per renderlo disponibile per i criteri dell'organizzazione nella tua organizzazione. Per configurare un vincolo personalizzato, utilizza il comando gcloud org-policies set-custom-constraint:
gcloud org-policies set-custom-constraint CONSTRAINT_PATH
Sostituisci CONSTRAINT_PATH con il percorso completo del file dei vincoli personalizzati. Ad esempio, /home/user/customconstraint.yaml. Al termine, troverai i tuoi vincoli personalizzati come vincoli disponibili nell'elenco dei criteri dell'organizzazione di Google Cloud. Per verificare l'esistenza del vincolo personalizzato, utilizza il comando gcloud org-policies list-custom-constraints:
gcloud org-policies list-custom-constraints --organization=ORGANIZATION_ID
Sostituisci ORGANIZATION_ID con l'ID della risorsa organizzazione. Per maggiori informazioni, consulta Visualizzare i criteri dell'organizzazione.

Applica un vincolo personalizzato

Puoi applicare un vincolo booleano creando un criterio dell'organizzazione che faccia riferimento e applicando questo criterio a una risorsa Google Cloud.

Console

Per applicare un vincolo booleano:

  1. Apri la pagina Criteri dell'organizzazione nella console Google Cloud.

    Apri la pagina Criteri dell'organizzazione

  2. Seleziona il selettore di progetti nella parte superiore della pagina.
  3. Dal selettore di progetti, scegli il progetto per il quale vuoi impostare il criterio dell'organizzazione.
  4. Seleziona il vincolo dall'elenco nella pagina Criteri dell'organizzazione. Dovrebbe essere visualizzata la pagina Dettagli criterio relativa al vincolo.
  5. Per personalizzare il criterio dell'organizzazione per questa risorsa, fai clic su Gestisci criterio.
  6. Nella pagina Modifica criterio, seleziona Personalizza.
  7. Fai clic su Aggiungi regola.
  8. In Applicazione, scegli se l'applicazione del criterio dell'organizzazione deve essere attivata o disattivata.
  9. Facoltativamente, per rendere condizionale il criterio dell'organizzazione a un tag, fai clic su Aggiungi condizione. Tieni presente che se aggiungi una regola condizionale a un criterio dell'organizzazione, devi aggiungere almeno una regola non condizionale, altrimenti il criterio non potrà essere salvato. Per maggiori dettagli, consulta Impostare un criterio dell'organizzazione con i tag.
  10. Per completare e applicare il criterio dell'organizzazione, fai clic su Salva. L'applicazione del criterio potrebbe richiedere fino a 15 minuti.

gcloud

Per creare un criterio dell'organizzazione che applichi un vincolo booleano, crea un file YAML dei criteri che faccia riferimento al vincolo:

      name: projects/PROJECT_ID/policies/CONSTRAINT_NAME
      spec:
        rules:
        - enforce: true
    

Sostituisci quanto segue:

  • PROJECT_ID: il progetto su cui vuoi applicare il vincolo.
  • CONSTRAINT_NAME: il nome definito per il vincolo personalizzato. Ad esempio, custom.httpFirewallRule.

Per applicare il criterio dell'organizzazione contenente il vincolo, esegui questo comando:

    gcloud org-policies set-policy POLICY_PATH
    

Sostituisci POLICY_PATH con il percorso completo del file YAML dei criteri dell'organizzazione. L'applicazione del criterio potrebbe richiedere fino a 15 minuti.

Esempio: creare un vincolo che limita la creazione di regole firewall che consentono le connessioni SSH

Questo vincolo impedisce la creazione di regole firewall in entrata che consentono le connessioni SSH da qualsiasi intervallo di indirizzi IP diverso dai seguenti intervalli:

  • 10.0.0.0/8: un intervallo di indirizzi IP interni utilizzato nella rete VPC.
  • 192.168.0.0/16: un intervallo di indirizzi IP interni utilizzato nella rete VPC.
  • 35.235.240.0/20: l'intervallo di indirizzi IP utilizzato da Identity-Aware Proxy (IAP) per l'inoltro TCP.

gcloud

  1. Crea un file del vincolo restrictSshRanges.yaml con le seguenti informazioni. Sostituisci ORGANIZATION_ID con l'ID della tua organizzazione.

    name: organizations/ORGANIZATION_ID/customConstraints/custom.restrictSshRanges
    resource_types: compute.googleapis.com/Firewall
    condition: "resource.direction.matches('INGRESS') && resource.allowed.containsFirewallPort('tcp', '22') && !resource.sourceRanges.all(range, range == '35.235.240.0/20' || range.startsWith('10.') || range.startsWith('192.168.'))"
    action_type: DENY
    method_types: CREATE
    display_name: Limit firewall rules that allow ingress SSH traffic
    description: Firewall rules that allow ingress SSH traffic can only be created with allowed source ranges.
  2. Imposta il vincolo personalizzato.

    gcloud org-policies set-custom-constraint restrictSshRanges.yaml
    
  3. Crea un file del criterio restrictSshRanges-policy.yaml con le seguenti informazioni. In questo esempio applichiamo questo vincolo a livello di progetto, ma puoi impostarlo anche a livello di organizzazione o cartella. Sostituisci PROJECT_ID con l'ID progetto.

        name: projects/PROJECT_ID/policies/custom.restrictSshRanges
        spec:
          rules:
          – enforce: true
    
  4. Applica il criterio.

    gcloud org-policies set-policy restrictSshRanges-policy.yaml
    
  5. Verifica il vincolo cercando di creare una rete VPC in modalità automatica. Sostituisci NETWORK con il nome della tua rete.

    gcloud compute firewall-rules create ssh-firewall-rule \
        --action=ALLOW  --direction=INGRESS  --network=NETWORK \
        --priority=1000  --rules=tcp:22  --source-ranges=0.0.0.0/0
    

    L'output è simile al seguente:

    ERROR: (gcloud.compute.networks.create) Could not fetch resource:
    - Operation denied by custom org policy: [customConstraints/custom.restrictSshRanges] : Firewall rules that allow ingress SSH traffic can only be created with allowed source ranges.
    

Limitazioni

  • Durante l'anteprima, se non è possibile verificare o verificare i vincoli personalizzati, ad esempio se il server dei criteri dell'organizzazione non è attivo, tutti i vincoli personalizzati vengono ignorati e gli utenti possono creare risorse non conformi. Gli errori di sintassi nelle condizioni CEL (Common Expression Language) non vengono ignorati e possono causare un errore nella creazione o nell'applicazione dei vincoli. Per saperne di più, consulta la sezione Risoluzione degli errori CEL.
  • I vincoli personalizzati vengono applicati solo al metodo CREATE per le risorse delle regole firewall di Virtual Private Cloud.

Prezzi

Il servizio Criteri dell'organizzazione, che include vincoli predefiniti e personalizzati, è offerto senza costi aggiuntivi.

Passaggi successivi