Restricciones administradas

Las restricciones administradas son políticas de la organización predefinidas, creadas en una plataforma moderna, que proporcionan un control centralizado y programático sobre tus recursos de Compute Engine. Incluyen compatibilidad integrada con herramientas de lanzamiento seguro, como Policy Simulator y la ejecución de prueba.

Las restricciones administradas se identifican con el prefijo compute.managed.* y sirven como reemplazo directo para las restricciones heredadas compute.*.

Beneficios

  • Lanzamiento y supervisión seguros: Implementa políticas con herramientas completas, un control de cambios más rápido y una implementación gradual con capacidades de simulación y pruebas de validación.
  • Registro coherente: Aplica uniformidad en los registros y los mensajes de error, lo que simplifica la supervisión centralizada y optimiza las auditorías.

Herencia de políticas

Las políticas de la organización que configures en un recurso se heredan en los recursos subordinados de ese recurso en la jerarquía de recursos. Por ejemplo, si aplicas una política en una carpeta, Google Cloud aplica la política en todos los proyectos de esa carpeta.

Precios

El Servicio de políticas de la organización, que incluye las políticas de la organización predefinidas (heredadas), administradas y personalizadas, se ofrece sin cargo.

Antes de comenzar

  • Si aún no lo hiciste, configura la autenticación. La autenticación verifica tu identidad para acceder a los servicios y las APIs de Google Cloud . Para ejecutar código o muestras desde un entorno de desarrollo local, puedes autenticarte en Compute Engine seleccionando una de las siguientes opciones:

    Selecciona la pestaña que corresponda a la forma en que planeas usar las muestras de esta página:

    Console

    Cuando usas la consola de Google Cloud para acceder a los servicios y las APIs de Google Cloud , no necesitas configurar la autenticación.

    gcloud

    1. Instala Google Cloud CLI. Después de la instalación, inicializa Google Cloud CLI con el siguiente comando:

      gcloud init

      Si usas un proveedor de identidad externo (IdP), primero debes acceder a la gcloud CLI con tu identidad federada.

  • Configura una región y una zona predeterminadas.
  • REST

    Para usar las muestras de la API de REST incluidas en esta página en un entorno de desarrollo local, debes usar las credenciales que proporciones a la gcloud CLI.

      Instala Google Cloud CLI.

      Si usas un proveedor de identidad externo (IdP), primero debes acceder a la gcloud CLI con tu identidad federada.

    Para obtener más información, consulta Autentícate para usar REST en la documentación de autenticación de Google Cloud .

Roles obligatorios

Para obtener los permisos que necesitas para administrar las políticas de la organización con restricciones administradas, pídele a tu administrador que te otorgue los siguientes roles de IAM:

Para obtener más información sobre cómo otorgar roles, consulta Administra el acceso a proyectos, carpetas y organizaciones.

Estos roles predefinidos contienen los permisos necesarios para administrar las políticas de la organización con restricciones administradas. Para ver los permisos exactos que son necesarios, expande la sección Permisos requeridos:

Permisos necesarios

