Impostazione di un criterio dell'organizzazione con tag

I tag forniscono un modo per consentire o negare in modo condizionale i criteri a seconda che una risorsa abbia un tag specifico. Puoi utilizzare i tag e l'applicazione condizionale delle policy dell'organizzazione per fornire un controllo centralizzato delle risorse nella tua gerarchia.

Prima di iniziare

Per saperne di più sui tag e sul loro funzionamento, consulta la panoramica dei tag.

Per istruzioni dettagliate su come utilizzare i tag, vedi Creare e gestire i tag.

Ruoli obbligatori

Per ottenere le autorizzazioni necessarie per gestire le policy dell'organizzazione, chiedi all'amministratore di concederti il ruolo IAM Amministratore policy dell'organizzazione (roles/orgpolicy.policyAdmin) nell'organizzazione. Per saperne di più sulla concessione dei ruoli, consulta Gestisci l'accesso a progetti, cartelle e organizzazioni.

Potresti anche riuscire a ottenere le autorizzazioni richieste tramite i ruoli personalizzati o altri ruoli predefiniti.

Puoi delegare l'amministrazione delle policy dell'organizzazione aggiungendo condizioni IAM al binding del ruolo Amministratore policy dell'organizzazione. Per controllare le risorse in cui un'entità può gestire le policy dell'organizzazione, puoi rendere l'associazione di ruolo condizionale a un particolare tag. Per saperne di più, consulta la pagina Utilizzo dei vincoli.

Impostazione di un criterio dell'organizzazione con tag

Per utilizzare i tag per determinare dove deve essere applicata una policy dell'organizzazione, devi specificare una condizione nel file YAML della policy dell'organizzazione. Puoi impostare la condizione in modo che corrisponda a una determinata coppia chiave-valore del tag, richiedendo che venga impostato un determinato valore del tag per l'applicazione del criterio dell'organizzazione.

Puoi anche impostare la condizione in modo che corrisponda a una chiave tag. In questo modo puoi attivare o disattivare l'applicazione per tutte le risorse con quella chiave tag, indipendentemente dal valore tag allegato.

La maggior parte dei criteri dell'organizzazione vengono valutati e applicati quando una risorsa viene creata o aggiornata. I tag obbligatori possono essere utilizzati per controllare le risorse durante la creazione.

Esempio di regola di elenco

Il seguente esempio mostra come impostare una policy dell'organizzazione che applica il vincolo gestito legacy gcp.resourceLocations. Questa policy dell'organizzazione utilizza valori condizionali e incondizionati, impostati all'interno dello stesso file di policy.

Console

