Establece una política de la organización con etiquetas

Las etiquetas proporcionan una forma de permitir o rechazar políticas de manera 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 la organización para proporcionar un control centralizado de los recursos en tu jerarquía.

Antes de comenzar

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

Para obtener instrucciones detalladas sobre cómo usar etiquetas, consulta Crea y administra etiquetas.

Roles obligatorios

Si deseas obtener los permisos que necesitas para administrar las políticas de la organización, pídele a tu administrador que te otorgue el rol de IAM Administrador de políticas de la organización (roles/orgpolicy.policyAdmin) en la organización. Para obtener más información sobre cómo otorgar roles, consulta Administra el acceso a proyectos, carpetas y organizaciones.

También puedes obtener los permisos necesarios a través de roles personalizados o cualquier otro rol predefinido.

Puedes delegar la administración de las políticas de la organización agregando condiciones de IAM a la vinculación del rol de administrador de políticas de la organización. Para controlar los recursos en los que un principal puede administrar políticas de la organización, puedes hacer que la vinculación del rol dependa de una etiqueta en particular. Para obtener más información, consulta Usa restricciones.

Establece una política de la organización con etiquetas

Para usar etiquetas y determinar dónde debe entrar en vigencia una política de la organización, debes especificar una condición en el archivo YAML de la política de la organización. Puedes establecer la condición para que coincida con un par clave-valor de etiqueta en particular, lo que requiere que se establezca un valor de etiqueta específico para que se aplique la política de la organización.

También puedes establecer la condición para que coincida con una clave de etiqueta. Esto te permite habilitar o inhabilitar la aplicación de la política en todos los recursos con esa clave de etiqueta, independientemente del valor de etiqueta adjunto.

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

Ejemplo de regla de la lista

En el siguiente ejemplo, se muestra cómo establecer una política de la organización que aplique la restricción heredada administrada gcp.resourceLocations. Esta política de la organización usa valores condicionales y no condicionales, establecidos en el mismo archivo de política.

Console

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

  1. En la consola de Google Cloud , 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 deseas configurar la política de la organización.

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

  4. Si deseas actualizar la política de la organización para este recurso, haz clic en Administrar política.

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

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

    • Para combinar y evaluar las políticas de la organización, selecciona Combinar con superior. Para obtener más información sobre la jerarquía de herencia y recursos, consulta la página sobre cómo obtener información de la evaluación de jerarquías.

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

  7. Haz clic en Agregar regla.

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

  9. De manera opcional, haz clic en Agregar condición para que la política de la organización sea condicional en una etiqueta.

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

    2. En el campo Descripción, asigna una descripción a la condición. La descripción proporciona contexto sobre las etiquetas que se requieren y cómo afectan a los recursos.

    3. Puedes usar el Generador de condiciones para crear una condición que requiera una etiqueta en particular para que la restricción surta efecto.

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

      2. Selecciona el operador para tu condición.

        • Para hacer coincidir una etiqueta completa, usa el operador tiene valor con el nombre con espacio de nombres de la etiqueta o el operador tiene ID de valor con los IDs de clave y valor de la etiqueta.

        • Para que coincida solo la clave de la etiqueta, usa el operador has key con el nombre con espacio de nombres de la clave de la etiqueta o el operador has key ID con el ID de la clave de la etiqueta.

      3. Puedes crear varias condiciones haciendo clic en Agregar. Si agregas otra condición, puedes establecer la lógica condicional para que se requieran todas las condiciones activando Y. Puedes configurar la lógica condicional para que solo se requiera que una de las condiciones sea verdadera. Para ello, activa O.

      4. Para borrar una expresión, haz clic en la X grande que se encuentra a la derecha de los campos de condición.

      5. Cuando termines de editar las condiciones, haz 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 renderización programática de tu conjunto actual de condiciones.

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

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

        Reemplaza lo siguiente:

        • 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')"

        Reemplaza lo siguiente:

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

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

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

      • "resource.hasTagKey('KEY_NAME')"

        Reemplaza 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')"

        Reemplaza KEY_ID por el ID permanente de la clave de la 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 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 Establecer política.