Se requieren los siguientes permisos para administrar las políticas de la organización con restricciones administradas:

  • orgpolicy.constraints.list
  • orgpolicy.policies.create
  • orgpolicy.policies.delete
  • orgpolicy.policies.list
  • orgpolicy.policies.update
  • orgpolicy.policy.get
  • orgpolicy.policy.set
  • Para probar las restricciones:
    • compute.instances.create en el proyecto
    • Para usar una imagen personalizada con el fin de crear la VM, sigue estos pasos: compute.images.useReadOnly en la imagen
    • Si deseas usar una instantánea para crear la VM, sigue estos pasos: compute.snapshots.useReadOnly en la instantánea
    • Para usar una plantilla de instancias a fin de crear la VM, haz lo siguiente: compute.instanceTemplates.useReadOnly en la plantilla de instancias
    • Para asignar una red heredada a la VM: compute.networks.use en el proyecto
    • Si deseas especificar una dirección IP estática para la VM; compute.addresses.use en el proyecto
    • Para asignar una dirección IP externa a la VM cuando se usa una red y punto heredado; compute.networks.useExternalIp en el proyecto
    • A fin de especificar una subred para la VM: compute.subnetworks.use en el proyecto o en la subred elegida
    • Para asignar una dirección IP externa a la VM cuando se usa una red de VPC, compute.subnetworks.useExternalIp en el proyecto o en la subred elegida
    • A fin de configurar los metadatos de la instancia de VM para la VM y los puntos, sigue estos pasos: compute.instances.setMetadata en el proyecto
    • A fin de configurar etiquetas para la VM y los puntos; compute.instances.setTags en la VM
    • Si deseas configurar etiquetas para la VM, haz lo siguiente: compute.instances.setLabels en la VM
    • A fin de configurar una cuenta de servicio para que la VM la usecompute.instances.setServiceAccount en la VM
    • Si deseas crear un disco nuevo para la VM: compute.disks.create en el proyecto
    • Para conectar un disco existente en modo de solo lectura o de lectura y escritura, haz lo siguiente: compute.disks.use en el disco
    • Para conectar un disco existente en modo de solo lectura y dos puntos, sigue estos pasos: compute.disks.useReadOnly en el disco

También puedes obtener estos permisos con roles personalizados o con otros roles predefinidos.

Restricciones administradas disponibles

Las siguientes restricciones de políticas de la organización administradas están disponibles para Compute Engine:

Restricción Descripción
Configuración de encriptación del adjunto de VLAN permitida

Esta restricción de lista define la configuración de encriptación permitida para los nuevos adjuntos de VLAN.
De forma predeterminada, los adjuntos de VLAN pueden usar cualquier configuración de encriptación.
Establece IPSEC como valor permitido para admitir que solo se creen adjuntos de VLAN encriptados.

constraints/compute.managed.allowedVlanAttachmentEncryption
Bloquea las funciones en versión preliminar de Compute Engine

Esta restricción garantiza que las funciones de versión preliminar se bloqueen, a menos que se permita explícitamente esta restricción. Una vez que se establece en permitir, puedes controlar qué funciones de vista previa se pueden habilitar o inhabilitar individualmente para tu proyecto. Solo se puede acceder a las funciones de versión preliminar habilitadas en el proyecto. Si se inhabilita la política posteriormente, no se cambiará el estado de las funciones en versión preliminar individuales ya establecidas, y estas se podrán inhabilitar de forma individual. Esta restricción solo se aplica a las funciones de la API de Compute en versión alfa.

constraints/compute.managed.blockPreviewFeatures
Bloquear claves SSH del proyecto

Versión preliminar: Esta restricción impide que la clave de metadatos block-project-ssh-keys se establezca en falso a nivel del proyecto, de la zona del proyecto o de la instancia para las VMs de Compute Engine dentro de la organización, el proyecto o la carpeta en los que se aplica esta restricción. De forma predeterminada, se permiten las llaves SSH de nivel de proyecto, que se pueden inhabilitar a nivel del proyecto, de la zona del proyecto o de la instancia con esta clave de metadatos. Para permitir claves SSH de nivel de proyecto para VMs específicas, puedes eximirlas de esta política con etiquetas y reglas condicionales.
Importante: La aplicación de esta restricción no afecta a las VMs existentes en las que block-project-ssh-keys ya está configurado como falso. Estas conservarán el acceso, a menos que se actualicen sus metadatos.

constraints/compute.managed.blockProjectSshKeys
Inhabilitar metadatos de atributos de invitado de Compute Engine

Vista previa: Cuando se aplica esta restricción, se inhabilita el acceso a la API de Compute Engine a los atributos de invitado de las VMs de Compute Engine.
De forma predeterminada, la API de Compute Engine se puede usar para acceder a los atributos de invitado de la VM de Compute Engine.
Puedes permitir que instancias de VM específicas usen atributos de invitado. Primero, aplica etiquetas para marcar las instancias y, luego, usa reglas condicionales basadas en los valores de las etiquetas para definir correctamente el alcance de esas instancias fuera de la aplicación.

constraints/compute.managed.disableGuestAttributesAccess
Inhabilitar la virtualización anidada de VM

