Autentica cargas de trabajo en otras cargas de trabajo a través de mTLS


En este documento, se describe cómo configurar el aprovisionamiento automático y la administración del ciclo de vida de las identidades de carga de trabajo administradas para Compute Engine. Configura los grupos de CA para emitir certificados mediante Certificate Authority Service (CA), que es un servicio de Google Cloud escalable y con alta disponibilidad que simplifica y automatiza la implementación, la administración y la seguridad de los servicios de CA. Cada VM se aprovisiona con credenciales X.509 del grupo de CA configurado. Luego, estas credenciales se pueden usar para establecer conexiones mTLS.

Con las identidades de cargas de trabajo administradas para Compute Engine, puedes implementar comunicaciones autenticadas y encriptadas de forma mutua entre dos VMs de Compute Engine. Las aplicaciones de carga de trabajo que se ejecutan en las VMs configuradas pueden usar las credenciales X.509 para mTLS por VM. Certificate Authority Service rota y administra estos certificados mTLS de forma automática.

Antes de comenzar

  • Solicita acceso a la vista previa de Workload Identity administrada.

  • Configura Google Cloud CLI

    Instala Google Cloud CLI y, luego, inicializa la ejecución del siguiente comando:

    gcloud init
  • Configura Google Cloud CLI para usar el proyecto incluido en la lista de entidades permitidas para la facturación y la cuota.

      gcloud config set billing/quota_project PROJECT_ID

    Reemplaza PROJECT_ID por el ID del proyecto que se agregó a la lista de entidades permitidas para la vista previa de Workload Identity administrada.

  • Revisa la documentación Descripción general de las identidades de cargas de trabajo administradas.
  • Habilita la API de Compute Engine:

    gcloud services enable compute.googleapis.com

Roles obligatorios

Para obtener los permisos que necesitas para crear VMs que usen certificados de identidad de cargas de trabajo administrados para la autenticación en otras cargas de trabajo, pídele a tu administrador que te otorgue los siguientes roles de IAM en el proyecto:

Si quieres obtener más información para otorgar roles, consulta Administra el acceso.

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

Descripción general

Si quieres usar identidades para cargas de trabajo administradas en tus aplicaciones, debes realizar las siguientes tareas:

  1. Administrador de seguridad:

  2. Administrador de Compute:

Configura identidades de carga de trabajo administradas en Identity and Access Management

  • Sigue las instrucciones de Configura la autenticación de identidades de carga de trabajo administradas.

    En estas instrucciones, se detalla cómo completar lo siguiente:

    • Crea un grupo de Workload Identity.
    • Crea espacios de nombres en el grupo de Workload Identity. Usa los espacios de nombres para crear límites administrativos para tus identidades de carga de trabajo administradas, por ejemplo, un espacio de nombres para cada una de las aplicaciones que son propiedad de tu organización.
    • Crea una identidad de carga de trabajo administrada en un espacio de nombres en el grupo de identidades para cargas de trabajo. Por ejemplo, puedes crear un espacio de nombres para una aplicación e identidades administradas dentro de ese espacio de nombres para los microservicios que admiten esa aplicación.
    • Crean una cuenta de servicio. Se pueden autorizar las VMs de Compute Engine para que reciban una identidad de carga de trabajo administrada basada en la cuenta de servicio de Google Cloud conectada a la VM.
    • Crea una política de certificación de carga de trabajo que permita que a tu carga de trabajo se le emitan credenciales para la identidad de la carga de trabajo administrada. Para emitir credenciales a la identidad de carga de trabajo administrada, la carga de trabajo debe estar dentro de un proyecto especificado y tener la cuenta de servicio adjunta.
    • Configura Certificate Authority Service para emitir certificados para identidades de cargas de trabajo administradas:
      • Configura el grupo de CA raíz
      • Configura las CAs subordinadas
      • Autoriza identidades de carga de trabajo administradas para solicitar certificados del grupo de CA.

Obtén el archivo de configuración para subir los metadatos del socio

El administrador de seguridad crea un archivo JSON que contiene la siguiente información:

Este archivo debe llamarse CONFIGS.json. Usa este archivo cuando crees una plantilla de instancias para MIG o cuando crees una VM individual.

