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.

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. Install the Google Cloud CLI, then initialize it by running the following command:

      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 dentro de la VM para asegurarte de que esta admita la autenticación de carga de trabajo a 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, esta VM no admite 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 el problema, crea una VM nueva que admita la autenticación de carga de trabajo a carga de trabajo con 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 el agente invitado de Compute Engine versión 20231103.01 o una posterior. 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. Verifica los registros del servicio para verificar que gce-workload-cert-refresh.timer haya recuperado de forma correcta 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 config_status por diversos motivos. Sigue estos pasos para solucionar este 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 está habilitada con 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 carga de trabajo a 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 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/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: 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 de proyecto 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 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 porque 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 se asigna la identidad administrada a la VM. Para obtener más información, consulta Define 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.

Si consultas los extremos del servidor de metadatos, se 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 cargas de trabajo administradas. Para ello, ejecuta el 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 para cargas 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 para cargas 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 AC 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 para cargas de trabajo administradas para solicitar certificados del grupo de AC.

  • 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, ya que el valor de identidad administrado 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.