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


Este documento explica cómo solucionar errores comunes relacionados con la autenticación de cargas de trabajo en otras cargas de trabajo a través de mTLS .

Antes de comenzar

  • Si aún no lo has hecho, configura la autenticación. La autenticación es el proceso mediante el cual se verifica su identidad para acceder a Google Cloud servicios y API. Para ejecutar código o muestras desde un entorno de desarrollo local, puedes autenticarte en Compute Engine seleccionando una de las siguientes opciones:
    1. 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.

    2. Set a default region and zone.

El directorio de credenciales generado no existe

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

  1. Asegúrese de que su máquina virtual admita la autenticación de carga de trabajo a carga de trabajo ejecutando el siguiente comando desde dentro de la máquina virtual.

    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 máquina virtual no admite esta característica.

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

      Para resolverlo, cree una nueva máquina virtual que admita la autenticación de carga de trabajo a 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 , entonces la máquina virtual admite identidades de carga de trabajo administradas, pero la característica no está habilitada. Para habilitar la función en la máquina virtual, consulte Habilitar identidades de cargas de trabajo administradas en máquinas virtuales existentes .

  2. Asegúrese de que la máquina virtual esté ejecutando un sistema operativo invitado con la versión 20231103.01 o posterior del agente invitado de Compute Engine. Usa la CLI de gcloud para ver el resultado del puerto serie y determinar la versión actual del agente invitado de Compute Engine:

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

    Reemplace VM_NAME con el nombre de la VM.

    Para actualizar el agente invitado de Compute Engine, consulte Actualización del entorno invitado .

  3. Verifique los registros de 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 contiene solo el archivo config_status

El directorio de credenciales generado, /var/run/secrets/workload-spiffe-credentials , puede contener solo config_status por diversas razones. Utilice los siguientes pasos para solucionar este problema.

  1. Verifique el contenido del archivo config_status para asegurarse de que la función de identidades de carga de trabajo administradas esté habilitada. Si la característica no está habilitada usando los metadatos de VM apropiados, el archivo de registro contiene el mensaje de error workload certificate feature not enabled .

    Para resolver este problema, cree una nueva máquina virtual que admita la autenticación de carga de trabajo a carga de trabajo mediante uno de los siguientes métodos:

  2. Verifique el contenido del archivo config_status para asegurarse 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 tales errores, actualice los valores de configuración siguiendo los pasos en Actualizar la emisión de certificados y la configuración de confianza .

  3. Asegúrese de que se hayan otorgado los permisos correctos a las identidades de carga de trabajo administradas en el grupo de identidades de carga de trabajo para acceder a los grupos de CA subordinados. Utilice el siguiente comando:

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

    Reemplace 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.

    La salida de este comando debe 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:

    • PROJECT_NUMBER es el número de proyecto de su proyecto.
    • POOL_ID es el ID del grupo de identidades de carga de trabajo.

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

  4. Si el archivo config_status no contiene mensajes de error, verifique 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:

    • PROJECT_NUMBER es el número de proyecto para el proyecto que contiene el grupo de identidades de carga de trabajo administrada.
    • POOL_ID es el ID del grupo de identidades de carga de trabajo.
    • NAMESPACE_ID es el ID del espacio de nombres en el grupo de identidades de carga de trabajo.
    • 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, debe crear una nueva máquina virtual con el valor correcto porque el valor de la identidad administrada solo se puede actualizar durante la creación de la máquina virtual.

  5. Si el archivo config_status no contiene mensajes de error, asegúrese 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. Para obtener más información, consulte Definir 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íquese con Atención al cliente de Cloud o su Google Cloud póngase en contacto con el mensaje de error.

La consulta de los puntos finales del servidor de metadatos devuelve un error 404

Si obtiene una respuesta 404 al consultar el punto final de workload-identities o trust-anchors , asegúrese de que la máquina virtual admita las identidades de carga de trabajo administradas ejecutando el siguiente comando desde dentro de la máquina virtual:

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 máquina virtual no admite identidades de cargas de trabajo administradas. Para resolver el problema, realice 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 , entonces esta máquina virtual admite identidades de carga de trabajo administradas, pero la característica no está habilitada. Cree una nueva VM con la función habilitada o cree una nueva plantilla de instancia y un grupo de instancias administrado.

  • Asegúrese de que se hayan otorgado los permisos correctos al grupo de identidades de carga de trabajo para acceder a los grupos de CA subordinados ejecutando el siguiente comando:

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

    Reemplace 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, donde PROJECT_NUMBER es el número de proyecto de su proyecto y POOL_ID es el ID del grupo de identidades de carga de trabajo.

    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 su salida no contiene estos valores, otorgue los permisos correctos, como se describe en Autorizar identidades de cargas de trabajo administradas para solicitar certificados del grupo de CA.

  • Asegúrese de que el valor de iam.googleapis.com/workload-identity sea correcto y 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, debe crear una nueva máquina virtual porque el valor de la identidad administrada no se puede actualizar después de crear la máquina virtual.

  • Asegúrese 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.