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


En este documento, se explica cómo solucionar errores comunes relacionados con la autenticación para cargas de trabajo en otras cargas de trabajo mediante mTLS.

Antes de comenzar

  • Configura la autenticación si aún no lo hiciste. La autenticación es el proceso mediante el cual se verifica tu identidad para acceder a los servicios y las API de Google Cloud. Para ejecutar código o muestras desde un entorno de desarrollo local, puedes autenticarte en Compute Engine de la siguiente manera.
    1. Instala Google Cloud CLI y, luego, inicializa la ejecución del siguiente comando:

      gcloud init
    2. Set a default region and zone.

El directorio de credenciales generado no existe

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

  1. Ejecuta el siguiente comando desde la VM para asegurarte de que la VM admita la autenticación de la carga de trabajo en la carga de trabajo.

    curl  "http://metadata.google.internal/computeMetadata/v1/instance/gce-workload-certificates/config-status" -H "Metadata-Flavor: Google"
    
    1. Si la respuesta es un código de error HTTP 404 con el siguiente mensaje de error, entonces esta VM no es compatible con esta función.

      The requested URL /computeMetadata/v1/instance/gce-workload-certificates/config-status
      was not found on this server.  That's all we know.
      

      Para resolver este problema, crea una VM nueva que admita la autenticación de la carga de trabajo en la carga de trabajo mediante uno de los siguientes métodos:

    2. Si la respuesta es un código de error HTTP 404 con el mensaje de error workload certificate feature not enabled, la VM admite identidades de carga de trabajo administradas, pero la función no está habilitada. Para habilitar la función en la VM, consulta Habilita identidades de carga de trabajo administradas en VMs existentes.

  2. 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 VM_NAME | grep "GCE Agent Started"
    

    Reemplaza VM_NAME por el nombre de la VM.

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

  3. Revisa los registros del servicio para verificar que gce-workload-cert-refresh.timer 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, puede contener solo el 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 carga de trabajo administradas esté habilitada. Si la función no está habilitada mediante los metadatos de VM adecuados, el archivo de registro contiene el mensaje de error workload certificate feature not enabled.

    Para resolver este problema, crea una VM nueva que admita la autenticación de la carga de trabajo en la carga de trabajo mediante 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 del certificado o la configuración de confianza. Si existen esos errores, actualiza los valores de configuración mediante los pasos que se indican en Actualiza la emisión de certificados y la configuración de confianza.

  3. Asegúrate de que se hayan otorgado los permisos correctos a las identidades de cargas de trabajo administradas en el grupo de identidades para cargas de trabajo para acceder a los grupos de CA 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 CA subordinado.

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

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

    En el ejemplo anterior, ocurre lo siguiente:

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

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

  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 de la carga de trabajo administrado.
    • 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 de la carga de trabajo administrada.

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

  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 el la identidad administrada que se asigna a la VM. Para obtener más información, consulta Define la configuración de confianza.

  6. Si el archivo config_status contiene algún mensaje 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 con el mensaje de error.

La consulta de los extremos del servidor de metadatos muestra un error 404

Si obtienes una respuesta 404 cuando consultas el extremo workload-identities o trust-anchors, asegúrate de que la VM admita las identidades de las cargas de trabajo administradas mediante la ejecución del siguiente comando desde la VM:

curl  "http://metadata.google.internal/computeMetadata/v1/instance/gce-workload-certificates/config-status" -H "Metadata-Flavor: Google"
  • Si la respuesta es un código de error HTTP 404 con el siguiente mensaje de error:

      The requested URL /computeMetadata/v1/instance/gce-workload-certificates/config-status
      was not found on this server.  That's all we know.
    

    La VM no admite identidades de carga de trabajo administradas. Para solucionar el problema, realiza una de las siguientes acciones:

  • Si la respuesta es un código de error HTTP 404 con el mensaje de error workload certificate feature not enabled, esta VM admite identidades de carga de trabajo administradas, pero la función no está habilitada. Crea una VM nueva con la función habilitada o crea una plantilla de instancias nueva y un grupo de instancias administrado.

  • Ejecuta el siguiente comando para asegurarte de que se hayan otorgado los permisos correctos al grupo de Workload Identity para acceder a los grupos de CA subordinados:

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

    El resultado de este comando debe contener lo siguiente, en el que PROJECT_NUMBER es el número del proyecto y POOL_ID es el ID del grupo de Workload Identity.

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

    Si tu resultado no contiene estos valores, otorga los permisos correctos, como se describe en Autoriza identidades de cargas de trabajo administradas para solicitar certificados del grupo de CA.

  • Asegúrate de que el valor iam.googleapis.com/workload-identity sea correcto y que coincida con lo siguiente:

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

    Si el valor no coincide, debes crear una VM nueva porque el valor de identidad administrada no se puede actualizar después de crear la VM.

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