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
-
Si ce n'est pas déjà fait, configurez l'authentification.
L'authentification permet 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 en sélectionnant l'une des options suivantes :
-
Installez la Google Cloud CLI. Une fois que la Google Cloud CLI est installée, initialisez-la en exécutant la commande suivante :
gcloud initSi vous utilisez un fournisseur d'identité (IdP) externe, vous devez d'abord vous connecter à la gcloud CLI avec votre identité fédérée.
- 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:
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
Dans la console Google Cloud , accédez à la page Instances de VM.
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.
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éthodeinstances.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'instanceZONE: zone où se trouve l'instanceINSTANCE_NAME: nom de l'instance
Examinez les valeurs d'instance pour
identityCertificateetidentity.Si la propriété
identityCertificateest définie surfalse, 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.
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é.
Consultez les journaux de service pour vérifier que le minuteur systemd
gce-workload-cert-refresh.timera 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.
Vérifiez le contenu du fichier
config_statuspour 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'erreurworkload 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 :
Vérifiez le contenu du fichier
config_statuspour 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.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.workloadCertificateRequesterDans 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.
Si le fichier
config_statusne contient aucun message d'erreur, vérifiez la valeur deiam.googleapis.com/workload-identitydans 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-identityest 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.Si le fichier
config_statusne contient aucun message d'erreur, assurez-vous que la configuration d'approbation contient une entrée valide pour le domaine d'approbation SPIFFEPOOL_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.Si le fichier
config_statuscontient des messages d'erreur comportant le code d'erreurINTERNAL_ERROR, contactez le service Cloud Customer Care ou votre contact Google Cloud en indiquant le message d'erreur.