Etiquetas y acceso condicional

En esta página, se describe cómo usar etiquetas con la administración de identidades y accesos (IAM) para ayudarte a controlar el acceso a tus recursos de Google Cloud.

Para obtener más información sobre las etiquetas, consulta Descripción general de las etiquetas.

Descripción general de las etiquetas

Una etiqueta es un par clave-valor que se adjunta a un recurso de Google Cloud. Puedes otorgar roles de IAM de manera condicional o denegar roles de IAM de forma condicional en función de si un recurso tiene una etiqueta específica.

Otros recursos heredan valores de etiquetas de su organización superior, carpetas y proyecto. Como resultado, puedes usar etiquetas para administrar el acceso a cualquier recurso de Google Cloud.

Estos son algunos casos de uso comunes para administrar el acceso con etiquetas:

  • Entorno de desarrollo, etapa de pruebas y producción. Por ejemplo, puedes agregar las etiquetas environment: dev a tu entorno de desarrollo y environment: prod a tu entorno de producción.
  • Tipos de componentes. Por ejemplo, puedes agregar las etiquetas component: frontend a los recursos de frontend y component: batch a los recursos para el procesamiento por lotes.
  • Nombres de proyecto. Por ejemplo, si tu equipo trabaja en un proyecto con el nombre interno de Atlas, puedes agregar la etiqueta project: atlas a los recursos de desarrollo del equipo.

Identificadores y definiciones de etiquetas

Antes de adjuntar etiquetas a los recursos, debes definir la clave de la etiqueta y los valores que permite ella. Puedes crear estas definiciones a nivel de la organización o del proyecto. Usa Resource Manager para administrar las definiciones de etiquetas. Para obtener más información, consulta Crea y define una etiqueta nueva.

Cada clave y valor de etiqueta tiene algunos identificadores diferentes:

  • Un ID permanente, que es único de forma global y no se puede reutilizar. Por ejemplo, una clave de etiqueta podría tener el ID permanente tagKeys/123456789012 y un valor de etiqueta podría tener el ID permanente tagValues/567890123456.
  • Un nombre corto. El nombre corto para cada clave debe ser único dentro de la organización, y el nombre corto de cada valor debe ser único para su clave asociada. Por ejemplo, una clave de etiqueta podría tener el nombre corto env y un valor de etiqueta podría tener el nombre corto prod.
  • Un nombre con espacio de nombres, que agrega el ID numérico de tu organización al nombre corto de una clave de etiqueta. Por ejemplo, una clave de etiqueta podría tener el nombre con espacio de nombres 123456789012/env. Obtén más información sobre cómo obtener el ID de tu organización.

Como se explica en esta página, después de adjuntar etiquetas a un recurso, puedes escribir condiciones para otorgar acceso según las etiquetas. Para escribir una condición, debes elegir qué tipo de identificador usar en la condición. Sigue estos lineamientos para elegirlos:

  • Para experimentar con etiquetas, considera usar el nombre con espacio de nombres (para claves) y el nombre corto (para los valores). Estos identificadores son más fáciles de comprender y recordar, especialmente cuando comienzas.
  • Si administras tu configuración de forma declarativa. mediante una herramienta como Terraform, considera usar el nombre de espacio de nombres (para claves) y el nombre corto (para los valores). Puedes volver a usar estos identificadores a lo largo del tiempo, lo que significa que una herramienta declarativa puede borrarlos y volver a crearlos, y tus condiciones continuarán funcionando.

    Este enfoque viene con una compensación: supongamos que borras una clave o un valor de etiqueta y, luego, creas una clave o valor nuevo con el mismo nombre, pero un significado diferente. Si tu condición se refiere al nombre con espacio de nombres o al nombre corto, entonces la condición se sigue aplicando a la clave o el valor nuevos.

    En algunos casos, este comportamiento puede hacer que las principales obtengan accesos que no quieres que tengan.

  • Para ayudar a minimizar el riesgo, considera usar ID permanentes, que no se pueden volver a utilizar.

    Esta es la razón por la que los ID permanentes ayudan a minimizar el riesgo: supongamos que borras una clave o valor de etiqueta y, luego, creas una clave o valor nuevo con el mismo nombre, pero un significado diferente. Si tu condición se refiere al ID permanente, entonces la condición no se aplica a la clave o el valor nuevos. Por lo tanto, es menos probable que las principales obtengan accesos que no quieres que tengan.

    Una desventaja es que si borras y vuelves a crear claves y valores, y deseas conservar el acceso de las principales, también debes actualizar las políticas de permisos para hacer referencia a los nuevos ID permanentes.

Acceso a recursos etiquetados

Puedes usar etiquetas con condiciones de IAM para otorgar una función de forma condicional, según las etiquetas que se adjuntan a un recurso o que el recurso hereda. Si una condición se evalúa como true, se otorga acceso, de lo contrario, no se otorga el acceso. Para obtener más información, consulta la descripción general de las condiciones de IAM.

En las siguientes secciones, se muestran ejemplos de expresiones de condición que verifican las etiquetas de un recurso. La condición llama a diferentes funciones según si verifica el ID permanente o el nombre corto. Para obtener más información sobre estas funciones, consulta Etiquetas de recursos.

Condiciones que usan ID permanentes

Esta condición otorga una función en los recursos con la etiqueta tagKeys/123456789012: tagValues/567890123456:

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

Esta condición otorga una función a los recursos que tienen cualquier etiqueta con la clave tagKeys/123456789012, sin importar su valor:

resource.hasTagKeyId('tagKeys/123456789012')

Esta condición otorga una función en los recursos que tienen la etiqueta tagKeys/123456789012: tagValues/567890123456 y cualquier etiqueta que use la clave tagKeys/987654321098:

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

Condiciones que usan nombres con espacio de nombres y nombres cortos

Esta condición otorga una función en los recursos con la etiqueta env: prod, lo que indica que el recurso está en un entorno de producción:

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

Esta condición otorga una función a los recursos que tienen cualquier etiqueta con la clave env, sin importar su valor:

resource.hasTagKey('123456789012/env')

Esta condición otorga una función en los recursos que tienen la etiqueta env: prod y cualquier etiqueta que use la clave project:

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

¿Qué sigue?