Mediante esta restricción booleana, se inhabilita la virtualización anidada por aceleración de hardware para todas las VMs de Compute Engine que pertenecen a la organización, el proyecto o la carpeta en los que esta restricción se establece en True.
De forma predeterminada, se permite la virtualización anidada por aceleración de hardware para todas las VMs de Compute Engine que se ejecutan en Intel Haswell o en plataformas de CPU más recientes.

constraints/compute.managed.disableNestedVirtualization
Inhabilita los tipos de máquinas que no cumplen con FIPS

Versión preliminar: Cuando se aplica esta restricción, se impide la creación o actualización de instancias de VM que usan tipos de máquinas que no cumplen con los estándares de FIPS. De forma predeterminada, se permiten todos los tipos de máquinas. Puedes eximir VMs específicas con etiquetas y reglas condicionales.

constraints/compute.managed.disableNonFIPSMachineTypes
Restringe la habilitación de los metadatos de acceso al puerto en serie de la VM

Esta restricción impide que la clave de metadatos serial-port-enable se establezca en verdadero para las VMs de Compute Engine dentro de la organización, el proyecto o la carpeta en los que se aplica esta restricción. De forma predeterminada, el acceso al puerto en serie se puede habilitar por VM, por zona o por proyecto con esta clave de metadatos. Para permitir el acceso al puerto en serie de VMs específicas, puedes excluirlas de esta política con etiquetas y reglas condicionales.
Importante: El cumplimiento de esta restricción no afecta a las VMs existentes en las que serial-port-enable ya está establecido como verdadero. Estas conservarán el acceso, a menos que se actualicen sus metadatos.

constraints/compute.managed.disableSerialPortAccess
Inhabilitar el registro de puertos en serie de VM en Stackdriver

Cuando se aplica esta restricción, se inhabilita el registro de puerto en serie en Stackdriver desde las VMs de Compute Engine.
El registro de puerto en serie de las VMs de Compute Engine está inhabilitado de forma predeterminada, pero puede habilitarse selectivamente por VM o por proyecto con los atributos de metadatos. Si inhabilitas el registro de puertos en serie, ciertos servicios que dependen de él, como los clústeres de Google Kubernetes Engine, no funcionarán correctamente. Antes de aplicar esta restricción, verifica que los productos de tu proyecto no dependan del registro de puertos en serie. Puedes permitir que instancias de VM específicas usen el registro de puerto en serie. Primero, aplica etiquetas para marcar las instancias y, luego, usa reglas condicionales basadas en los valores de las etiquetas para definir correctamente el alcance de esas instancias fuera de la aplicación.

constraints/compute.managed.disableSerialPortLogging
Se inhabilitó la creación de instancias de Compute Engine que usan el agente de inicio de contenedores (konlet) obsoleto.

Versión preliminar: Esta restricción booleana impide la creación de instancias de Compute Engine que usan konlet, el agente de inicio de contenedores obsoleto. Cuando está habilitada, no puedes crear instancias de procesamiento que tengan la clave de metadatos `gce-container-declaration`.Esta restricción también impide la creación de instancias de procesamiento a partir de plantillas de instancias que contengan la clave de metadatos `gce-container-declaration`, lo que afecta a los grupos de instancias administrados (MIG) que usan esas plantillas de instancias.

constraints/compute.managed.disableVmsWithContainerStartupAgent
Restringe el uso del DNS interno global (gDNS) para los proyectos que tienen el parámetro de configuración de DNS ZonalOnly.

Cuando se aplica esta restricción, se limita el uso de gDNS. Esta restricción inhabilita la creación de VM de gDNS y la actualización de VMs para usar gDNS. No se bloqueará la reversión de un proyecto de zDNS a gDNS, pero se aplicará la política durante las invocaciones posteriores de la API de Instance.

constraints/compute.managed.disallowGlobalDns
Necesita configuración del SO

