Tag e accesso condizionale

In questa pagina viene descritto come utilizzare i tag con Identity and Access Management (IAM) per controllare l'accesso alle tue risorse Google Cloud.

Per scoprire di più sui tag, consulta la Panoramica dei tag.

Panoramica dei tag

Un tag è una coppia chiave-valore collegata a una risorsa Google Cloud. Puoi concedere ruoli IAM in modo condizionale o negare in modo condizionale le autorizzazioni IAM a seconda che una risorsa abbia un tag specifico.

Le risorse ereditano i valori tag dall'organizzazione principale, dalle cartelle e dal progetto. Di conseguenza, puoi utilizzare i tag per gestire l'accesso a qualsiasi risorsa Google Cloud.

Di seguito sono riportati alcuni casi d'uso comuni per la gestione dell'accesso con i tag:

  • Ambienti di sviluppo, gestione temporanea e produzione. Ad esempio, potresti aggiungere i tag environment: dev all'ambiente di sviluppo e environment: prod all'ambiente di produzione.
  • Tipi di componenti. Ad esempio, potresti aggiungere i tag component: frontend alle risorse front-end e component: batch alle risorse per l'elaborazione batch.
  • Nomi dei progetti. Ad esempio, se il tuo team sta lavorando a un progetto con il nome in codice Atlas, potresti aggiungere il tag project: atlas alle risorse di sviluppo del team.

Definizioni e identificatori dei tag

Prima di collegare i tag alle risorse, devi definire la chiave del tag e i valori consentiti dal tag. Puoi creare queste definizioni a livello di organizzazione o di progetto. Puoi utilizzare Resource Manager per gestire le definizioni dei tag. Per scoprire di più, consulta Creazione e definizione di un nuovo tag.

Ogni chiave e valore tag hanno alcuni identificatori diversi:

  • Un ID permanente, univoco a livello globale e non può mai essere riutilizzato. Ad esempio, una chiave tag potrebbe avere l'ID permanente tagKeys/123456789012 e un valore tag potrebbe avere l'ID permanente tagValues/567890123456.
  • Un nome breve. Il nome breve per ogni chiave deve essere univoco all'interno della tua organizzazione e il nome breve di ogni valore deve essere univoco per la chiave associata. Ad esempio, una chiave tag potrebbe avere il nome breve env e un valore tag potrebbe avere il nome breve prod.
  • Un nome con spazio dei nomi, che aggiunge l'ID numerico della tua organizzazione al nome breve di una chiave tag. Ad esempio, una chiave tag potrebbe avere il nome con spazio dei nomi 123456789012/env. Scopri come ottenere l'ID organizzazione.

Come spiegato in questa pagina, dopo aver collegato i tag a una risorsa, puoi scrivere condizioni per concedere l'accesso in base ai tag. Per scrivere una condizione, devi scegliere il tipo di identificatore da utilizzare nella condizione. Segui queste linee guida per scegliere tra le opzioni:

  • Per fare esperimenti con i tag, ti consigliamo di utilizzare il nome con spazio dei nomi (per le chiavi) e il nome breve (per i valori). Questi identificatori sono più facili da capire e ricordare, soprattutto quando inizi.
  • Se gestisci la configurazione in modo dichiarativo,utilizzando uno strumento come Terraform, valuta la possibilità di utilizzare il nome con spazio dei nomi (per le chiavi) e il nome breve (per i valori). Puoi riutilizzare questi identificatori nel tempo, il che significa che uno strumento dichiarativo può eliminarli e ricrearli e le tue condizioni continueranno a funzionare.

    Questo approccio comporta un compromesso: supponi di eliminare una chiave o un valore tag e poi di creare una nuova chiave o valore con lo stesso nome, ma un significato diverso. Se la condizione fa riferimento al nome con spazio dei nomi o al nome breve, la condizione continuerà a essere applicata alla nuova chiave o al nuovo valore.

    In alcuni casi, questo comportamento potrebbe causare alle entità un accesso che non avevi previsto.

  • Per ridurre al minimo i rischi, valuta l'utilizzo di ID permanenti, che non possono mai essere riutilizzati.

    Il motivo per cui gli ID permanenti aiutano a ridurre al minimo i rischi: supponi di eliminare una chiave o un valore tag e di creare una nuova chiave o valore con lo stesso nome, ma con un significato diverso. Se la condizione fa riferimento all'ID permanente, la condizione non si applica alla nuova chiave o al nuovo valore. Di conseguenza, è meno probabile che le entità abbiano un accesso che non intendevi avere.

    Uno svantaggio è che se elimini e ricrei chiavi e valori e vuoi preservare l'accesso delle entità, devi anche aggiornare i criteri di autorizzazione in modo che facciano riferimento ai nuovi ID permanenti.

Accesso alle risorse con tag

Puoi utilizzare i tag con condizioni IAM per concedere un ruolo in modo condizionale, a seconda dei tag associati o ereditati da una risorsa. Se una condizione restituisce true, l'accesso viene concesso, altrimenti l'accesso non viene concesso. Per saperne di più, consulta la panoramica delle condizioni IAM.

Le seguenti sezioni mostrano esempi di espressioni di condizione che controllano i tag su una risorsa. La condizione chiama funzioni diverse a seconda che controlli l'ID permanente o il nome breve. Per scoprire di più su queste funzioni, consulta Tag di risorse.

Condizioni che utilizzano ID permanenti

Questa condizione concede un ruolo sulle risorse con il tag tagKeys/123456789012: tagValues/567890123456:

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

Questa condizione concede un ruolo alle risorse che hanno qualsiasi tag con la chiave tagKeys/123456789012, indipendentemente dal suo valore:

resource.hasTagKeyId('tagKeys/123456789012')

Questa condizione concede un ruolo nelle risorse che hanno sia il tag tagKeys/123456789012: tagValues/567890123456 che qualsiasi tag che utilizzi la chiave tagKeys/987654321098:

resource.matchTagId('tagKeys/123456789012', 'tagValues/567890123456') &&
    resource.hasTagKeyId('tagKeys/987654321098')

Condizioni che utilizzano nomi con spazio dei nomi e nomi brevi

Questa condizione concede un ruolo sulle risorse con il tag env: prod, che indica che la risorsa si trova in un ambiente di produzione:

resource.matchTag('123456789012/env', 'prod')

Questa condizione concede un ruolo alle risorse che hanno qualsiasi tag con la chiave env, indipendentemente dal suo valore:

resource.hasTagKey('123456789012/env')

Questa condizione concede un ruolo alle risorse che hanno sia il tag env: prod sia qualsiasi tag che utilizza la chiave project:

resource.matchTag('123456789012/env', 'prod') &&
    resource.hasTagKey('123456789012/project')

Passaggi successivi