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


Este documento describe cómo configurar el aprovisionamiento automático y la administración del ciclo de vida de identidades de cargas de trabajo administradas para Compute Engine. Los grupos de CA se configuran para emitir certificados mediante el Servicio de autoridad de certificación (CA) , que es un servicio escalable y de alta disponibilidad. Google Cloud servicio que simplifica y automatiza la implementación, gestión y seguridad de los servicios de CA. Cada máquina virtual recibe credenciales X.509 del grupo de CA configurado. Estas credenciales se pueden utilizar para establecer conexiones mTLS.

Con las identidades de carga de trabajo administradas para Compute Engine, puedes implementar comunicaciones cifradas y autenticadas mutuamente entre dos máquinas virtuales de Compute Engine. Las aplicaciones de carga de trabajo que se ejecutan en las máquinas virtuales configuradas pueden usar las credenciales X.509 para mTLS por máquina virtual. Estos certificados mTLS son rotados y administrados automáticamente por el Servicio de Autoridad de Certificación.

Antes de comenzar

  • Solicite acceso a la vista previa de la identidad de la carga de trabajo administrada .

  • Configure la CLI de Google Cloud.

    After installing the Google Cloud CLI, initialize it by running the following command:

    gcloud init

    If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

  • Configure la CLI de Google Cloud para utilizar el proyecto incluido en la lista permitida para facturación y cuota.

      gcloud config set billing/quota_project PROJECT_ID

    Reemplace PROJECT_ID con el ID del proyecto que se agregó a la lista de permitidos para la vista previa de la identidad de la carga de trabajo administrada.

  • Revise la documentación de descripción general de identidades de cargas de trabajo administradas .
  • Enable the Compute Engine API:

    gcloud services enable compute.googleapis.com

Roles requeridos

Para obtener los permisos que necesita para crear máquinas virtuales que utilicen certificados de identidad de cargas de trabajo administradas para la autenticación en otras cargas de trabajo, solicite a su administrador que le otorgue las siguientes funciones de IAM en el proyecto:

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

También es posible que pueda obtener los permisos necesarios a través de roles personalizados u otros roles predefinidos .

Descripción general

Para utilizar identidades de carga de trabajo administradas para sus aplicaciones, debe realizar las siguientes tareas:

  1. Administrador de seguridad :

  2. Administrador de Computación :

Configurar identidades de cargas de trabajo administradas en Identity and Access Management

  • Siga las instrucciones en Configurar la autenticación de identidades de cargas de trabajo administradas .

    Estas instrucciones detallan cómo completar lo siguiente:

    • Cree un grupo de identidades de carga de trabajo.
    • Cree espacios de nombres en el grupo de identidades de carga de trabajo. Los espacios de nombres se utilizan para crear límites administrativos para las identidades de carga de trabajo administradas, por ejemplo, un espacio de nombres para cada una de las aplicaciones propiedad de su organización.
    • Cree una identidad de carga de trabajo administrada en un espacio de nombres en el grupo de identidades de carga de trabajo. Por ejemplo, puede crear un espacio de nombres para una aplicación y crear identidades administradas dentro de ese espacio de nombres para los microservicios que admiten esa aplicación.
    • Crea una cuenta de servicio. Las máquinas virtuales de Compute Engine se pueden autorizar para recibir una identidad de carga de trabajo administrada según la Google Cloud cuenta de servicio adjunta a la máquina virtual.
    • Cree una política de atestación de carga de trabajo que permita que su carga de trabajo reciba credenciales para la identidad de carga de trabajo administrada. Para emitir credenciales para la identidad de la carga de trabajo administrada, la carga de trabajo debe estar dentro de un proyecto específico y tener la cuenta de servicio adjunta.
    • Configure el Servicio de autoridad de certificación para emitir certificados para identidades de cargas de trabajo administradas:
      • Configurar el grupo de CA raíz
      • Configurar las CA subordinadas
      • Autorizar identidades de cargas de trabajo administradas para solicitar certificados del grupo de CA

Obtenga el archivo de configuración para cargar los metadatos del socio

Su administrador de seguridad crea un archivo JSON que contiene lo siguiente:

Este archivo debe llamarse CONFIGS.json . Utilice este archivo al crear una plantilla de instancia para MIG o al crear una VM individual.

El 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"
     }
  }
  }
  

Habilite identidades de cargas 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 tratan como una sola entidad. Cada VM en un MIG se crea utilizando una plantilla de instancia. Para permitir que las máquinas virtuales en MIG utilicen identidades de carga de trabajo administradas, especifique la configuración en la plantilla de instancia.

Crear una plantilla de instancia

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

nube de gcloud

Usa el comando gcloud beta compute instance-templates create para crear una nueva plantilla de instancia que permita 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

Puede agregar indicadores adicionales al crear la plantilla de instancia para personalizar las máquinas virtuales que crea, como especificar el tipo de máquina y la imagen, en lugar de usar los valores predeterminados.