Cuando se aplica esta restricción, se requiere que se habilite VM Manager (Configuración del SO) en todos los proyectos nuevos. En los proyectos nuevos y existentes, esta restricción impide las actualizaciones de metadatos que inhabilitan VM Manager a nivel del proyecto, de la zona del proyecto o de la instancia. Puedes permitir que instancias de VM específicas inhabiliten VM Manager. Primero, aplica etiquetas para marcar las instancias y, luego, usa reglas condicionales basadas en los valores de las etiquetas para definir correctamente el alcance de esas instancias fuera de la aplicación.

constraints/compute.managed.requireOsConfig
Requiere Acceso al SO

Cuando se aplica esta restricción, se requiere que se habilite el Acceso al SO en todos los proyectos recién creados. En los proyectos nuevos y existentes, esta restricción impide las actualizaciones de metadatos que inhabilitan el Acceso al SO a nivel del proyecto, de la zona del proyecto o de la instancia. Puedes permitir que instancias de VM específicas inhabiliten el Acceso al SO. Primero, aplica etiquetas para marcar las instancias y, luego, usa reglas condicionales basadas en los valores de las etiquetas para definir correctamente el alcance de esas instancias fuera de la aplicación.

constraints/compute.managed.requireOsLogin
Restringe el procesamiento no confidencial

Versión preliminar: Requiere que todas las VMs nuevas se creen con Confidential Computing habilitado. De forma predeterminada, no es necesario que las VMs nuevas usen Confidential Computing. Puedes aplicar o eximir esta restricción usando etiquetas para marcar instancias de VM y, luego, aplicar la restricción con reglas condicionales basadas en las etiquetas aplicadas.

constraints/compute.managed.restrictNonConfidentialComputing
Restringe el uso del reenvío de protocolos

Esta restricción te permite restringir los tipos de implementaciones de reenvío de protocolos (internas o externas) que se pueden crear en tu organización. Para configurar la restricción, debes especificar una lista de entidades permitidas del tipo de implementación de reenvío de protocolos que se permitirá. La lista de entidades permitidas solo puede incluir los siguientes valores:

  • INTERNAL
  • EXTERNAL
. Por ejemplo, si la lista de entidades permitidas se establece en INTERNAL, tus usuarios solo podrán configurar el reenvío de protocolos interno. Es decir, todas las reglas de reenvío asociadas con las instancias de destino se restringen al esquema de balanceo de cargas INTERNAL y solo deben usar direcciones IP internas.

constraints/compute.managed.restrictProtocolForwardingCreationForTypes
Restringe el reenvío de IP de VM

Esta restricción define si las instancias de VM de Compute Engine pueden habilitar el reenvío de IP. De forma predeterminada, si no se especifica ninguna política, cualquier VM puede habilitar el reenvío de IP en cualquier red virtual. Si se aplica, esta restricción rechazará la creación o actualización de instancias de VM con el reenvío de IP habilitado. Puedes permitir que instancias de VM específicas habiliten el reenvío de IP. Primero, aplica etiquetas para marcar las instancias y, luego, usa reglas condicionales basadas en los valores de las etiquetas para definir correctamente el alcance de esas instancias fuera de la aplicación.

constraints/compute.managed.vmCanIpForward
Restringe las IPs externas para instancias de VM

Esta restricción define si las instancias de VM de Compute Engine pueden usar direcciones IP externas IPv4. De forma predeterminada, todas las instancias de VM pueden usar direcciones IP externas. Si se aplica, esta restricción rechazará la creación o actualización de instancias de VM con direcciones IP externas IPv4. Esta restricción no limitará el uso de direcciones IP externas IPv6. Puedes permitir que instancias de VM específicas usen direcciones IP externas IPv4. Primero, aplica etiquetas para marcar las instancias y, luego, usa reglas condicionales basadas en los valores de las etiquetas para definir correctamente el alcance de esas instancias fuera de la aplicación.

constraints/compute.managed.vmExternalIpAccess

Evaluación jerárquica de metadatos

Las restricciones administradas que se basan en claves de metadatos predefinidas, como el Acceso al SO o el Acceso al puerto serie, admiten la evaluación jerárquica. Cuando Compute Engine evalúa estas restricciones, verifica los valores de metadatos establecidos a nivel de la instancia de VM, el proyecto o la zona.