gcloud

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

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 con espacio de nombres de la etiqueta.

Para que solo coincida la clave de la etiqueta, usa el operador resource.hasTagKey con el nombre con espacio de nombres de la clave de la etiqueta. Para que coincida cualquier valor de etiqueta para una clave de etiqueta determinada, usa el operador resource.hasTagKeyID con el ID de la clave de etiqueta.

Ejecuta el comando set-policy:

gcloud org-policies set-policy POLICY_PATH

Reemplaza lo siguiente:

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

  • RESOURCE_TYPE: organizations, folders o projects

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

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

Para esta política de la organización, el recurso y todos sus recursos secundarios tienen la restricción heredada administrada gcp.resourceLocations aplicada, con allowedValues de us-east1-locations únicamente. Se aplicará la restricción heredada administrada gcp.resourceLocations a cualquiera de estos recursos que tengan la etiqueta location: us-west1, con allowedValues de us-east1-locations y us-west1-locations.

De esta manera, se pueden aplicar conjuntos de valores condicionales y no condicionales para una restricción en una sola política de la organización.

Ejemplo de regla booleana

En el siguiente ejemplo, se muestra cómo establecer una política de la organización que aplique la restricción heredada administrada compute.disableSerialPortAccess. Esta política de organización especifica que todos los puertos en serie son accesibles para los recursos, pero usa una condición para restringir el acceso a puerto en serie solo a los recursos que tienen la etiqueta coincidente.

Console

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

  1. En la consola de Google Cloud , 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 deseas configurar la política de la organización.

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

  4. Si deseas actualizar la política de la organización para este recurso, haz clic en Administrar política.

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

  6. Haz clic en Agregar regla.

  7. En Aplicación, selecciona si la aplicación de esta política de la organización debe estar activada o desactivada.

  8. De manera opcional, haz clic en Agregar condición para que la política de la organización sea condicional en una etiqueta. Ten en cuenta que, si agregas una regla condicional a una política de la organización, debes agregar solo una regla sin condición o la política no se podrá guardar.

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

    2. En el campo Descripción, asigna una descripción a la condición. La descripción proporciona contexto sobre las etiquetas que se requieren y cómo afectan a los recursos.

    3. Puedes usar el Generador de condiciones para crear una condición que requiera una etiqueta en particular para que la restricción surta efecto.

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

      2. Selecciona el operador para tu condición.

        • Para hacer coincidir una etiqueta completa, usa el operador tiene valor con el nombre con espacio de nombres de la etiqueta o el operador tiene ID de valor con los IDs de clave y valor de la etiqueta.

        • Para que coincida solo la clave de la etiqueta, usa el operador has key con el nombre con espacio de nombres de la clave de la etiqueta o el operador has key ID con el ID de la clave de la etiqueta.

      3. Puedes crear varias condiciones haciendo clic en Agregar. Si agregas otra condición, puedes establecer la lógica condicional para que se requieran todas las condiciones activando Y. Puedes configurar la lógica condicional para que solo se requiera que una de las condiciones sea verdadera. Para ello, activa O.

      4. Para borrar una expresión, haz clic en la X grande que se encuentra a la derecha de los campos de condición.

      5. Cuando termines de editar las condiciones, haz clic en Guardar.

      6. Una política de la organización con una condición aplicada debe tener solo una regla incondicional. Haz clic en Agregar regla y establece 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 renderización programática de tu conjunto actual de condiciones.

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

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

        Reemplaza lo siguiente:

        • 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')"

        Reemplaza lo siguiente:

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

        • VALUE_ID por 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 política de la organización a cualquier recurso que no tenga la etiqueta us-west1.
  9. Para finalizar y aplicar la política de la organización, haz clic en Guardar (Save).

gcloud

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

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 con espacio de nombres de la etiqueta.

Para que solo coincida la clave de la etiqueta, usa el operador resource.hasTagKey con el nombre con espacio de nombres de la clave de la etiqueta. Para que coincida cualquier valor de etiqueta para una clave de etiqueta determinada, usa el operador resource.hasTagKeyID con el ID de la clave de etiqueta.

