Tag e accesso condizionale

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

Per scoprire 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 in base al presenza o meno di un tag specifico in una risorsa.

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 Google Cloud risorsa.

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 collettiva.
  • 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 associare i tag alle risorse, devi definire la chiave per il 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ù, consulta la sezione Creare e definire un nuovo tag.

Ogni chiave e valore del tag ha diversi identificatori:

  • Un ID permanente, che è univoco a livello globale e non può mai essere riutilizzato. 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 il nome breve prod.
  • Un nome con spazio dei nomi, che aggiunge l'ID numerico dell'organizzazione o del progetto al nome breve di una chiave tag. Ad esempio, una chiave del tag creata per un'organizzazione potrebbe avere il nome nel nome nello spazio dei nomi 123456789012/env. Per scoprire come ottenere l'ID della tua organizzazione, consulta 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 Identificazione dei progetti.

Come spiegato in questa pagina, dopo aver associato 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 due 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 comprendere e ricordare, soprattutto all'inizio.
  • Se gestisci la configurazione in modo dichiarativo,utilizzando uno strumento come Terraform, ti consigliamo 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 del tag, poi crei una nuova chiave o un nuovo valore con lo stesso nome, ma con un significato diverso. Se la condizione fa riferimento al nome con spazio dei nomi o al nome breve, la condizione continua a essere applicata alla nuova chiave o al nuovo valore.

    In alcuni casi, questo comportamento potrebbe causare l'accesso dei principali a funzionalità che non avevi inteso concedere.

  • Per ridurre al minimo il rischio, ti consigliamo di utilizzare ID permanenti, che non possono mai essere riutilizzati.

    Ecco perché gli ID permanenti contribuiscono a ridurre al minimo i rischi: supponiamo che tu elimini una chiave o un valore del tag e poi crei una nuova chiave o un nuovo valore con lo stesso nome, ma con un significato diverso. Se la condizione fa riferimento all'ID permanente, non si applica alla nuova chiave o al nuovo valore. Di conseguenza, è meno probabile che i principali accedano a risorse a cui non avevi previsto che potessero accedere.

    Uno svantaggio è che, se elimini e ricrei chiavi e valori e vuoi mantenere l'accesso dei principali, devi anche aggiornare i criteri 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 condizionetamente, a seconda dei tag associati o ereditati da una risorsa. Se una condizione ha valore true, l'accesso viene concesso; altrimenti, l'accesso non viene concesso. Per scoprire di più, consulta la panoramica delle condizioni IAM.

Le sezioni seguenti mostrano esempi di espressioni di condizione che controllano i tag di una risorsa. La condizione chiama funzioni diverse a seconda che verifichi 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 alle risorse con il tag tagKeys/123456789012: tagValues/567890123456:

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

Questa condizione assegna un ruolo alle risorse che hanno un tag con la chiavetagKeys/123456789012, indipendentemente dal relativo valore:

resource.hasTagKeyId('tagKeys/123456789012')

Questa condizione assegna 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 e nomi brevi

Questa condizione assegna un ruolo alle risorse con il tag env: prod, indicando che la risorsa si trova in un ambiente di produzione:

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

Questa condizione assegna un ruolo alle risorse che hanno un tag con la chiave env, indipendentemente dal relativo valore:

resource.hasTagKey('123456789012/env')

Questa condizione assegna 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