Establecer valores de metadatos a nivel del proyecto o de la zona te permite administrar instancias de VM a gran escala. Sin embargo, la aplicación de restricciones solo se produce durante las llamadas a la API de creación o actualización de instancias de VM. Por lo tanto, los cambios en los metadatos del proyecto o de la zona solo afectan el cumplimiento de las restricciones de una instancia de VM cuando se crea o actualiza esa instancia.

Restricciones y niveles basados en metadatos

Restricción Clave de metadatos Niveles de jerarquía de metadatos
compute.managed.disableSerialPortAccess serial-port-enable Proyecto, zona, instancia
compute.managed.requireOsLogin enable-oslogin Proyecto, zona, instancia
compute.managed.disableGuestAttributesAccess enable-guest-attributes Proyecto, zona, instancia
compute.managed.requireOsConfig enable-osconfig Proyecto, zona, instancia
compute.managed.disallowGlobalDns VmDnsSetting Proyecto, instancia

Lanzamiento seguro: El ciclo de vida de la política

Para evitar interrupciones en el servicio cuando implementes gradualmente restricciones nuevas, Google recomienda que implementes restricciones administradas siguiendo estos pasos:

Analiza con Policy Simulator

Antes de aplicar una política, usa Policy Simulator para ver qué recursos existentes la incumplen. Lleva a cabo los pasos siguientes:

  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 la barra de filtros, busca tu restricción y, luego, haz clic en el nombre de la restricción para ir a su página Detalles de la política.

  3. Haz clic en Probar cambios para generar un informe de simulación.

  4. Los cambios en los metadatos jerárquicos pueden tardar algunas horas en reflejarse en el informe de simulación para las restricciones en la configuración de metadatos de VM.

  5. Revisa el informe para reconfigurar los recursos que no cumplen con las políticas o solicitar exenciones.

Validar con una ejecución de prueba

El modo de ejecución de prueba registra los incumplimientos en Cloud Logging, pero no aplica restricciones.

Para probar una restricción, usa el comando gcloud org-policies set-policy de la siguiente manera:

  1. Crea un archivo YAML de política (por ejemplo, dry-run-policy.yaml) con un dryRunSpec:

    name: projects/PROJECT_ID/policies/compute.managed.requireOsLogin
    dryRunSpec:
      rules:
      - enforce: true
    

    Reemplaza PROJECT_ID con el ID del proyecto.

  2. Aplica la política:

    gcloud org-policies set-policy dry-run-policy.yaml
    

Aplicación completa

Después de simular y probar tu política, puedes aplicarla a un recurso. Los cambios en las políticas pueden tardar hasta 15 minutos en propagarse por todos los sistemas deGoogle Cloud .

Prueba la aplicación de restricciones

Después de establecer una política, puedes verificar su aplicación con gcloud CLI. Por ejemplo, para probar la restricción compute.managed.requireOsLogin, sigue estos pasos:

  1. Enumera las políticas existentes para confirmar tu configuración:

    gcloud org-policies list --project=PROJECT_ID
    
  2. Aplica la política de aplicación con un archivo YAML:

    gcloud org-policies set-policy enforce_managed_constraint.yaml
    
  3. Verifica la aplicación llamando a una API de mutación. El intento de crear una instancia de VM con metadatos que no cumplen con los requisitos debería fallar:

    gcloud compute instances create VM_NAME \
        --machine-type=MACHINE_TYPE \
        --image-family=IMAGE_FAMILY \
        --image-project=IMAGE_PROJECT \
        --metadata=enable-oslogin=false
    

    Reemplaza lo siguiente:

    • VM_NAME: Es el nombre de la instancia de VM nueva.
    • MACHINE_TYPE: Es un tipo de máquina válido, por ejemplo, e2-micro.
    • IMAGE_FAMILY: Es una familia de imágenes válida, por ejemplo, debian-11.
    • IMAGE_PROJECT: Es el proyecto de la familia de imágenes, por ejemplo, debian-cloud.
  4. Revisa el mensaje de error. Deberías ver un rechazo que indica la restricción específica que se incumplió: ERROR: (gcloud.compute.instances.create) Could not fetch resource: - Operation denied by org policy: [constraints/compute.managed.requireOsLogin]