Ejecuta el comando set-policy:

gcloud org-policies set-policy POLICY_PATH

Reemplaza lo siguiente:

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

  • RESOURCE_TYPE: organizations, folders o projects

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

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

Para esta política de la organización, el recurso y todos sus recursos secundarios tienen la restricción heredada administrada gcp.disableSerialPortAccess aplicada. La política de la organización rechaza todos los recursos que tienen la etiqueta disableSerialAccess: yes. A ningún recurso que no tenga la etiqueta disableSerialAccess: yes se le aplicará la restricción administrada heredada.

Agrega reglas de forma condicional a la política de la organización

Puedes usar etiquetas para agregar de forma condicional reglas de restricción a los recursos según las etiquetas que tengan adjuntas. Puedes agregar varias condiciones dentro de la misma política de la organización, lo que te brinda un control detallado de los recursos a los que deseas que se aplique la política de la organización.

El Common Expression Language o CEL es el lenguaje de expresión que se usa para especificar expresiones condicionales. Una expresión condicional consta de una o más declaraciones que se unen con operadores lógicos (&&, || o !). Para obtener más información, consulta la especificación de CEL y su definición de lenguaje.

Considera una política de la organización para restringir las ubicaciones en las que se podrían crear recursos según las etiquetas aplicadas a esos recursos. Para ello, crea una política de la organización que aplique la restricción heredada gcp.resourceLocations y usa condiciones para limitar la aplicación solo a ciertos recursos.

Para comenzar, crea 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

Reemplaza ORGANIZATION_ID por la organización principal de tu clave de etiqueta.

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

Luego, configura la política con el comando set-policy:

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

Restringe los recursos sin etiquetar

Puedes usar etiquetas y políticas de la organización condicionales para restringir los recursos que no usen una etiqueta en particular. Si estableces una política de la 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 que descienda de ese recurso, a menos que se le haya agregado una etiqueta. De esta manera, los recursos deben configurarse de acuerdo con tu plan de gobierno antes de que puedan usarse.

Para restringir los recursos de la organización, la carpeta o el proyecto sin etiquetar, puedes usar el operador lógico ! en una consulta condicional cuando crees tu política de la 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 la organización que deniegue sqladmin.googleapis.com en proyectos que no tengan la etiqueta sqladmin=enabled.

  1. Crea una etiqueta que identifique si se aplicó la gobernanza adecuada a los recursos. Por ejemplo, puedes crear una etiqueta con la clave sqlAdmin y el valor enabled para designar que este recurso debe permitir el uso de la API de Cloud SQL Admin. Por ejemplo:

    Cómo crear una clave y un valor de etiqueta

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

  3. Crea una política de la organización Restrict Resource Service Usage a nivel de tu recurso de organización para denegar el acceso a la API de Cloud SQL Admin. Por ejemplo:

    Crea una política de la organización para restringir recursos

  4. Agrega una condición a la política de la organización anterior para especificar que la política se aplica si no está presente la etiqueta de gobernanza. El operador de lógica NOT no es compatible con el creador de condiciones, por lo que esta condición se debe crear en el editor de condiciones. Por ejemplo:

    Cómo compilar una política de la organización condicional

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

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

Aplicar etiquetas obligatorias en los recursos

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

Herencia de la política de la organización

Las restricciones con reglas de lista que se habilitan con etiquetas se fusionan con la política de la organización existente, 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 con etiquetas anulan la política de la organización existente. Además, debido a que las reglas booleanas solo pueden tener dos estados, verdadero o falso, todas las declaraciones condicionales deben ser lo opuesto a la declaración sin condición para evitar que varias etiquetas entren en conflicto.

Por ejemplo, considera una política de la organización que aplique la restricción heredada administrada disableSerialPortAccess. El valor incondicional, que es el valor que se usa si no hay condiciones que lo anulen, es verdadero. Por lo tanto, cualquier otra declaración condicional para esta política debe establecerse en falso a fin de no entrar en conflicto.

¿Qué sigue?

Para obtener más información sobre cómo usar etiquetas, lee la página Crea y administra etiquetas.

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