Su archivo CONFIGS.json debería ser similar al siguiente:

  {
  "wc.compute.googleapis.com": {
     "entries": {
        "certificate-issuance-config": {
           "primary_certificate_authority_config": {
              "certificate_authority_config": {
                 "ca_pool": "projects/PROJECT_ID/locations/SUBORDINATE_CA_POOL_REGION/caPools/SUBORDINATE_CA_POOL_ID"
              }
           },
           "key_algorithm": "rsa-2048"
        },
        "trust-config": {
           "POOL_ID.global.PROJECT_NUMBER.workload.id.goog": {
               "trust_anchors": [{
                  "ca_pool": "projects/PROJECT_ID/locations/SUBORDINATE_CA_POOL_REGION/caPools/SUBORDINATE_CA_POOL_ID"
                }]
           }
     }
  }
  },
  "iam.googleapis.com": {
     "entries": {
        "workload-identity": "spiffe://POOL_ID.global.PROJECT_NUMBER.workload.id.goog/ns/NAMESPACE_ID/sa/MANAGED_IDENTITY_ID"
     }
  }
  }
  

Habilita identidades de carga de trabajo administradas para un grupo de instancias administrado (MIG)

Un grupo de instancias administrado (MIG) es un grupo de instancias de máquinas virtuales (VM) que se controlan como una sola entidad. Cada VM en un MIG se crea mediante una plantilla de instancias. Para permitir que las VMs en el MIG usen identidades de carga de trabajo administradas, especifica la configuración en la plantilla de instancias.

Crea una plantilla de instancias

Crea una plantilla de instancias con la función de identidades de carga de trabajo administradas habilitada. Luego, usa esta plantilla para crear un grupo de instancias administrado (MIG).

gcloud

Usa el comando gcloud beta compute instance-templates create para crear una plantilla de instancias nueva que habilite las identidades de cargas de trabajo administradas.

gcloud beta compute instance-templates create INSTANCE_TEMPLATE_NAME \
    --service-account SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com \
    --metadata enable-workload-certificate=true \
    --partner-metadata-from-file CONFIGS.json

Puedes agregar marcas adicionales cuando creas la plantilla de instancias para personalizar las VMs que crea, como especificar el tipo de máquina y la imagen, en lugar de usar los valores predeterminados.

Reemplaza lo siguiente:

  • INSTANCE_TEMPLATE_NAME: el nombre de la plantilla nueva.
  • SERVICE_ACCOUNT_NAME: el nombre de la cuenta de servicio que puede recibir la identidad administrada
  • PROJECT_ID: el ID del proyecto en el que se creó la cuenta de servicio.
  • CONFIGS.json: El archivo de configuración que contiene la configuración de emisión del certificado, la configuración de confianza y la identidad de la carga de trabajo administrada.

Para obtener más información, consulta Crea plantillas de instancias.

Crea un grupo de instancias administrado a partir de la plantilla

Crea un grupo de instancias administrado que use una plantilla de instancias que habilite las identidades de las cargas de trabajo administradas. Para obtener detalles sobre cómo crear la plantilla de instancias, consulta Crea una plantilla de instancias.

gcloud

Crea un MIG con la plantilla de instancias y el comando gcloud compute instance-groups managed create.

gcloud compute instance-groups managed create INSTANCE_GROUP_NAME \
    --size=SIZE \
    --template=INSTANCE_TEMPLATE_NAME \
    --zone=ZONE

Reemplaza lo siguiente:

  • INSTANCE_GROUP_NAME: un ID único para el grupo de instancias administrado. Para obtener más información sobre los nombres válidos, consulta Recursos de nombres.
  • SIZE: el tamaño del grupo de instancias administrado.
  • INSTANCE_TEMPLATE_NAME: el nombre de la plantilla de instancias que se usará cuando se creen VMs en el MIG.
  • ZONE: la zona en la que se creará las VMs.

Para obtener información detallada sobre cómo crear MIG, consulta Situaciones básicas para crear grupos de instancias administrados (MIGs).

Habilita identidades de carga de trabajo administradas para VMs individuales

