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.

Pour en savoir plus, consultez Résoudre les problèmes liés à la fédération d'identité de charge de travail.

Avant de commencer

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 instance de calcul est compatible avec l'authentification de charge de travail à charge de travail en utilisant l'une des interfaces suivantes pour vérifier que les identités de charge de travail gérées sont activées :

    Console

    1. Dans la console Google Cloud , accédez à la page Instances de VM.

      Accéder à la page Instances de VM

    2. Dans la colonne Nom de la page Instances de VM, cliquez sur le nom de l'instance pour afficher des informations supplémentaires à son sujet.

    3. Dans la section Sécurité et accès de la page Détails, vérifiez que la valeur de "Certificats Workload Identity" est définie sur "Activé".

    gcloud

    Pour savoir si la fonctionnalité d'identités de charge de travail gérées est activée pour une instance de calcul, utilisez la commande gcloud alpha compute instances describe.

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

    Remplacez les éléments suivants :

    • INSTANCE_NAME : nom de l'instance.

    • ZONE : zone où se trouve l'instance.

    REST

    Pour afficher les détails d'une instance de calcul, envoyez une requête GET à la méthode instances.get. En ajoutant un paramètre de requête $fields à la requête, vous pouvez limiter la sortie aux seuls champs qui vous intéressent.

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

    Remplacez les éléments suivants :

    • PROJECT_ID : ID du projet dans lequel se trouve l'instance

    • ZONE : zone où se trouve l'instance

    • INSTANCE_NAME : nom de l'instance

  2. Examinez les valeurs d'instance pour identityCertificate et identity.

  3. Si la propriété identityCertificate est définie sur false, cela signifie que cette instance de calcul n'est pas compatible avec cette fonctionnalité.

    Pour résoudre ce problème, créez une instance compatible avec l'authentification de charge de travail à charge de travail. Pour en savoir plus, consultez Activer les identités de charge de travail gérées sur les VM existantes.

  4. 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 INSTANCE_NAME | grep "GCE Agent Started"
    

    Remplacez INSTANCE_NAME par le nom de l'instance de calcul.

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

  5. Consultez les journaux de service pour vérifier que le minuteur systemd 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 valeurs appropriées, le fichier journal contient le message d'erreur workload certificate feature not enabled.

    Pour résoudre ce problème, créez une instance de calcul 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/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
    

    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 instance de calcul 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 l'instance.

  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 à l'instance de calcul. 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.