Soluciona problemas de autenticación de carga de trabajo a carga de trabajo

En este documento, se explica cómo solucionar errores comunes relacionados con Autentica cargas de trabajo en otras cargas de trabajo a través de mTLS.

Para obtener más información, consulta Soluciona problemas de la federación de identidades para cargas de trabajo.

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:
    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. Configura una región y una zona predeterminadas.

No existe el directorio de credenciales generado

Si recibes un error que indica que el directorio /var/run/secrets/workload-spiffe-credentials no existe, haz lo siguiente:

  1. Asegúrate de que tu instancia de procesamiento admita la autenticación de carga de trabajo a carga de trabajo con una de las siguientes interfaces para verificar que las identidades de cargas de trabajo administradas estén habilitadas:

    Console

    1. En la consola de Google Cloud , ve a la página Instancias de VM.

      Ir a Instancias de VM

    2. En la columna Nombre de la página Instancias de VM, haz clic en el nombre de la instancia para ver detalles adicionales sobre ella.

    3. En la sección Seguridad y acceso de la página Detalles, verifica que "Certificados de identidad de carga de trabajo" tenga el valor "Habilitado".

    gcloud

    Para ver si la función de identidades para cargas de trabajo administradas está habilitada para una instancia de procesamiento, usa el comando gcloud alpha compute instances describe.

    gcloud alpha compute instances describe INSTANCE_NAME \
        --zone=ZONE \
        --format="table(name,zone,identityCertificate)"
    

    Reemplaza lo siguiente:

    • INSTANCE_NAME: El nombre de la instancia.

    • ZONE: Es la zona en la que se encuentra la instancia.

    REST

    Para ver los detalles de una instancia de procesamiento, realiza una solicitud GET al método instances.get. Si agregas un parámetro de consulta $fields a la solicitud, puedes restringir el resultado solo a los campos que te interesan.

    GET https://compute.googleapis.com/compute/alpha/projects/PROJECT_ID/zones/ZONE/instances/INSTANCE_NAME$fields=name,identityCertificate,identity
    

    Reemplaza lo siguiente:

    • PROJECT_ID: ID del proyecto en el que se encuentra la instancia

    • ZONE: Es la zona en la que se encuentra la instancia.

    • INSTANCE_NAME: Es el nombre de la instancia.

  2. Revisa los valores de instancia para identityCertificate y identity.

  3. Si la propiedad identityCertificate está establecida en false, esta instancia de procesamiento no admite esta función.

    Para resolver este problema, crea una instancia nueva que admita la autenticación de carga de trabajo a carga de trabajo. Para obtener más información, consulta Habilita identidades de cargas de trabajo administradas en VMs existentes.

  4. Asegúrate de que la VM ejecute un SO invitado con la versión 20231103.01 o posterior del agente invitado de Compute Engine. Usa la CLI de gcloud para fin de ver el resultado del puerto en serie para determinar la versión actual del agente invitado de Compute Engine:

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

    Reemplaza INSTANCE_NAME por el nombre de la instancia de procesamiento.

    Para actualizar el agente invitado de Compute Engine, consulta Actualiza el entorno invitado.

  5. Consulta los registros del servicio para verificar que el temporizador gce-workload-cert-refresh.timer de systemd pudo recuperar correctamente las credenciales de la carga de trabajo y el paquete de confianza.

    # View timer logs to see when the gce-workload-cert-refresh.timer last ran
    journalctl -u gce-workload-cert-refresh.timer
    
    # View service logs from gce-workload-cert-refresh.service
    journalctl -u gce-workload-cert-refresh.service
    

El directorio de credenciales generado solo contiene el archivo config_status

El directorio de credenciales generado, /var/run/secrets/workload-spiffe-credentials, podría contener solo el archivo config_status por varios motivos. Sigue estos pasos para solucionar el problema.

  1. Verifica el contenido del archivo config_status para asegurarte de que la función de identidades de cargas de trabajo administradas esté habilitada. Si la función no se habilita con los valores adecuados, el archivo de registro contendrá el mensaje de error workload certificate feature not enabled.

    Para resolver este problema, crea una instancia de procesamiento nueva que admita la autenticación de carga de trabajo a carga de trabajo con uno de los siguientes métodos:

  2. Verifica el contenido del archivo config_status para asegurarte de que no haya errores debido a valores de atributos faltantes o a una configuración no válida para la emisión de certificados o la configuración de confianza. Si existen tales errores, sigue los pasos que se indican en Actualiza la emisión de certificados y la configuración de confianza para actualizar los valores de configuración.

  3. Asegúrate de que se hayan otorgado los permisos correctos a las identidades para cargas de trabajo administradas en el grupo de identidades para cargas de trabajo para acceder a los grupos de AC subordinados. Usa el siguiente comando:

    gcloud privateca pools get-iam-policy SUBORDINATE_CA_POOL_ID \
       --location=SUBORDINATE_CA_POOL_REGION
    

    Reemplaza lo siguiente:

    • SUBORDINATE_CA_POOL_ID: el ID del grupo de CA subordinado.
    • SUBORDINATE_CA_POOL_REGION: la región del grupo de AC subordinado.

    El resultado de este comando debería contener lo siguiente:

    bindings:
    - members:
      - principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/name/locations/global/workloadIdentityPools/POOL_ID/*
      -
      role: roles/privateca.poolReader
    - members:
      - principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/name/locations/global/workloadIdentityPools/POOL_ID/*
      role: roles/privateca.workloadCertificateRequester
    

    En el ejemplo anterior, ocurre lo siguiente:

    • PROJECT_NUMBER: el número de tu proyecto.
    • POOL_ID es el ID del grupo de Workload Identity

    Si no ves un resultado similar al del ejemplo anterior, otorga los permisos necesarios como se describe en Autoriza identidades para cargas de trabajo administradas para solicitar certificados del grupo de AC.

  4. Si el archivo config_status no contiene mensajes de error, verifica el valor de iam.googleapis.com/workload-identity dentro del archivo. El valor debe coincidir con lo siguiente:

    spiffe://POOL_ID.global.PROJECT_NUMBER.workload.id.goog/ns/NAMESPACE_ID/sa/MANAGED_IDENTITY_ID
    

    En el ejemplo anterior, ocurre lo siguiente:

    • PROJECT_NUMBER es el número del proyecto que contiene el grupo de identidades para cargas de trabajo administradas.
    • POOL_ID es el ID del grupo de Workload Identity
    • NAMESPACE_ID es el ID del espacio de nombres en el grupo de Workload Identity.
    • MANAGED_IDENTITY_ID es el ID de la identidad para cargas de trabajo administrada.

    Si el valor de iam.googleapis.com/workload-identity es incorrecto, debes crear una instancia de procesamiento nueva con el valor correcto, ya que el valor de la identidad administrada solo se puede actualizar durante la creación de la instancia.

  5. Si el archivo config_status no contiene mensajes de error, asegúrate de que la configuración de confianza contenga una entrada válida para el dominio de confianza SPIFFE POOL_ID.global.PROJECT_NUMBER.workload.id.goog, que corresponde al dominio de confianza SPIFFE en la identidad administrada asignada a la instancia de procesamiento. Para obtener más información, consulta Cómo definir la configuración de confianza.

  6. Si el archivo config_status contiene mensajes de error con el código de error INTERNAL_ERROR, comunícate con el servicio de Atención al cliente de Cloud o con tu contacto de Google Cloud y envíales el mensaje de error.