Puedes habilitar identidades de cargas de trabajo administradas para una VM cuando creas la VM o actualizas los metadatos de socio de una VM existente.

Crea VMs con identidades de carga de trabajo administradas habilitadas

Cuando creas una VM, para habilitar la función de identidades de carga de trabajo administradas para la VM, debes hacer lo siguiente:

  • Especifica una cuenta de servicio para que use la VM
  • Establece el atributo de metadatos enable-workload-certificate en true
  • Especifica la configuración de emisión del certificado y la información de configuración de confianza como metadatos de socio.

gcloud

Usa el comando gcloud beta compute instances create para crear una VM nueva. Usa el archivo CONFIGS.json que proporcionó el administrador de seguridad o que creó con las instrucciones en Crea un archivo de configuración para subir los metadatos del socio.

  1. Crea una VM con la función de identidades de carga de trabajo administradas habilitada.

    gcloud beta compute instances create INSTANCE_NAME \
       --zone=INSTANCE_ZONE \
       --service-account SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com \
       --metadata enable-workload-certificate=true \
       --partner-metadata-from-file CONFIGS.json
    

    Puedes agregar líneas adicionales al comando para configurar la VM, como el tipo de máquina y la imagen, en lugar de usar los valores predeterminados. Para obtener más información, consulta Crea y, luego, inicia una instancia de VM.

    Reemplaza lo siguiente:

    • INSTANCE_NAME: un nombre único para la VM. Para obtener detalles sobre los nombres de instancias válidos, consulta Recursos de nombres.
    • INSTANCE_ZONE: la zona en la que se creará la VM.
    • SERVICE_ACCOUNT_NAME: El nombre de la cuenta de servicio que puede recibir la identidad administrada
    • PROJECT_ID: el ID del proyecto en el que se creó la cuenta de servicio.
    • CONFIGS.json: El nombre del archivo de configuración que contiene la configuración de emisión de certificados, la configuración de confianza y la configuración de identidad de la carga de trabajo administrada.

Habilita identidades de cargas de trabajo administradas en VMs existentes

Si deseas habilitar identidades de cargas de trabajo administradas en una VM existente, actualízala para configurar lo siguiente:

  • Establece el atributo de metadatos enable-workload-certificate en true
  • Especifica la configuración de emisión del certificado y la información de configuración de confianza como metadatos de socio.

gcloud

En esta tarea, se usa el archivo CONFIGS.json que proporciona el administrador de seguridad o que se crea mediante las instrucciones de Crea un archivo de configuración para subir los metadatos del socio.

  1. Actualiza la configuración de una VM existente para habilitar las identidades de cargas de trabajo administradas.

    gcloud beta compute instances update VM_NAME \
       --zone=ZONE \
       --metadata enable-workload-certificate=true \
       --partner-metadata-from-file CONFIGS.json
    

    Reemplaza lo siguiente:

    • VM_NAME: El nombre de la VM
    • ZONE: La zona donde se ubica la VM.
    • CONFIGS.json: El archivo de configuración que contiene la configuración de emisión del certificado, la configuración de confianza y la identidad de la carga de trabajo administrada.

Accede a las credenciales de cargas de trabajo en una VM de Linux

Después de configurar correctamente la carga de trabajo en la autenticación de la carga de trabajo mediante mTLS, puedes acceder a las credenciales emitidas en la VM.

Existen dos formas de acceder a las credenciales de Workload Identity administradas de Compute Engine y al paquete de confianza asociado:

  • El sistema de archivos en la VM
  • El servidor de metadatos de Compute Engine

Accede a las credenciales de la carga de trabajo y al paquete de confianza mediante el sistema de archivos en la VM

Este método coloca las credenciales X.509 y el paquete de confianza en una ruta específica dentro del sistema de archivos de la VM. Las aplicaciones pueden leer directamente las credenciales y el paquete de confianza desde el sistema de archivos. Para ver ejemplos de cómo recuperar las credenciales, consulta los siguientes ejemplos en GitHub:

La VM debe ejecutar la versión 20231103.01 o posterior del agente invitado de Compute Engine. Usa el siguiente comando para verificar la versión del agente invitado de Compute Engine en tu VM:

gcloud compute instances get-serial-port-output INSTANCE_NAME | grep "GCE Agent Started"