Per impostare la policy dell'organizzazione:

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

    Vai a Policy dell'organizzazione

  2. Nel selettore di progetti, seleziona il progetto per cui vuoi impostare la policy dell'organizzazione.

  3. Nella pagina Policy dell'organizzazione, seleziona un vincolo dall'elenco. Viene visualizzata la pagina Dettagli policy per il vincolo.

  4. Per aggiornare la policy dell'organizzazione per questa risorsa, fai clic su Gestisci policy.

  5. Nella pagina Modifica policy, seleziona Esegui override della policy dell'unità organizzativa principale.

  6. In Applicazione policy, seleziona un'opzione di applicazione:

    • Per unire e valutare insieme i criteri della tua organizzazione, seleziona Unisci a principale. Per saperne di più sull'ereditarietà e sulla gerarchia delle risorse, consulta Informazioni sulla valutazione della gerarchia.

    • Per eseguire l'override delle policy ereditate da una risorsa padre, seleziona Sostituisci.

  7. Fai clic su Aggiungi regola.

  8. In Valori policy, seleziona se questa policy dell'organizzazione deve consentire tutti i valori, negare tutti i valori o specificare un insieme personalizzato di valori.

    • I valori specifici accettati dal criterio dipendono dal servizio a cui si applica il criterio. Per un elenco dei vincoli e dei valori che accettano, consulta Vincoli delle policy dell'organizzazione.
  9. (Facoltativo) Per rendere la policy dell'organizzazione condizionale su un tag, fai clic su Aggiungi condizione.

    1. Nel campo Titolo, inserisci un nome per la condizione.

    2. Nel campo Descrizione, fornisci una descrizione della condizione. La descrizione fornisce il contesto dei tag richiesti e il modo in cui influenzano le risorse.

    3. Puoi utilizzare lo Strumento per la creazione di condizioni per creare una condizione che richiede un tag specifico affinché il vincolo abbia effetto.

      1. Nella casella Tipo di condizione, seleziona Tag.

      2. Seleziona l'operatore per la condizione.

        • Per trovare una corrispondenza con un intero tag, utilizza l'operatore ha valore con il nome del tag con spazio dei nomi oppure utilizza l'operatore ha ID valore con gli ID chiave e valore del tag.

        • Per trovare una corrispondenza solo con la chiave del tag, utilizza l'operatore has key con il nome con spazio dei nomi della chiave del tag oppure utilizza l'operatore has key ID con l'ID della chiave del tag.

      3. Puoi creare più condizioni facendo clic su Aggiungi. Se aggiungi un'altra condizione, puoi impostare la logica condizionale in modo che richieda tutte le condizioni attivando E. Puoi impostare la logica condizionale in modo che richieda che solo una delle condizioni sia vera attivando/disattivando Or.

      4. Puoi eliminare un'espressione facendo clic sulla X grande a destra dei campi della condizione.

      5. Al termine della modifica delle condizioni, fai clic su Salva.

    4. L'editor delle condizioni può essere utilizzato per creare un'espressione condizionale in modo programmatico. Verrà visualizzata anche una rappresentazione programmatica del tuo attuale insieme di condizioni.

      L'espressione condizionale deve includere da 1 a 10 sottoespressioni, unite dagli operatori || o &&. Ogni sottoespressione deve essere una delle seguenti funzioni:

      • "resource.matchTag('KEY_NAME', 'VALUE_SHORT_NAME')"

        Sostituisci quanto segue:

        • KEY_NAME con il nome con spazio dei nomi della chiave tag. Ad esempio, 123456789012/env.

        • VALUE_SHORT_NAME con il nome abbreviato del valore del tag. Ad esempio, prod.

        Ad esempio: resource.matchTag('123456789012/environment, 'prod')

      • "resource.matchTagId('KEY_ID', 'VALUE_ID')"

        Sostituisci quanto segue:

        • KEY_ID con l'ID permanente della chiave del tag. Ad esempio, tagKeys/123456789012.

        • VALUE_ID con l'ID permanente del valore del tag. Ad esempio, tagValues/567890123456.

        Ad esempio: resource.matchTagId('tagKeys/123456789012', 'tagValues/567890123456')

      • "resource.hasTagKey('KEY_NAME')"

        Sostituisci KEY_NAME con il nome con spazio dei nomi della chiave del tag. Ad esempio, 123456789012/env.

        Ad esempio: resource.matchTag('123456789012/environment, 'prod')

      • "resource.hasTagKeyId('KEY_ID')"

        Sostituisci KEY_ID con l'ID permanente della chiave del tag. Ad esempio, tagKeys/123456789012.

        Ad esempio: resource.matchTagId('tagKeys/123456789012')

      1. Puoi utilizzare l'editor delle condizioni per applicare l'operatore logico !. Ad esempio, la query !resource.matchTag('ORGANIZATION_ID/location', 'us-west1') applicherebbe il vincolo dei criteri dell'organizzazione a qualsiasi risorsa che non abbia il tag us-west1.
  10. Per applicare la policy, fai clic su Imposta policy.

gcloud

Per impostare la policy dell'organizzazione, crea un file YAML per archiviarla:

name: RESOURCE_TYPE/RESOURCE_ID/policies/gcp.resourceLocations
spec:
  rules:
  # As there is no condition specified, this allowedValue is enforced unconditionally.
  - values:
      allowedValues:
      - us-east1-locations
  # This condition applies to the values block.
  - condition:
      expression: "resource.matchTag('ORGANIZATION_ID/location', 'us-west1')"
    values:
      allowedValues:
      - us-west1-locations

Puoi abbinare un intero tag alla condizione utilizzando l'operatore resource.matchTag con il nome con spazio dei nomi del tag.

Per trovare una corrispondenza solo con la chiave del tag, utilizza l'operatore resource.hasTagKey con il nome con spazio dei nomi della chiave del tag. Per trovare una corrispondenza con qualsiasi valore di tag per una determinata chiave di tag, utilizza l'operatore resource.hasTagKeyID con l'ID chiave di tag.

Esegui il comando set-policy:

gcloud org-policies set-policy POLICY_PATH

Sostituisci quanto segue:

  • POLICY_PATH: il percorso completo del file YAML della policy dell'organizzazione

  • RESOURCE_TYPE: organizations, folders o projects

  • RESOURCE_ID: l'ID organizzazione, l'ID cartella, l'ID progetto o il numero di progetto, a seconda del tipo di risorsa specificato in RESOURCE_TYPE

  • ORGANIZATION_ID: l'organizzazione principale della tua chiave tag

Per questa policy dell'organizzazione, la risorsa e tutte le relative risorse secondarie hanno il vincolo gestito legacy gcp.resourceLocations applicato, con solo allowedValues di us-east1-locations. Qualsiasi di queste risorse con il tag location: us-west1 avrà il vincolo gestito legacy gcp.resourceLocations applicato, con allowedValues di us-east1-locations e us-west1-locations.

In questo modo, è possibile applicare insiemi di valori condizionali e incondizionati per un vincolo in un unico criterio dell'organizzazione.

Esempio di regola booleana

Il seguente esempio mostra come impostare una policy dell'organizzazione che applica il vincolo gestito legacy compute.disableSerialPortAccess. Questo criterio dell'organizzazione specifica che tutte le porte seriali sono accessibili alle risorse, ma utilizza una condizione per limitare l'accesso alle porte seriali solo alle risorse che hanno il tag corrispondente.

Console

Per impostare la policy dell'organizzazione:

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

    Vai a Policy dell'organizzazione

  2. Nel selettore di progetti, seleziona il progetto per cui vuoi impostare la policy dell'organizzazione.

  3. Seleziona un vincolo dall'elenco nella pagina Criteri organizzazione. Dovrebbe essere visualizzata la pagina Dettagli policy relativa al vincolo in questione.

  4. Per aggiornare la policy dell'organizzazione per questa risorsa, fai clic su Gestisci policy.

  5. Nella pagina Modifica policy, seleziona Esegui override della policy dell'unità organizzativa principale.

  6. Fai clic su Aggiungi regola.

  7. In Applicazione, seleziona se attivare o meno l'applicazione di questa policy dell'organizzazione.

  8. (Facoltativo) Per rendere la policy dell'organizzazione condizionale su un tag, fai clic su Aggiungi condizione. Tieni presente che se aggiungi una regola condizionale a una policy dell'organizzazione, devi aggiungere una sola regola non condizionale, altrimenti la policy non può essere salvata.

    1. Nel campo Titolo, inserisci un nome per la condizione.

    2. Nel campo Descrizione, fornisci una descrizione della condizione. La descrizione fornisce il contesto dei tag richiesti e il modo in cui influenzano le risorse.

    3. Puoi utilizzare lo Strumento per la creazione di condizioni per creare una condizione che richiede un tag specifico affinché il vincolo abbia effetto.

      1. Nella casella Tipo di condizione, seleziona Tag.

      2. Seleziona l'operatore per la condizione.

        • Per trovare una corrispondenza con un intero tag, utilizza l'operatore ha valore con il nome del tag con spazio dei nomi oppure utilizza l'operatore ha ID valore con gli ID chiave e valore del tag.

        • Per trovare una corrispondenza solo con la chiave del tag, utilizza l'operatore has key con il nome con spazio dei nomi della chiave del tag oppure utilizza l'operatore has key ID con l'ID della chiave del tag.

      3. Puoi creare più condizioni facendo clic su Aggiungi. Se aggiungi un'altra condizione, puoi impostare la logica condizionale in modo che richieda tutte le condizioni attivando E. Puoi impostare la logica condizionale in modo che richieda che solo una delle condizioni sia vera attivando/disattivando Or.

      4. Puoi eliminare un'espressione facendo clic sulla X grande a destra dei campi della condizione.

      5. Al termine della modifica delle condizioni, fai clic su Salva.

      6. Una policy dell'organizzazione con una condizione applicata deve avere una sola regola non condizionale. Fai clic su Aggiungi regola e imposta se l'applicazione di questa policy dell'organizzazione deve essere attivata o disattivata per impostazione predefinita.

    4. L'editor delle condizioni può essere utilizzato per creare un'espressione condizionale in modo programmatico. Verrà visualizzata anche una rappresentazione programmatica del tuo attuale insieme di condizioni.

      L'espressione condizionale deve includere da 1 a 10 sottoespressioni, unite dagli operatori || o &&. Ogni sottoespressione deve avere una delle seguenti forme:

      • "resource.matchTag('KEY_NAME', 'VALUE_SHORT_NAME')"

        Sostituisci quanto segue:

        • KEY_NAME con il nome con spazio dei nomi della chiave tag. Ad esempio, 123456789012/env.

        • VALUE_SHORT_NAME con il nome abbreviato del valore del tag. Ad esempio, prod.

      • "resource.matchTagId('KEY_ID', 'VALUE_ID')"

        Sostituisci quanto segue:

        • KEY_ID con l'ID permanente della chiave del tag. Ad esempio, tagKeys/123456789012.

        • VALUE_ID con l'ID permanente del valore del tag. Ad esempio, tagValues/567890123456.

      1. Puoi utilizzare l'editor delle condizioni per applicare l'operatore logico !. Ad esempio, la query !resource.matchTag('ORGANIZATION_ID/location', 'us-west1') applicherebbe il vincolo dei criteri dell'organizzazione a qualsiasi risorsa che non abbia il tag us-west1.
  9. Per completare e applicare la policy dell'organizzazione, fai clic su Salva.

gcloud

Per impostare la policy dell'organizzazione, crea un file YAML per archiviarla:

name: RESOURCE_TYPE/RESOURCE_ID/policies/gcp.disableSerialPortAccess
spec:
  rules:
  - condition:
      expression: "resource.matchTag('ORGANIZATION_ID/disableSerialAccess', 'yes')"
    enforce: true
  - enforce: false

Puoi abbinare un intero tag alla condizione utilizzando l'operatore resource.matchTag con il nome con spazio dei nomi del tag.

Per trovare una corrispondenza solo con la chiave del tag, utilizza l'operatore resource.hasTagKey con il nome con spazio dei nomi della chiave del tag. Per trovare una corrispondenza con qualsiasi valore di tag per una determinata chiave di tag, utilizza l'operatore resource.hasTagKeyID con l'ID chiave di tag.

Esegui il comando set-policy:

gcloud org-policies set-policy POLICY_PATH

Sostituisci quanto segue:

  • POLICY_PATH: il percorso completo del file YAML della policy dell'organizzazione

  • RESOURCE_TYPE: organizations, folders o projects

  • RESOURCE_ID: l'ID organizzazione, l'ID cartella, l'ID progetto o il numero di progetto

  • ORGANIZATION_ID: l'organizzazione principale della tua chiave tag

Per questa policy dell'organizzazione, la risorsa e tutte le relative risorse secondarie hanno il vincolo gestito legacy gcp.disableSerialPortAccess applicato. Tutte le risorse con il tag disableSerialAccess: yes sono negate dalla policy dell'organizzazione. Qualsiasi risorsa che non ha il tag disableSerialAccess: yes non ha il vincolo gestito legacy applicato.

Aggiungere regole alla policy dell'organizzazione in modo condizionale

Puoi utilizzare i tag per aggiungere in modo condizionale regole di vincolo alle risorse in base ai tag collegati. Puoi aggiungere più condizioni all'interno della stessa policy dell'organizzazione, il che ti consente di controllare in modo granulare le risorse a cui vuoi applicare la policy dell'organizzazione.

Common Expression Language, o CEL, è il linguaggio delle espressioni utilizzato per specificare le espressioni condizionali. Un'espressione condizionale è costituita da una o più istruzioni unite utilizzando operatori logici (&&, || o !). Per ulteriori informazioni, consulta la specifica CEL e la relativa definizione del linguaggio.

Valuta la possibilità di utilizzare una policy dell'organizzazione per limitare le località in cui è possibile creare risorse in base ai tag applicati a queste risorse. Per farlo, crea una policy dell'organizzazione che applichi il vincolo gestito legacy gcp.resourceLocations e utilizza le condizioni per limitare l'applicazione solo a determinate risorse.

Inizia creando un file temporaneo, /tmp/policy.yaml, che contenga le norme della tua organizzazione:

name: organizations/ORGANIZATION_ID/policies/gcp.resourceLocations
spec:
  rules:
  - condition:
      expression: "resource.matchTag('ORGANIZATION_ID/location', 'us-east')"
    values:
      allowedValues:
      - in:us-east1-locations
  - condition:
      expression: "resource.matchTag('ORGANIZATION_ID/location', 'us-west')"
    values:
      allowedValues:
      - in:us-west1-locations
  - values:
      deniedValues:
      - in:asia-south1-locations

Sostituisci ORGANIZATION_ID con l'organizzazione padre della chiave del tag.

In questo esempio, qualsiasi risorsa a cui è associato il tag location: us-east sarà limitata alle località all'interno del gruppo di valori us-east1-locations. Qualsiasi risorsa a cui è associato il tag location: us-west sarà limitata alle località all'interno del gruppo di valori us-west1-locations. Tutte le risorse dell'organizzazione verranno bloccate dalle località all'interno del gruppo di valori asia-south1-locations.

Quindi, imposta la policy utilizzando il comando set-policy:

gcloud org-policies set-policy /tmp/policy.yaml

Limitazione delle risorse senza tag

Puoi utilizzare i tag e le policy dell'organizzazione condizionali per limitare le risorse che non utilizzano un tag specifico. Se imposti una policy dell'organizzazione su una risorsa che limita i servizi e la rendi condizionale alla presenza di un tag, non è possibile utilizzare le risorse secondarie derivate da quella risorsa a meno che non siano state taggate. In questo modo, le risorse devono essere configurate in base al tuo piano di governance prima di poter essere utilizzate.

Per limitare le risorse di organizzazione, cartella o progetto senza tag, puoi utilizzare l'operatore logico ! in una query condizionale durante la creazione della policy dell'organizzazione.

Ad esempio, per consentire l'utilizzo di sqladmin.googleapis.com solo nei progetti che hanno il tag sqladmin=enabled, puoi creare un criterio dell'organizzazione che nega sqladmin.googleapis.com nei progetti che non hanno il tag sqladmin=enabled.

  1. Crea un tag che identifichi se alle risorse è stata applicata una governance adeguata. Ad esempio, puoi creare un tag con la chiave sqlAdmin e il valore enabled per indicare che questa risorsa deve consentire l'utilizzo dell'API Cloud SQL Admin. Ad esempio:

    Creazione di una chiave e di un valore tag

  2. Fai clic sul nome del tag appena creato. Nei passaggi successivi, per creare una condizione, ti servirà il nome con spazio dei nomi della chiave del tag, elencato in Percorso chiave del tag.

  3. Crea un criterio dell'organizzazione Limita l'utilizzo del servizio di risorse a livello di risorsa dell'organizzazione per negare l'accesso all'API Cloud SQL Admin. Ad esempio:

    Creazione di un criterio dell'organizzazione per limitare le risorse

  4. Aggiungi una condizione alla policy dell'organizzazione precedente, specificando che la policy viene applicata se il tag di governance non è presente. L'operatore NOT logico non è supportato dal generatore di condizioni, pertanto questa condizione deve essere creata nell'editor condizioni. Ad esempio:

    Creazione di una policy dell'organizzazione condizionale

    !resource.matchTag("012345678901/sqlAdmin", "enabled")

Ora, il tag sqlAdmin=enabled deve essere collegato a un progetto o ereditato da un progetto, prima che gli sviluppatori possano utilizzare l'API Cloud SQL Admin con quel progetto.

Applicazione di tag obbligatori alle risorse

Puoi applicare tag obbligatori alle risorse utilizzando una policy dell'organizzazione personalizzata. Quando applichi i tag obbligatori, puoi creare solo risorse che rispettano le norme di tagging della tua organizzazione, ovvero le risorse sono associate ai valori dei tag per le chiavi dei tag obbligatori specificate nelle norme. Per saperne di più, consulta Configura un vincolo personalizzato per applicare i tag.

Ereditarietà delle policy dell'organizzazione

I vincoli con regole di elenco attivate utilizzando i tag vengono uniti alla policy dell'organizzazione esistente, in base alle normali regole di ereditarietà. Queste regole condizionali si applicano solo se la condizione è vera.

I vincoli con regole booleane attivati utilizzando i tag sostituiscono i criteri dell'organizzazione esistenti. Inoltre, poiché le regole booleane hanno solo due stati, vero o falso, tutte le istruzioni condizionali devono essere l'opposto dell'istruzione non condizionale per evitare che più tag entrino in conflitto tra loro.

Ad esempio, considera una policy dell'organizzazione che applica il vincolo gestito legacy disableSerialPortAccess. Il valore incondizionato, che è il valore utilizzato se nessuna condizione lo sostituisce, è true. Pertanto, qualsiasi altra istruzione condizionale per questa norma deve essere impostata su false per evitare conflitti.

Passaggi successivi

Per saperne di più su come utilizzare i tag, consulta la pagina Creazione e gestione dei tag.

Per saperne di più su come creare e gestire i vincoli delle policy dell'organizzazione, consulta Utilizzo dei vincoli.