Reemplace lo siguiente:

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

Para obtener más información, consulte Crear plantillas de instancias .

Crear un grupo de instancias administrado a partir de la plantilla

Cree un grupo de instancias administrado que utilice una plantilla de instancias que habilite las identidades de carga de trabajo administradas. Para obtener detalles sobre cómo crear la plantilla de instancia, consulte Crear una plantilla de instancia .

nube de gcloud

Crea un MIG usando la plantilla de instancia 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

Reemplace lo siguiente:

  • INSTANCE_GROUP_NAME : una ID única para el grupo de instancias administrado. Para obtener detalles sobre nombres válidos, consulte Recursos de nombres .
  • SIZE : el tamaño del grupo de instancias administrado
  • INSTANCE_TEMPLATE_NAME : el nombre de la plantilla de instancia que se utilizará al crear máquinas virtuales en el MIG.
  • ZONE : la zona para crear las VM en

Para obtener información detallada sobre la creación de MIG, consulte Escenarios básicos para crear grupos de instancias administrados (MIG).

Habilite identidades de cargas de trabajo administradas para máquinas virtuales individuales

Puede habilitar identidades de carga de trabajo administradas para una máquina virtual al crear la máquina virtual o actualizando los metadatos del socio para una máquina virtual existente.

Cree máquinas virtuales con identidades de carga de trabajo administradas habilitadas

Al crear una máquina virtual, para habilitar la característica de identidades de carga de trabajo administradas para la máquina virtual, debe hacer lo siguiente:

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

nube de gcloud

Usa el comando gcloud beta compute instances create para crear una nueva máquina virtual. Utilice el archivo CONFIGS.json proporcionado por su administrador de seguridad o creado siguiendo las instrucciones en Crear un archivo de configuración para cargar los metadatos del socio .

  1. Cree una máquina virtual con la característica 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
    

    Puede 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, consulte Crear e iniciar una instancia de VM .

    Reemplace lo siguiente:

    • INSTANCE_NAME : un nombre único para la VM. Para obtener detalles sobre nombres de instancias válidos, consulte Nombre de recursos .
    • INSTANCE_ZONE : la zona para 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 donde 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 carga de trabajo administrada.

Habilite identidades de cargas de trabajo administradas en máquinas virtuales existentes

Para habilitar identidades de carga de trabajo administradas para una máquina virtual existente, actualice la máquina virtual para configurar lo siguiente:

  • Si la VM aún no tiene una cuenta de servicio adjunta, cree y adjunte una cuenta de servicio a la VM.
  • Establezca el atributo de metadatos enable-workload-certificate en true .
  • Especifique la configuración de emisión del certificado y la información de configuración de confianza como metadatos del socio .
  • Reinicie la máquina virtual.

nube de gcloud

Esta tarea utiliza el archivo CONFIGS.json proporcionado por su administrador de seguridad o creado siguiendo las instrucciones en Crear un archivo de configuración para cargar los metadatos del socio .

  1. Si la VM aún no tiene una cuenta de servicio adjunta, adjunte la cuenta de servicio a la VM .

  2. Actualice los metadatos de una máquina virtual existente para habilitar identidades de carga de trabajo administradas.

    gcloud beta compute instances add-metadata VM_NAME \
       --zone=ZONE \
       --metadata enable-workload-certificate=true
    

    Reemplace lo siguiente:

    • VM_NAME : el nombre de la VM
    • ZONE : la zona donde se encuentra la VM
  3. Actualice la configuración de una VM existente para agregar el archivo de configuración.

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

    Reemplace lo siguiente:

    • VM_NAME : el nombre de la VM
    • ZONE : la zona donde se encuentra la VM
    • CONFIGS.json : el archivo de configuración que contiene la configuración de emisión de certificados, la configuración de confianza y la identidad de la carga de trabajo administrada.
  4. Detenga la máquina virtual.

    gcloud beta compute instances stop VM_NAME \
       --zone=ZONE
    

    Reemplace lo siguiente:

    • VM_NAME : el nombre de la VM
    • ZONE : la zona donde se encuentra la VM.
  5. Inicie la máquina virtual.

    gcloud beta compute instances start VM_NAME \
       --zone=ZONE
    

    Reemplace lo siguiente:

    • VM_NAME : el nombre de la VM
    • ZONE : la zona donde se encuentra la VM.

Acceda a las credenciales de carga de trabajo en una máquina virtual Linux

Después de configurar correctamente la carga de trabajo para la autenticación de carga de trabajo mediante mTLS, puede acceder a las credenciales emitidas en su máquina virtual.

Hay dos formas de acceder a las credenciales de identidad de la carga de trabajo administrada de Compute Engine y al paquete de confianza asociado:

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

