Configurar una política de organización con etiquetas

Las etiquetas permiten aplicar o denegar políticas de forma condicional en función de si un recurso tiene una etiqueta específica. Puedes usar etiquetas y la aplicación condicional de políticas de organización para controlar de forma centralizada los recursos de tu jerarquía.

Antes de empezar

Para obtener más información sobre qué son las etiquetas y cómo funcionan, consulta el artículo Descripción general de las etiquetas.

Para obtener instrucciones detalladas sobre cómo usar las etiquetas, consulta el artículo Crear y gestionar etiquetas.

Roles obligatorios

Para obtener los permisos que necesitas para gestionar las políticas de la organización, pide a tu administrador que te conceda el rol de gestión de identidades y accesos Administrador de políticas de la organización (roles/orgpolicy.policyAdmin) en la organización. Para obtener más información sobre cómo conceder roles, consulta el artículo Gestionar acceso a proyectos, carpetas y organizaciones.

También puedes conseguir los permisos necesarios a través de roles personalizados u otros roles predefinidos.

Puedes delegar la administración de las políticas de organización añadiendo condiciones de IAM a la vinculación del rol de administrador de políticas de organización. Para controlar los recursos en los que una entidad puede gestionar las políticas de la organización, puedes hacer que la vinculación de roles dependa de una etiqueta concreta. Para obtener más información, consulta Usar restricciones.

Configurar una política de organización con etiquetas

Para usar etiquetas y determinar dónde debe aplicarse una política de la organización, debes especificar una condición en el archivo YAML de la política de la organización. Puede definir la condición para que coincida con un par clave-valor de etiqueta concreto, lo que requiere que se defina un valor de etiqueta concreto para que se aplique la política de organización.

También puede definir la condición para que coincida con una clave de etiqueta. De esta forma, puede habilitar o inhabilitar la aplicación de la medida en todos los recursos con esa clave de etiqueta, independientemente del valor de etiqueta que se haya adjuntado.

La mayoría de las políticas de las organizaciones se evalúan y se aplican cuando se crea o se actualiza un recurso. Las etiquetas obligatorias se pueden usar para controlar los recursos a medida que se crean.

Ejemplo de regla de lista

En el siguiente ejemplo se muestra cómo definir una política de organización que aplique la restricción gestionada antigua gcp.resourceLocations. Esta política de organización usa valores condicionales e incondicionales, definidos en el mismo archivo de política.

Consola

