Tag e accesso condizionale

Questa pagina descrive come utilizzare i tag con Identity and Access Management (IAM) per controllare l'accesso alle risorse Google Cloud .

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

Panoramica dei tag

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

Le risorse ereditano i valori dei tag dall'organizzazione, dalle cartelle e dal progetto principali. Di conseguenza, puoi utilizzare i tag per gestire l'accesso a qualsiasi risorsaGoogle 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, puoi aggiungere i tag component: frontend alle risorse di frontend 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, puoi 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, nonché i valori consentiti dal tag. Puoi creare queste definizioni a livello di organizzazione o progetto. Utilizzi Resource Manager per gestire le definizioni dei tag. Per scoprire di più, vedi Creare e definire un nuovo tag.

Ogni chiave e valore del tag ha diversi identificatori:

  • Un ID permanente, univoco a livello globale e mai riutilizzabile. Ad esempio, una chiave del tag potrebbe avere l'ID permanente tagKeys/123456789012 e un valore del tag potrebbe avere l'ID permanente tagValues/567890123456.
  • Un nome breve. Il nome breve di ogni chiave deve essere univoco all'interno del progetto o dell'organizzazione in cui è definita la chiave 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 o l'ID del progetto al nome breve di una chiave tag. Ad esempio, una chiave tag creata per un'organizzazione potrebbe avere il nome con spazio dei nomi 123456789012/env. Per scoprire come ottenere l'ID della tua organizzazione, vedi Ottenere l'ID risorsa dell'organizzazione. Una chiave tag creata per un progetto potrebbe avere il nome con spazio dei nomi myproject/env. Per scoprire come ottenere l'ID progetto, consulta la sezione Identificazione dei progetti.

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. Segui queste linee guida per scegliere tra le due opzioni:

  • Per sperimentare con i tag,valuta la possibilità di utilizzare il nome con spazio dei nomi (per le chiavi) e il nome breve (per i valori). Questi identificatori sono più facili da comprendere e memorizzare, soprattutto all'inizio.
  • 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: supponiamo che tu elimini una chiave o un valore tag, poi crei una nuova chiave o un nuovo valore con lo stesso nome, ma un significato diverso. Se la condizione si riferisce al nome con spazio dei nomi o al nome breve, la condizione continua ad applicarsi alla nuova chiave o al nuovo valore.

    In alcuni casi, questo comportamento potrebbe consentire alle entità di accedere a risorse a cui non volevi che accedessero.

  • Per ridurre al minimo il rischio,valuta la possibilità di utilizzare ID permanenti, che non possono mai essere riutilizzati.

    Ecco perché gli ID permanenti contribuiscono a ridurre al minimo il rischio: supponiamo che tu elimini una chiave o un valore del tag, quindi crei una nuova chiave o un nuovo valore con lo stesso nome, ma con un significato diverso. Se la condizione si riferisce all'ID permanente, la condizione non si applica alla nuova chiave o al nuovo valore. Di conseguenza, è meno probabile che le entità ottengano l'accesso che non volevi concedere.

    Uno svantaggio è che se elimini e ricrei chiavi e valori e vuoi mantenere l'accesso dei principal, devi anche aggiornare le policy di autorizzazione in modo che facciano riferimento ai nuovi ID permanenti.

Accesso alle risorse taggate

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

Alcune aree della console Google Cloud non riconoscono le associazioni di ruolo dei criteri di autorizzazione con condizioni basate su tag. Di conseguenza, se hai un ruolo con una condizione basata su tag, la console Google Cloud potrebbe impedirti erroneamente di eseguire determinate azioni. Se riscontri questo problema, utilizza un metodo alternativo, ad esempio gcloud CLI, per eseguire l'azione.

Le sezioni seguenti mostrano esempi di espressioni di condizione che controllano i tag di 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 delle 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 un tag con la chiave tagKeys/123456789012, indipendentemente dal suo valore:

resource.hasTagKeyId('tagKeys/123456789012')

Questa condizione concede un ruolo alle risorse che hanno sia il tag tagKeys/123456789012: tagValues/567890123456 sia qualsiasi tag che utilizza 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, indicando che la risorsa si trova in un ambiente di produzione:

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

Questa condizione concede un ruolo alle risorse che hanno un 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