Acceda a las credenciales de la carga de trabajo y al paquete de confianza mediante el sistema de archivos de la máquina virtual

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, consulte los siguientes ejemplos en GitHub:

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

gcloud beta compute instances get-serial-port-output INSTANCE_NAME \
   --zone=ZONE | grep "GCE Agent Started"

Si la versión del agente invitado es inferior a 20231103.01, puede actualizarla siguiendo las instrucciones en Actualización del entorno invitado .

Para que las credenciales de carga de trabajo y el paquete de confianza estén disponibles en el sistema de archivos de una máquina virtual, complete los siguientes pasos:

  1. Instale o actualice el agente invitado de Compute Engine a la versión 20231103.01 o posterior. El agente invitado hace lo siguiente:

    • Recupera automáticamente 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 automáticamente 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 sistema operativo 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 paquete de certificados X.509 con formato PEM que se pueden presentar a otras máquinas virtuales como la cadena de certificados del cliente o usarse como una cadena de certificados del servidor.
    • ca_certificates.pem : un paquete de certificados X.509 con formato PEM para utilizar como anclajes de confianza al validar 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.

Acceda a las credenciales de 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 puntos finales del servidor de metadatos y recuperar las credenciales y el paquete de confianza. La aplicación es responsable de comprobar periódicamente los puntos finales del servidor de metadatos en busca de nuevas credenciales y actualizaciones del paquete de confianza.

El servidor de metadatos de Compute Engine expone tres puntos finales HTTP para permitir el uso de la función de identidades de carga de trabajo administradas por parte de las aplicaciones que se ejecutan dentro de la VM.

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

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

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

  1. Consulta el punto final gce-workload-certificates/config-status . Asegúrese de que el código de respuesta HTTP sea 200 y que la respuesta no contenga ningún error partnerMetadataConfigsErrors . Si existen tales errores, actualice la configuración adecuada con valores válidos siguiendo los pasos descritos en Actualización de la emisión de certificados y la configuración de confianza .

    Para verificar el valor, puede 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 punto final config-status devuelve una respuesta JSON con la siguiente estructura:

    {
        "partnerMetadataConfigsErrors": {
            "errors": {  // A map of errors keyed by attribute name.
                "ATTRIBUTE_NAME" : "ERROR_DETAILS",
                ...
            }
        }
    }
    
  2. Consulta el punto final gce-workload-certificates/workload-identities . Asegúrese de que el código de respuesta HTTP sea 200 . El punto final devuelve 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"
       }
     }
    }
    

    Extraiga el certificatePem y el privateKeyPem . Es fundamental que ambos valores se lean de la misma respuesta para evitar discrepancias entre la clave pública y privada en caso de que la infraestructura de Compute Engine actualice las identidades de la carga de trabajo administrada.

  3. Consulta el punto final gce-workload-certificates/trust-anchors . Asegúrese de que el código de respuesta HTTP sea 200 . La respuesta solo contendrá los anclajes de confianza para el dominio de confianza SPIFFE, si se especifica. De lo contrario, la consulta devuelve un error. El punto final trust-anchors devuelve 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 luego se puede utilizar para autenticar las credenciales X.509 del mismo nivel al establecer una conexión mTLS.

Actualización de las credenciales y el paquete de confianza

El plano de control de Compute Engine rota automáticamente las credenciales de identidad de la carga de trabajo administrada y los anclajes de confianza periódicamente.

Si sus 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 automáticamente las credenciales y el paquete de confianza, por ejemplo, cuando se rotan los certificados mTLS.

Si sus aplicaciones consultan el servidor de metadatos, las aplicaciones que se ejecutan en una máquina virtual deben consultar periódicamente los puntos finales del servidor de metadatos para obtener el conjunto más reciente de credenciales de identidad de carga de trabajo administradas y el paquete de confianza. No hacerlo puede dañar las aplicaciones debido a la caducidad del certificado o a cambios en el paquete de confianza, lo que puede provocar que falle el establecimiento de la conexión mTLS. Google recomienda que las aplicaciones consulten el servidor de metadatos para obtener las credenciales de identidad de la carga de trabajo administrada y el paquete de confianza cada 5 minutos.

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

Puede modificar la configuración de emisión de certificados y la configuración de confianza para una máquina virtual que utiliza identidades de carga de trabajo administradas.

Actualizar la plantilla de instancias para un grupo de instancias administrado

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

Actualizar máquinas virtuales de Compute Engine individuales

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

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

Reemplace lo siguiente:

  • INSTANCE_NAME : el nombre de la máquina virtual para la que está actualizando los valores de configuración.
  • FILENAME : El nombre del archivo de configuración modificado, por ejemplo CONFIGS.json

Solucionar problemas

Para encontrar métodos para diagnosticar y resolver errores comunes relacionados con la recuperación de credenciales de carga de trabajo, consulte la documentación sobre solución de problemas de autenticación de carga de trabajo a carga de trabajo .

¿Qué sigue?