Résoudre les problèmes d'authentification de charge de travail à charge de travail


Ce document explique comment résoudre les erreurs courantes liées à l'authentification des charges de travail auprès d'autres charges de travail via mTLS.

Avant de commencer

  • Si ce n'est pas déjà fait, configurez l'authentification. L'authentification est le processus permettant de valider votre identité pour accéder aux services et aux API Google Cloud. Pour exécuter du code ou des exemples depuis un environnement de développement local, vous pouvez vous authentifier auprès de Compute Engine comme suit :
    1. Installez Google Cloud CLI, puis initialisez-la en exécutant la commande suivante :

      gcloud init
    2. Définissez une région et une zone par défaut.

Le répertoire des identifiants généré n'existe pas

Si vous obtenez un message d'erreur indiquant que le répertoire /var/run/secrets/workload-spiffe-credentials n'existe pas, procédez comme suit:

  1. Assurez-vous que votre VM est compatible avec l'authentification de charge de travail à charge de travail en exécutant la commande suivante à partir de la VM.

    curl  "http://metadata.google.internal/computeMetadata/v1/instance/gce-workload-certificates/config-status" -H "Metadata-Flavor: Google"
    
    1. Si la réponse est un code d'erreur HTTP 404 avec le message d'erreur suivant, cette VM n'est pas compatible avec cette fonctionnalité.

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

      Pour résoudre ce problème, créez une VM compatible avec l'authentification de charge de travail à charge de travail à l'aide de l'une des méthodes suivantes:

    2. Si la réponse est un code d'erreur HTTP 404 avec le message d'erreur workload certificate feature not enabled, la VM est compatible avec les identités de charge de travail gérées, mais la fonctionnalité n'est pas activée. Pour activer la fonctionnalité sur la VM, consultez la section Activer les identités de charge de travail gérées sur les VM existantes.

  2. Vérifiez que la VM exécute un système d'exploitation invité avec l'agent invité Compute Engine version 20231103.01 ou ultérieure. Utilisez gcloud CLI pour afficher la sortie du port série afin de déterminer la version actuelle de l'agent invité Compute Engine:

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

    Remplacez VM_NAME par le nom de la VM.

    Pour mettre à jour l'agent invité Compute Engine, consultez la section Mettre à jour l'environnement invité.

  3. Consultez les journaux de service pour vérifier que gce-workload-cert-refresh.timer a pu récupérer les identifiants de la charge de travail et le groupe de confiance.

    # 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
    

Le répertoire des identifiants générés ne contient que le fichier config_status.

