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 :
-
Install the Google Cloud CLI, then initialize it by running the following command:
gcloud init
- Set a default region and zone.
-
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 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"
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:
Si la réponse est un code d'erreur
HTTP 404
avec le message d'erreurworkload 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.
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é.
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.
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'erreurworkload 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:
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.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.
Si le fichier
config_status
ne contient aucun message d'erreur, vérifiez la valeur deiam.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.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 SPIFFEPOOL_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.Si le fichier
config_status
contient 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.
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'erreurworkload 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.