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 de 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 configuras 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:

    Select the tab for how you plan to use the samples on this page:

    Console

    When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.

    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.

    2. Set a default region and zone.

    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. 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.

    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
Cómo bloquear 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 establezca en permitir, podrás 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
Inhabilitar la virtualización anidada de VM

[Versión preliminar pública] Esta restricción booleana inhabilita la virtualización anidada acelerada por 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
Restringe la habilitación de los metadatos de acceso al puerto en serie de la VM

Versión preliminar: Esta restricción impide que la clave de metadatos serial-port-enable se establezca como verdadera 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 eximirlas 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

[Versión preliminar pública] Cuando se aplica esta restricción, se inhabilita el registro de puerto en serie en Stackdriver desde las VMs de Compute Engine.
De forma predeterminada, el registro de puerto en serie de las VMs de Compute Engine está inhabilitado, 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
Restringe el uso del DNS interno global (gDNS) para los proyectos que tienen el parámetro de configuración de DNS ZonalOnly.

[Versión preliminar pública] 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

[Versión preliminar pública] 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

[Versión preliminar pública] 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 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 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

[Versión preliminar pública] 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 las instancias de VM

[Versión preliminar pública] 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 afectan el cumplimiento de las restricciones de una instancia de VM solo 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 en 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 de etiqueta 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 tu 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 verifican los incumplimientos solo 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.* equivalente moderna, 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. Si borras una política, se restablecerá el comportamiento predeterminado administrado por Google para esa restricción.

¿Qué sigue?