Le répertoire d'identifiants généré, /var/run/secrets/workload-spiffe-credentials, peut ne contenir que config_status pour diverses raisons. Pour résoudre ce problème, procédez comme suit.

  1. Vérifiez le contenu du fichier config_status pour vous assurer que la fonctionnalité des identités de charge de travail gérées est activée. Si la fonctionnalité n'est pas activée à l'aide des métadonnées de VM appropriées, le fichier journal contient le message d'erreur workload certificate feature not enabled.

    Pour résoudre ce problème, créez une VM compatible avec l'authentification de charge de travail à charge de travail à l'aide de l'une des méthodes suivantes:

  2. Vérifiez le contenu du fichier config_status pour vous assurer qu'il n'y a pas d'erreur due à des valeurs d'attribut manquantes ou à une configuration non valide pour l'émission du certificat ou la configuration de confiance. Si de telles erreurs existent, mettez à jour les valeurs de configuration en suivant les étapes décrites dans la section Mettre à jour la configuration de l'émission de certificats et de confiance.

  3. Assurez-vous que les autorisations appropriées ont été accordées aux identités de charge de travail gérées du pool d'identités de charge de travail pour accéder aux pools d'autorités de certification subordonnés. Exécutez la commande suivante :

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

    Remplacez les éléments suivants :

    • SUBORDINATE_CA_POOL_ID: ID du pool d'autorités de certification subordonnées.
    • SUBORDINATE_CA_POOL_REGION: région du pool d'autorités de certification subordonnées.

    Le résultat de cette commande doit contenir les éléments suivants:

    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
    

    Dans l'exemple précédent:

    • PROJECT_NUMBER est le numéro de votre projet.
    • POOL_ID : ID du pool d'identités de charge de travail

    Si aucun résultat semblable à l'exemple précédent ne s'affiche, accordez les autorisations requises, comme décrit dans la section Autoriser les identités de charge de travail gérées à demander des certificats à partir du pool d'autorités de certification.

  4. Si le fichier config_status ne contient aucun message d'erreur, vérifiez la valeur de iam.googleapis.com/workload-identity dans le fichier. La valeur doit correspondre à la suivante:

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

    Dans l'exemple précédent:

    • PROJECT_NUMBER est le numéro du projet contenant le pool d'identités de charge de travail gérées.
    • POOL_ID : ID du pool d'identités de charge de travail
    • NAMESPACE_ID est l'ID de l'espace de noms dans le pool d'identités de charge de travail.
    • MANAGED_IDENTITY_ID est l'ID de l'identité de charge de travail gérée.

    Si la valeur de iam.googleapis.com/workload-identity est incorrecte, vous devez créer une VM avec la valeur correcte, car la valeur de l'identité gérée ne peut être mise à jour que lors de la création de la VM.

  5. Si le fichier config_status ne contient aucun message d'erreur, assurez-vous que la configuration d'approbation contient une entrée valide pour le domaine d'approbation SPIFFE POOL_ID.global.PROJECT_NUMBER.workload.id.goog, qui correspond au domaine d'approbation SPIFFE sur l'identité gérée attribuée à la VM. Pour en savoir plus, consultez la section Définir la configuration de confiance.

  6. Si le fichier config_status contient des messages d'erreur comportant le code d'erreur INTERNAL_ERROR, contactez le service Cloud Customer Care ou votre contact Google Cloud en indiquant le message d'erreur.

L'interrogation des points de terminaison du serveur de métadonnées renvoie une erreur 404

Si vous obtenez une réponse 404 lors de l'interrogation du point de terminaison workload-identities ou trust-anchors, assurez-vous que la VM est compatible avec les identités de charge de travail gérées en exécutant la commande suivante à partir de la VM:

curl  "http://metadata.google.internal/computeMetadata/v1/instance/gce-workload-certificates/config-status" -H "Metadata-Flavor: Google"
  • Si la réponse est un code d'erreur HTTP 404 avec le message d'erreur suivant:

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

    La VM n'est pas compatible avec les identités de charge de travail gérées. Pour résoudre le problème, effectuez l'une des opérations suivantes:

  • Si la réponse est un code d'erreur HTTP 404 avec le message d'erreur workload certificate feature not enabled, cette VM est compatible avec les identités de charge de travail gérées, mais la fonctionnalité n'est pas activée. Créez une VM avec la fonctionnalité activée, ou créez un modèle d'instance et un groupe d'instances géré.

  • Assurez-vous que les autorisations appropriées ont été accordées au pool d'identités de charge de travail pour accéder aux pools d'autorités de certification subordonnées en exécutant la commande suivante:

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

    Remplacez les éléments suivants :

    • SUBORDINATE_CA_POOL_ID: ID du pool d'autorités de certification subordonnées.
    • SUBORDINATE_CA_POOL_REGION: région du pool d'autorités de certification subordonnées.

    Le résultat de cette commande doit contenir les éléments suivants, où PROJECT_NUMBER est le numéro de votre projet et POOL_ID est l'ID du pool d'identités de charge de travail.

    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 le résultat ne contient pas ces valeurs, accordez les autorisations appropriées, comme décrit dans la section Autoriser les identités de charge de travail gérées à demander des certificats à partir du pool d'autorités de certification.

  • Assurez-vous que la valeur iam.googleapis.com/workload-identity est correcte et correspond aux éléments suivants:

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

    Si la valeur ne correspond pas, vous devez créer une VM, car la valeur de l'identité gérée ne peut pas être mise à jour après la création de la VM.

  • Vérifiez que la configuration de confiance contient une entrée valide pour le domaine de confiance SPIFFE POOL_ID.global.PROJECT_NUMBER.workload.id.goog, qui correspond au domaine de confiance SPIFFE de l'identité gérée attribuée à la VM.