Si la versión del agente invitado es inferior a 20231103.01, puedes actualizarla si sigues las instrucciones en Actualiza el entorno invitado.

Para que las credenciales de la carga de trabajo y el paquete de confianza estén disponibles en el sistema de archivos de una VM, completa los siguientes pasos:

  1. Instala o actualiza el agente invitado de Compute Engine a la versión 20231103.01 o posterior. El agente invitado realiza las siguientes acciones:

    • Recupera de forma automática las credenciales y el paquete de confianza del servidor de metadatos de Compute Engine.
    • Garantiza escrituras atómicas en el sistema de archivos mientras actualiza el certificado X.509 y la clave privada correspondiente.
    • Actualiza de manera automática las credenciales y el paquete de confianza, por ejemplo, cuando se rotan los certificados mTLS.
  2. Después de instalar o actualizar el agente invitado de Compute Engine en el SO invitado, el trabajo de actualización de la carga de trabajo crea el directorio /var/run/secrets/workload-spiffe-credentials y establece los permisos del directorio en 0755 (rwxr-xr-x).

    El directorio contiene los siguientes archivos creados con permisos 0644 (rw-r--r--):

    • private_key.pem: una clave privada con formato PEM.
    • certificates.pem: un conjunto de certificados X.509 con formato PEM que se puede presentar a otras VMs como la cadena de certificados de cliente o usar como una cadena de certificados de servidor.
    • ca_certificates.pem: un conjunto de certificados X.509 con formato PEM que se usa como anclajes de confianza cuando se validan los certificados de pares.

      spiffe://POOL_ID.global.PROJECT_NUMBER.workload.id.goog
      
    • config_status: un archivo de registro que contiene mensajes de error

  3. Las aplicaciones pueden leer los certificados, la clave privada y el paquete de confianza del sistema de archivos directamente para establecer conexiones mTLS.

Accede a las credenciales de la carga de trabajo y al paquete de confianza mediante el servidor de metadatos

Una aplicación que se ejecuta en una VM de Compute Engine puede consultar directamente los extremos del servidor de metadatos y recuperar las credenciales y el paquete de confianza. La aplicación es responsable de verificar de manera periódica los extremos del servidor de metadatos en busca de credenciales y actualizaciones nuevas del paquete de confianza.

El servidor de metadatos de Compute Engine expone tres extremos HTTP para habilitar el uso de la función de identidades de cargas de trabajo administradas por las aplicaciones que se ejecutan dentro de la VM.

  • gce-workload-certificates/config-status: Un extremo que contiene cualquier error en los valores de configuración proporcionados a través de los metadatos de la VM.
  • gce-workload-certificates/workload-identities: Un extremo de identidades administradas por el plano de control de Compute Engine. Este extremo contiene el certificado X.509 y la clave privada para el dominio de confianza de la VM.
  • gce-workload-certificates/trust-anchors: Un extremo que contiene un conjunto de certificados de confianza para la validación de la cadena de certificados de par X.509.

Para obtener más información sobre cómo consultar los metadatos de una instancia de VM, consulta Información sobre los metadatos de VM.