Para definir la política de organización, haz lo siguiente:

  1. En la Google Cloud consola, ve a la página Políticas de la organización.

    Ir a Políticas de la organización

  2. En el selector de proyectos, elige el proyecto para el que quieras definir la política de organización.

  3. En la página Políticas de organización, selecciona una restricción de la lista. Se mostrará la página Detalles de la política de esa restricción.

  4. Para actualizar la política de la organización de este recurso, haz clic en Gestionar política.

  5. En la página Editar política, selecciona Anular política del recurso superior.

  6. En Implementación de la política, selecciona una opción:

    • Para combinar y evaluar las políticas de tu organización, selecciona Combinar con el elemento superior. Para obtener más información sobre la herencia y la jerarquía de recursos, consulta Información sobre la evaluación jerárquica.

    • Para anular las políticas heredadas de un recurso superior, seleccione Reemplazar.

  7. Haz clic en Añadir regla.

  8. En Valores de la política, seleccione si esta política de organización debe permitir todos los valores, denegar todos los valores o especificar un conjunto de valores personalizado.

  9. Si quieres que la política de la organización dependa de una etiqueta, haz clic en Añadir condición.

    1. En el campo Título, introduce un nombre para la condición.

    2. En el campo Descripción, describe la condición. La descripción proporciona contexto sobre las etiquetas obligatorias y cómo afectan a los recursos.

    3. Puede usar el Creador de condiciones para crear una condición que requiera una etiqueta concreta para que la restricción surta efecto.

      1. En el cuadro Tipo de condición, selecciona Etiqueta.

      2. Seleccione el operador de la condición.

        • Para que coincida una etiqueta completa, utilice el operador tiene valor con el nombre de la etiqueta que incluye el espacio de nombres o el operador tiene ID de valor con los IDs de clave y valor de la etiqueta.

        • Para que solo se tenga en cuenta la clave de la etiqueta, usa el operador tiene clave con el nombre de la clave de la etiqueta que incluye el espacio de nombres o el operador tiene ID de clave con el ID de la clave de la etiqueta.

      3. Puedes crear varias condiciones haciendo clic en Añadir. Si añades otra condición, puedes definir la lógica condicional para que se cumplan todas activando Y. Puedes definir la lógica condicional para que solo se cumpla una de las condiciones activando O.

      4. Para eliminar una expresión, haz clic en la X grande situada a la derecha de los campos de condición.

      5. Cuando haya terminado de editar las condiciones, haga clic en Guardar.

    4. El editor de condiciones se puede usar para crear una expresión condicional de forma programática. También se mostrará una representación programática de tu conjunto de condiciones actual.

      La expresión condicional debe incluir entre 1 y 10 subexpresiones, unidas por los operadores || o &&. Cada subexpresión debe ser una de las siguientes funciones:

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

        Haz los cambios siguientes:

        • KEY_NAME con el nombre de espacio de nombres de la clave de etiqueta. Por ejemplo, 123456789012/env.

        • VALUE_SHORT_NAME con el nombre corto del valor de la etiqueta. Por ejemplo, prod.

        Por ejemplo: resource.matchTag('123456789012/environment, 'prod')

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

        Haz los cambios siguientes:

        • KEY_ID con el ID permanente de la clave de etiqueta. Por ejemplo, tagKeys/123456789012.

        • VALUE_ID con el ID permanente del valor de la etiqueta. Por ejemplo, tagValues/567890123456.

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

      • "resource.hasTagKey('KEY_NAME')"

        Sustituye KEY_NAME por el nombre con espacio de nombres de la clave de la etiqueta. Por ejemplo, 123456789012/env.

        Por ejemplo: resource.matchTag('123456789012/environment, 'prod')

      • "resource.hasTagKeyId('KEY_ID')"

        Sustituye KEY_ID por el ID permanente de la clave de etiqueta. Por ejemplo, tagKeys/123456789012.

        Por ejemplo: resource.matchTagId('tagKeys/123456789012')

      1. Puedes usar el editor de condiciones para aplicar el operador lógico !. Por ejemplo, la consulta !resource.matchTag('ORGANIZATION_ID/location', 'us-west1') aplicaría la restricción de la política de la organización a cualquier recurso que no tenga la etiqueta us-west1.
  10. Para aplicar la política, haz clic en Definir política.

gcloud

Para definir la política de organización, crea un archivo YAML para almacenarla:

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

Puedes hacer coincidir una etiqueta completa con la condición usando el operador resource.matchTag con el nombre de la etiqueta que incluye el espacio de nombres.

Para que solo se tenga en cuenta la clave de la etiqueta, usa el operador resource.hasTagKey con el nombre de la clave de la etiqueta que incluye el espacio de nombres. Para que coincida con cualquier valor de etiqueta de una clave de etiqueta determinada, utilice el operador resource.hasTagKeyID con el ID de la clave de etiqueta.

Ejecuta el comando set-policy:

gcloud org-policies set-policy POLICY_PATH

Haz los cambios siguientes:

  • POLICY_PATH: la ruta completa al archivo YAML de la política de tu organización

  • RESOURCE_TYPE: organizations, folders o projects

  • RESOURCE_ID: el ID de tu organización, el ID de la carpeta, el ID del proyecto o el número del proyecto, según el tipo de recurso especificado en RESOURCE_TYPE

  • ORGANIZATION_ID: la organización principal de tu clave de etiqueta

En esta política de la organización, el recurso y todos sus recursos secundarios tienen la restricción gestionada antigua gcp.resourceLocations aplicada, con allowedValues de us-east1-locations únicamente. Cualquiera de estos recursos que tenga la etiqueta location: us-west1 tendrá aplicada la restricción gestionada antigua gcp.resourceLocations, con allowedValues de us-east1-locations y us-west1-locations.

De esta forma, se pueden aplicar conjuntos de valores condicionales e incondicionales a una restricción en una sola política de la organización.

Ejemplo de regla booleana

En el siguiente ejemplo se muestra cómo definir una política de organización que aplique la restricción gestionada antigua compute.disableSerialPortAccess. Esta política de organización especifica que todos los puertos serie son accesibles para los recursos, pero usa una condición para restringir el acceso a los puertos serie solo a los recursos que tengan la etiqueta correspondiente.

Consola

Para definir la política de organización, haz lo siguiente:

  1. En la Google Cloud consola, ve a la página Políticas de la organización.

    Ir a Políticas de la organización

  2. En el selector de proyectos, selecciona el proyecto para el que quieras definir la política de la organización.

  3. Selecciona una restricción de la lista de la página Políticas de organización. Debería aparecer la página Detalles de la política de esa restricción.

  4. Para actualizar la política de la organización de este recurso, haz clic en Gestionar política.

  5. En la página Editar política, selecciona Anular política del recurso superior.

  6. Haz clic en Añadir regla.

  7. En Cumplimiento, selecciona si quieres activar o desactivar el cumplimiento de esta política de la organización.

  8. Si quieres que la política de la organización dependa de una etiqueta, haz clic en Añadir condición. Ten en cuenta que, si añades una regla condicional a una política de la organización, solo debes añadir una regla incondicional o la política no se podrá guardar.

    1. En el campo Título, introduce un nombre para la condición.

    2. En el campo Descripción, describe la condición. La descripción proporciona contexto sobre las etiquetas obligatorias y cómo afectan a los recursos.

    3. Puede usar el Creador de condiciones para crear una condición que requiera una etiqueta concreta para que la restricción surta efecto.

      1. En el cuadro Tipo de condición, selecciona Etiqueta.

      2. Seleccione el operador de la condición.

        • Para que coincida una etiqueta completa, utilice el operador tiene valor con el nombre de la etiqueta que incluye el espacio de nombres o el operador tiene ID de valor con los IDs de clave y valor de la etiqueta.

        • Para que solo se tenga en cuenta la clave de la etiqueta, usa el operador tiene clave con el nombre de la clave de la etiqueta que incluye el espacio de nombres o el operador tiene ID de clave con el ID de la clave de la etiqueta.

      3. Puedes crear varias condiciones haciendo clic en Añadir. Si añades otra condición, puedes definir la lógica condicional para que se cumplan todas activando Y. Puedes definir la lógica condicional para que solo se cumpla una de las condiciones activando O.

      4. Para eliminar una expresión, haz clic en la X grande situada a la derecha de los campos de condición.

      5. Cuando haya terminado de editar las condiciones, haga clic en Guardar.

      6. Una política de la organización con una condición aplicada solo debe tener una regla incondicional. Haz clic en Añadir regla y define si la aplicación de esta política de la organización debe estar activada o desactivada de forma predeterminada.

    4. El editor de condiciones se puede usar para crear una expresión condicional de forma programática. También se mostrará una representación programática de tu conjunto de condiciones actual.

      La expresión condicional debe incluir entre 1 y 10 subexpresiones, unidas por los operadores || o &&. Cada subexpresión debe tener una de las siguientes formas:

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

        Haz los cambios siguientes:

        • KEY_NAME con el nombre de espacio de nombres de la clave de etiqueta. Por ejemplo, 123456789012/env.

        • VALUE_SHORT_NAME con el nombre corto del valor de la etiqueta. Por ejemplo, prod.

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

        Haz los cambios siguientes:

        • KEY_ID con el ID permanente de la clave de etiqueta. Por ejemplo, tagKeys/123456789012.

        • VALUE_ID con el ID permanente del valor de la etiqueta. Por ejemplo, tagValues/567890123456.

      1. Puedes usar el editor de condiciones para aplicar el operador lógico !. Por ejemplo, la consulta !resource.matchTag('ORGANIZATION_ID/location', 'us-west1') aplicaría la restricción de la política de la organización a cualquier recurso que no tenga la etiqueta us-west1.
  9. Para terminar y aplicar la política de la organización, haz clic en Guardar.

gcloud

Para definir la política de organización, crea un archivo YAML para almacenarla:

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

Puedes hacer coincidir una etiqueta completa con la condición usando el operador resource.matchTag con el nombre de la etiqueta que incluye el espacio de nombres.

Para que solo se tenga en cuenta la clave de la etiqueta, usa el operador resource.hasTagKey con el nombre de la clave de la etiqueta que incluye el espacio de nombres. Para que coincida con cualquier valor de etiqueta de una clave de etiqueta determinada, utilice el operador resource.hasTagKeyID con el ID de la clave de etiqueta.

Ejecuta el comando set-policy:

gcloud org-policies set-policy POLICY_PATH

Haz los cambios siguientes:

  • POLICY_PATH: la ruta completa al archivo YAML de la política de tu organización

  • RESOURCE_TYPE: organizations, folders o projects

  • RESOURCE_ID: tu ID de organización, ID de carpeta, ID de proyecto o número de proyecto

  • ORGANIZATION_ID: la organización principal de tu clave de etiqueta

En esta política de organización, el recurso y todos sus recursos secundarios tienen aplicada la gcp.disableSerialPortAccessrestricción gestionada antiguagcp.disableSerialPortAccess. La política de organización deniega el acceso a todos los recursos que tienen la etiqueta disableSerialAccess: yes. Los recursos que no tengan la etiqueta disableSerialAccess: yes no tendrán aplicada la restricción gestionada antigua.

Añadir reglas a una política de organización de forma condicional

Puede usar etiquetas para añadir reglas de restricción de forma condicional a los recursos en función de las etiquetas que tengan asignadas. Puedes añadir varias condiciones a la misma política de organización, lo que te permite controlar con precisión los recursos a los que quieres aplicar la política de organización.

El lenguaje de expresión común (CEL) es el lenguaje de expresiones que se usa para especificar expresiones condicionales. Una expresión condicional consta de una o varias instrucciones unidas mediante operadores lógicos (&&, || o !). Para obtener más información, consulta la especificación de CEL y su definición de lenguaje.

Puedes usar una política de organización para restringir las ubicaciones en las que se pueden crear recursos en función de las etiquetas que se les hayan aplicado. Para ello, crea una política de organización que aplique la restricción gestionada antigua gcp.resourceLocations y usa condiciones para limitar la aplicación solo a determinados recursos.

Empieza creando un archivo temporal, /tmp/policy.yaml, que contenga la política de tu organización:

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

Sustituye ORGANIZATION_ID por la organización superior de tu clave de etiqueta.

En este ejemplo, cualquier recurso que tenga la etiqueta location: us-east adjunta se restringirá a las ubicaciones del grupo de valores us-east1-locations. Cualquier recurso que tenga adjunta la etiqueta location: us-west se restringirá a las ubicaciones del grupo de valores us-west1-locations. Se bloqueará el acceso a todos los recursos de la organización desde las ubicaciones del grupo de valores asia-south1-locations.

A continuación, define la política con el comando set-policy:

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

Restringir recursos sin etiquetar

Puede usar etiquetas y políticas de organización condicionales para restringir cualquier recurso que no use una etiqueta concreta. Si defines una política de organización en un recurso que restringe los servicios y la condicionas a la presencia de una etiqueta, no se podrá usar ningún recurso secundario de ese recurso a menos que se haya etiquetado. De esta forma, los recursos se deben configurar de acuerdo con tu plan de gobernanza para poder usarlos.

Para restringir los recursos de una organización, una carpeta o un proyecto que no tengan etiquetas, puedes usar el operador lógico ! en una consulta condicional al crear tu política de organización.

Por ejemplo, para permitir el uso de sqladmin.googleapis.com solo en proyectos que tengan la etiqueta sqladmin=enabled, puedes crear una política de organización que deniegue sqladmin.googleapis.com en proyectos que no tengan la etiqueta sqladmin=enabled.

  1. Crea una etiqueta que identifique si los recursos se han gestionado correctamente. Por ejemplo, puedes crear una etiqueta con la clave sqlAdmin y el valor enabled para indicar que este recurso debe permitir el uso de la API Admin de Cloud SQL. Por ejemplo:

    Crear una clave y un valor de etiqueta

  2. Haz clic en el nombre de la etiqueta que acabas de crear. Necesitará el nombre con espacio de nombres de la clave de etiqueta, que se indica en Ruta de la clave de etiqueta, en los pasos siguientes para crear una condición.

  3. Crea una política de la organización Restringir el uso del servicio de recursos en el nivel de tu recurso de organización para denegar el acceso a la API Cloud SQL Admin. Por ejemplo:

    Crear una política de organización para restringir recursos

  4. Añade una condición a la política de organización anterior para especificar que la política se aplica si no está presente la etiqueta de gobernanza. El creador de condiciones no admite el operador lógico NOT, por lo que esta condición debe crearse en el editor de condiciones. Por ejemplo:

    Crear una política de organización condicional

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

Ahora, la etiqueta sqlAdmin=enabled debe estar asociada a un proyecto o heredarse de él para que tus desarrolladores puedan usar la API Admin de Cloud SQL con ese proyecto.

Aplicar etiquetas obligatorias en los recursos

Puedes aplicar etiquetas obligatorias a los recursos mediante una política de organización personalizada. Cuando aplicas etiquetas obligatorias, solo puedes crear recursos que cumplan las políticas de etiquetado de tu organización. Es decir, los recursos están vinculados a los valores de las claves de etiqueta obligatorias especificadas en la política. Para obtener más información, consulta Configurar una restricción personalizada para aplicar etiquetas.

Herencia de políticas de organización

Las restricciones con reglas de lista que se habilitan mediante etiquetas se combinan con la política de organización que ya exista, según las reglas normales de herencia. Estas reglas condicionales solo se aplican si la condición es verdadera.

Las restricciones con reglas booleanas que se habilitan mediante etiquetas anulan la política de organización que ya esté definida. Además, como las reglas booleanas solo tienen dos estados (verdadero o falso), todas las instrucciones condicionales deben ser lo contrario de la instrucción no condicional para evitar que varias etiquetas entren en conflicto entre sí.

Por ejemplo, supongamos que hay una política de organización que aplica la disableSerialPortAccessrestricción gestionada antigua. El valor incondicional, que es el valor que se usa si ninguna condición lo anula, es true. Por lo tanto, cualquier otra instrucción condicional de esta política debe tener el valor "false" para evitar conflictos.

Siguientes pasos

Para obtener más información sobre cómo usar las etiquetas, consulta la página Crear y gestionar etiquetas.

Para obtener más información sobre cómo crear y gestionar restricciones de políticas de la organización, consulta Usar restricciones.