Exenciones condicionales con etiquetas

Puedes usar etiquetas para otorgar excepciones a recursos específicos según las necesidades comerciales. En este ejemplo, usamos una etiqueta llamada osLoginOptional para identificar los recursos que están exentos del requisito de Acceso al SO. Cuando vinculas esta etiqueta con un valor de true a un recurso, la política de la organización permite que ese recurso específico exista sin que se habilite el Acceso al SO, incluso mientras la política sigue aplicándose estrictamente al resto de tu entorno.

Para otorgar una excepción con etiquetas, sigue estos pasos:

  1. Crea una etiqueta: Usa gcloud CLI para crear una clave y un valor de etiqueta.

    1. Crea la clave de etiqueta:

      gcloud resource-manager tags keys create osLoginOptional \
          --parent=organizations/ORGANIZATION_ID
      
    2. Crea el valor de la etiqueta:

      gcloud resource-manager tags values create true \
          --parent=organizations/ORGANIZATION_ID/tagKeys/osLoginOptional
      

    Reemplaza ORGANIZATION_ID por el ID de tu organización.

  2. Vincula la etiqueta a un recurso. Para eximir un proyecto de la restricción compute.managed.requireOsLogin, vincula la etiqueta osLoginOptional=true al proyecto con el comando gcloud resource-manager tags bindings create:

    gcloud resource-manager tags bindings create \
        --tag-value=ORGANIZATION_ID/osLoginOptional/true \
        --parent=//cloudresourcemanager.googleapis.com/projects/PROJECT_ID \
        --location=global
    

    Reemplaza ORGANIZATION_ID por el ID de tu organización y PROJECT_ID por el ID del proyecto que deseas eximir.

    Para obtener información sobre cómo vincular etiquetas a otros recursos, consulta Cómo vincular una etiqueta a un recurso.

  3. Actualiza la política: Crea o actualiza el archivo YAML de la política (por ejemplo, policy.yaml) para incluir la regla condicional.

    name: projects/PROJECT_ID/policies/compute.managed.requireOsLogin
    spec:
      rules:
      - condition:
          expression: "resource.matchTag('ORGANIZATION_ID/osLoginOptional', 'true')"
        enforce: false
      - enforce: true
    

    Reemplaza lo siguiente:

    • PROJECT_ID: el ID de tu proyecto
    • ORGANIZATION_ID: Es el ID de tu organización.
  4. Aplica la política: Usa el siguiente comando de gcloud CLI para activar la configuración:

    gcloud org-policies set-policy policy.yaml
    

Migración desde restricciones heredadas

Cuando realices la migración, ten en cuenta que las restricciones administradas mejoran el comportamiento de las políticas heredadas, pero no lo replican exactamente. Las restricciones administradas ofrecen una mayor previsibilidad, ya que solo verifican los incumplimientos durante las solicitudes a la API que crean o modifican recursos. Si una solicitud incumple una restricción, la llamada a la API falla con un error claro. Esto difiere de las políticas heredadas, que se podían aplicar en varias etapas de una operación o usarse como atributos de recursos, lo que hacía que el comportamiento de aplicación fuera menos predecible.

Cuando pases de una restricción compute.* heredada a una compute.managed.* moderna equivalente, sigue estos pasos para evitar que las restricciones se ajusten de forma no intencional:

  1. Descubrimiento: Identifica la nueva alternativa de restricción administrada.
  2. Analiza y valida: Usa el Simulador de políticas y la ejecución de prueba como se describió anteriormente.
  3. Aplica la restricción administrada: Aplica la nueva restricción administrada junto con la heredada.
  4. Borra las políticas heredadas:
    • Navega al Inventario de activos en la consola de Google Cloud y filtra pororgpolicy.Policyy el nombre de la restricción heredada para identificar todas las políticas que usan la restricción heredada.
    • Borra todas las políticas que usan la restricción heredada. Borrar una política restablece esa política al comportamiento predeterminado administrado por Google para esa restricción.

¿Qué sigue?