Para acceder a las credenciales de la carga de trabajo y al paquete de confianza mediante el servidor de metadatos, tu aplicación debe hacer lo siguiente:

  1. Consulta el extremo gce-workload-certificates/config-status. Asegúrate de que el código de respuesta HTTP sea 200 y que la respuesta no contenga ningún error partnerMetadataConfigsErrors. Si existen estos errores, actualiza la configuración adecuada con valores válidos mediante los pasos que se analizan en Actualiza la emisión de certificados y la configuración de confianza.

    Para verificar el valor, puedes ejecutar el siguiente comando en la VM:

    curl "http://metadata.google.internal/computeMetadata/v1/instance/gce-workload-certificates/config-status" -H "Metadata-Flavor: Google"
    

    El extremo config-status muestra una respuesta JSON con la siguiente estructura:

    {
        "partnerMetadataConfigsErrors": {
            "errors": {  // A map of errors keyed by attribute name.
                "ATTRIBUTE_NAME" : "ERROR_DETAILS",
                ...
            }
        }
    }
    
  2. Consulta el extremo gce-workload-certificates/workload-identities. Asegúrate de que el código de respuesta HTTP sea 200. El extremo muestra una respuesta JSON con la siguiente estructura:

    {
     "workloadCredentials": {  // Credentials for the VM's trust domains
       "spiffe://POOL_ID.global.PROJECT_NUMBER.workload.id.goog/ns/NAMESPACE_ID/sa/MANAGED_IDENTITY_ID": {
          "certificatePem" : "X.509 certificate or certificate chain",
          "privateKeyPem" : "Private for X.509 leaf certificate"
       }
     }
    }
    

    Extrae la certificatePem y la privateKeyPem. Es fundamental que ambos valores se lean desde la misma respuesta para evitar la discrepancia entre la clave privada y la pública en caso de que la infraestructura de Compute Engine haya actualizado las identidades de las cargas de trabajo administradas.

  3. Consulta el extremo gce-workload-certificates/trust-anchors. Asegúrate de que el código de respuesta HTTP sea 200. La respuesta solo contendrá las anclas de confianza para el dominio de confianza SPIFFE, si se especifica. De lo contrario, la consulta muestra un error. El extremo trust-anchors muestra una respuesta JSON con la siguiente estructura:

    {
        "trustAnchors": {  // Trust bundle for the VM's trust domains
            "POOL_ID.global.PROJECT_NUMBER.workload.id.goog": {
                "trustAnchorsPem" : "Trust bundle containing the X.509
                roots certificates"
            }
        }
    }
    

    El contenido de trustAnchorsPem contiene el paquete de confianza que se puede usar para autenticar las credenciales de par X.509 cuando se establece una conexión mTLS.

Actualiza el paquete de confianza y las credenciales

El plano de control de Compute Engine rota automáticamente las credenciales de identidad de la carga de trabajo administradas y las anclas de confianza de forma periódica.

Si tus aplicaciones usan el sistema de archivos para acceder a las credenciales de la carga de trabajo y al paquete de confianza, el agente invitado de Compute Engine actualiza de forma automática las credenciales y el paquete de confianza, por ejemplo, cuando se rotan los certificados de mTLS.

Si tus aplicaciones consultan el servidor de metadatos, las aplicaciones que se ejecutan en una VM deben consultar de forma periódica los extremos del servidor de metadatos para obtener el último conjunto de credenciales administradas de Workload Identity y el paquete de confianza. De lo contrario, las aplicaciones pueden interrumpirse debido al vencimiento del certificado o los cambios en el paquete de confianza, lo que puede hacer que el establecimiento de la conexión mTLS falle. Google recomienda que las aplicaciones consulten el servidor de metadatos para obtener las credenciales de Workload Identity administradas y el paquete de confianza cada 5 minutos.

Actualiza la configuración de la emisión de certificados y la confianza

Puedes modificar la configuración de emisión de certificados y la configuración de confianza para una VM que usa identidades de carga de trabajo administradas.

Actualiza la plantilla de instancias para un grupo de instancias administrado

Para actualizar la configuración de la emisión de certificados y los valores de configuración de confianza en una plantilla de instancias, debes crear una plantilla nueva con los valores nuevos. Por lo tanto, no se admite la actualización de la configuración de emisión de certificados y de confianza para los grupos de instancias administrados (MIG) existentes.

Actualiza VMs individuales de Compute Engine

Para actualizar la configuración de emisión de certificados y la configuración de confianza, actualiza el contenido del archivo CONFIGS.json y usa el comando gcloud beta compute instances update para aplicar las actualizaciones:

gcloud beta compute instances update INSTANCE_NAME \
    --partner-metadata-from-file FILENAME.json

Reemplaza lo siguiente:

  • INSTANCE_NAME: Es el nombre de la VM para la que actualizas los valores de configuración.
  • FILENAME: El nombre del archivo de configuración modificado, por ejemplo, CONFIGS.json

Solución de problemas

Si deseas encontrar métodos para diagnosticar y resolver errores comunes relacionados con la recuperación de credenciales de carga de trabajo, consulta la documentación Soluciona problemas de autenticación de carga de trabajo.

¿Qué sigue?