Ce document explique comment configurer le provisionnement automatique et la gestion du cycle de vie des identités de charge de travail gérées pour Compute Engine. Vous configurez des pools d'autorités de certification pour émettre des certificats à l'aide de Certificate Authority Service (CA), un service Google Cloud hautement disponible et évolutif, qui simplifie et automatise le déploiement, la gestion et la sécurité des services CA. Chaque VM est provisionnée avec des identifiants X.509 provenant du pool d'autorités de certification configuré. Ces identifiants peuvent ensuite être utilisés pour établir des connexions mTLS.
Avec les identités de charge de travail gérées pour Compute Engine, vous pouvez mettre en œuvre des communications chiffrées et mutuellement authentifiées entre deux VM Compute Engine. Les applications de charge de travail exécutées sur les VM configurées peuvent utiliser les identifiants X.509 pour le protocole mTLS par VM. Ces certificats mTLS sont automatiquement alternés et gérés pour vous par Certificate Authority Service.
Avant de commencer
Demandez l'accès à la version bêta de l'identité de charge de travail gérée.
Configurez Google Cloud CLI
Install the Google Cloud CLI, then initialize it by running the following command:
gcloud init
Configurez la Google Cloud CLI afin d'utiliser le projet ajouté à la liste d'autorisation pour la facturation et les quotas.
gcloud config set billing/quota_project PROJECT_ID
Remplacez
PROJECT_ID
par l'ID du projet qui a été ajouté à la liste d'autorisation pour l'identité de charge de travail gérée en preview.- Consultez la documentation Présentation des identités de charge de travail gérées.
-
Enable the Compute Engine API:
gcloud services enable compute.googleapis.com
Rôles requis
Pour obtenir les autorisations nécessaires pour créer des VM qui utilisent des certificats d'identités de charge de travail gérées pour s'authentifier auprès d'autres charges de travail, demandez à votre administrateur de vous accorder les rôles IAM suivants sur le projet:
-
Administrateur d'instances Compute (v1) (
roles/compute.instanceAdmin.v1
) -
Utilisateur du compte de service (
roles/iam.serviceAccountUser
)
Pour en savoir plus sur l'attribution de rôles, consultez la section Gérer les accès.
Vous pouvez également obtenir les autorisations requises via des rôles personnalisés ou d'autres rôles prédéfinis.
Présentation
Pour utiliser des identités de charge de travail gérées pour vos applications, vous devez effectuer les tâches suivantes:
Administrateur de la sécurité
- Créez des identités de charge de travail gérées dans un pool d'identités de charge de travail.
- Définissez la règle d'attestation de charge de travail.
- Configurez Certificate Authority Service pour émettre des certificats pour les identités de charge de travail gérées.
- Autorisez les identités de charge de travail gérées à demander des certificats à partir du pool d'autorités de certification.
- Définissez la configuration d'approbation et d'émission de certificats.
Administrateur de Compute:
- Obtenez le fichier de configuration pour importer les métadonnées du partenaire.
- Activez les identités de charge de travail gérées pour les charges de travail exécutées dans Compute Engine :
- Pour les VM individuelles
- Pour les groupes d'instances gérés (MIG).
- Accédez aux identifiants de la charge de travail sur une VM Linux.
Configurer des identités de charge de travail gérées dans Identity and Access Management
Suivez les instructions de la section Configurer l'authentification des identités de charge de travail gérées.
Ces instructions expliquent comment effectuer les opérations suivantes:
- Créez un pool d'identités de charge de travail.
- Créez des espaces de noms dans le pool d'identités de charge de travail. Vous utilisez les espaces de noms pour créer des limites administratives pour vos identités de charge de travail gérées, par exemple un espace de noms pour chacune des applications appartenant à votre organisation.
- Créez une identité de charge de travail gérée dans un espace de noms du pool d'identités de charge de travail. Par exemple, vous pouvez créer un espace de noms pour une application et créer des identités gérées dans cet espace de noms pour les microservices compatibles avec cette application.
- créent un compte de service ; Les VM Compute Engine peuvent être autorisées à recevoir une identité de charge de travail gérée en fonction du compte de service Google Cloud associé à la VM.
- Créez une règle d'attestation de charge de travail qui permet à votre charge de travail d'obtenir des identifiants pour l'identité de charge de travail gérée. Pour générer des identifiants pour l'identité de charge de travail gérée, la charge de travail doit se trouver dans un projet spécifié et être associé au compte de service.
- Configurez Certificate Authority Service afin d'émettre des certificats pour les identités de charge de travail gérées :
- Configurer le pool d'autorités de certification racine
- Configurer les autorités de certification subordonnées
- Autoriser les identités de charge de travail gérées à demander des certificats à partir du pool d'autorités de certification
Obtenez le fichier de configuration pour importer les métadonnées du partenaire
Votre administrateur de sécurité crée un fichier JSON contenant les informations suivantes:
- Configuration de l'identité de charge de travail
- La configuration d'émission de certificat
- La configuration de confiance
Ce fichier doit être nommé CONFIGS.json
. Vous utiliserez ce fichier lors de la création d'un modèle d'instance pour des MIG ou lors de la création d'une VM individuelle.
Le fichier CONFIGS.json
doit ressembler à ce qui suit :
{ "wc.compute.googleapis.com": { "entries": { "certificate-issuance-config": { "primary_certificate_authority_config": { "certificate_authority_config": { "ca_pool": "projects/PROJECT_ID/locations/SUBORDINATE_CA_POOL_REGION/caPools/SUBORDINATE_CA_POOL_ID" } }, "key_algorithm": "rsa-2048" }, "trust-config": { "POOL_ID.global.PROJECT_NUMBER.workload.id.goog": { "trust_anchors": [{ "ca_pool": "projects/PROJECT_ID/locations/SUBORDINATE_CA_POOL_REGION/caPools/SUBORDINATE_CA_POOL_ID" }] } } } }, "iam.googleapis.com": { "entries": { "workload-identity": "spiffe://POOL_ID.global.PROJECT_NUMBER.workload.id.goog/ns/NAMESPACE_ID/sa/MANAGED_IDENTITY_ID" } } }
Activer les identités de charge de travail gérées pour un groupe d'instances géré (MIG)
Un groupe d'instances géré (MIG, Managed Instance Group) est un groupe d'instances de machines virtuelles (VM) qui sont traitées comme une seule entité. Chaque VM d'un MIG est créée à l'aide d'un modèle d'instance. Pour permettre aux VM du MIG d'utiliser des identités de charge de travail gérées, spécifiez la configuration dans le modèle d'instance.
Créer un modèle d'instance
Créez un modèle d'instance avec la fonctionnalité d'identités de charge de travail gérées activée. Créez ensuite un groupe d'instances géré (MIG) à l'aide de ce modèle.
gcloud
Exécutez la commande gcloud beta compute instance-templates create
pour créer un modèle d'instance qui active les identités de charge de travail gérées.
gcloud beta compute instance-templates create INSTANCE_TEMPLATE_NAME \ --service-account SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com \ --metadata enable-workload-certificate=true \ --partner-metadata-from-file CONFIGS.json
Vous pouvez ajouter des options supplémentaires lors de la création du modèle d'instance pour personnaliser les VM qu'il crée, telles que le type de machine et l'image, au lieu d'utiliser les valeurs par défaut.
Remplacez les éléments suivants :
- INSTANCE_TEMPLATE_NAME : nom du nouveau modèle.
- SERVICE_ACCOUNT_NAME: nom du compte de service autorisé à recevoir l'identité gérée.
- PROJECT_ID: ID du projet dans lequel le compte de service a été créé.
- CONFIGS.json: fichier de configuration contenant la configuration d'émission du certificat, la configuration de confiance et l'identité de charge de travail gérée.
Pour en savoir plus, consultez la page Créer des modèles d'instance.
Créer un groupe d'instances géré à partir du modèle
Créez un groupe d'instances géré qui utilise un modèle d'instance qui active les identités de charge de travail gérées. Pour en savoir plus sur la création du modèle d'instance, consultez la section Créer un modèle d'instance.
gcloud
Créez un MIG à l'aide du modèle d'instance et de la commande gcloud compute instance-groups managed create
.
gcloud compute instance-groups managed create INSTANCE_GROUP_NAME \ --size=SIZE \ --template=INSTANCE_TEMPLATE_NAME \ --zone=ZONE
Remplacez les éléments suivants :
- INSTANCE_GROUP_NAME: ID unique pour le groupe d'instances géré. Pour en savoir plus sur les noms valides, consultez la section Nommer les ressources.
- SIZE: taille du groupe d'instances géré.
- INSTANCE_TEMPLATE_NAME: nom du modèle d'instance à utiliser lors de la création de VM dans le MIG.
- ZONE : zone dans laquelle créer les VM.
Pour en savoir plus sur la création de MIG, consultez la section Scénarios de base pour la création de groupes d'instances gérés (MIG).
Activer les identités de charge de travail gérées pour des VM individuelles
Vous pouvez activer les identités de charge de travail gérées pour une VM lors de sa création ou en mettant à jour les métadonnées du partenaire pour une VM existante.
Créer des VM avec des identités de charge de travail gérées activées
Lors de la création d'une VM, pour activer la fonctionnalité d'identité de charge de travail gérée pour la VM, vous devez procéder comme suit:
- Spécifier un compte de service à utiliser par la VM
- Définissez l'attribut de métadonnées
enable-workload-certificate
surtrue
. Spécifiez les informations de configuration d'émission de certificat et de confiance en tant que métadonnées partenaires.
gcloud
Exécutez la commande gcloud beta compute instances create
pour créer une VM. Utilisez le fichier CONFIGS.json
fourni par votre administrateur de sécurité ou créé en suivant les instructions de la section Créer un fichier de configuration pour importer les métadonnées du partenaire.
Créez une VM avec la fonctionnalité d'identités de charge de travail gérées activée.
gcloud beta compute instances create INSTANCE_NAME \ --zone=INSTANCE_ZONE \ --service-account SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com \ --metadata enable-workload-certificate=true \ --partner-metadata-from-file CONFIGS.json
Vous pouvez ajouter des lignes supplémentaires à la commande pour configurer la VM, telles que le type de machine et l'image, au lieu d'utiliser les valeurs par défaut. Pour en savoir plus, consultez la page Créer et démarrer une instance de VM.
Remplacez les éléments suivants :
- INSTANCE_NAME: nom unique de la VM. Pour en savoir plus sur les noms d'instance valides, consultez la section Noms des ressources.
- INSTANCE_ZONE : zone dans laquelle créer la VM.
- SERVICE_ACCOUNT_NAME: nom du compte de service autorisé à recevoir l'identité gérée.
- PROJECT_ID: ID du projet dans lequel le compte de service a été créé.
- CONFIGS.json: nom du fichier de configuration contenant la configuration d'émission de certificat, la configuration de confiance et la configuration d'identité de charge de travail gérée.
Activer les identités de charge de travail gérées sur les VM existantes
Pour activer les identités de charge de travail gérées pour une VM existante, mettez à jour la VM pour configurer les éléments suivants:
- Définissez l'attribut de métadonnées
enable-workload-certificate
surtrue
. Spécifiez la configuration d'émission de certificat et les informations de configuration de confiance en tant que métadonnées partenaires.
gcloud
Cette tâche utilise le fichier CONFIGS.json
fourni par votre administrateur de sécurité ou créé en suivant les instructions de la section Créer un fichier de configuration pour importer les métadonnées du partenaire.
Mettez à jour la configuration d'une VM existante pour activer les identités de charge de travail gérées.
gcloud beta compute instances update VM_NAME \ --zone=ZONE \ --metadata enable-workload-certificate=true \ --partner-metadata-from-file CONFIGS.json
Remplacez les éléments suivants :
- VM_NAME : nom de la VM
- ZONE : zone où se trouve la VM
- CONFIGS.json: fichier de configuration contenant la configuration d'émission du certificat, la configuration de confiance et l'identité de charge de travail gérée.
Accéder aux identifiants de charge de travail sur une VM Linux
Après avoir configuré avec succès l'authentification de la charge de travail à la charge de travail à l'aide de mTLS, vous pouvez accéder aux identifiants émis sur votre VM.
Il existe deux façons d'accéder aux identifiants d'identité de charge de travail gérés Compute Engine et au groupe d'approbation associé:
- Le système de fichiers de la VM
- Serveur de métadonnées Compute Engine
Accéder aux identifiants de la charge de travail et au groupe de confiance à l'aide du système de fichiers de la VM
Cette méthode place les identifiants X.509 et le groupe d'approbations dans un chemin spécifique dans le système de fichiers de la VM. Les applications peuvent lire directement les identifiants et le groupe d'approbation à partir du système de fichiers. Pour obtenir des exemples de récupération des identifiants, consultez les exemples suivants sur GitHub:
La VM doit exécuter l'agent invité Compute Engine version 20231103.01 ou ultérieure. Exécutez la commande suivante pour vérifier la version de l'agent invité Compute Engine sur votre VM:
gcloud compute instances get-serial-port-output INSTANCE_NAME | grep "GCE Agent Started"
Si la version de l'agent invité est antérieure à la version 20231103.01, vous pouvez la mettre à jour en suivant les instructions de la section Mettre à jour l'environnement invité.
Pour rendre les identifiants de charge de travail et le groupe de confiance disponibles dans le système de fichiers d'une VM, procédez comme suit:
Installez ou mettez à jour l'agent invité Compute Engine vers la version 20231103.01 ou ultérieure. L'agent invité effectue les opérations suivantes:
- Il récupère automatiquement les identifiants et le groupe d'approbation à partir du serveur de métadonnées Compute Engine.
- Garantit des écritures atomiques sur le système de fichiers lors de la mise à jour du certificat X.509 et de la clé privée correspondante.
- Actualise automatiquement les identifiants et le groupe d'approbation, par exemple lors de la rotation des certificats mTLS.
Une fois que vous avez installé ou mis à jour l'agent invité Compute Engine sur le système d'exploitation invité, la tâche d'actualisation de la charge de travail crée le répertoire
/var/run/secrets/workload-spiffe-credentials
et définit les autorisations du répertoire sur0755 (rwxr-xr-x)
.Le répertoire contient les fichiers suivants créés avec les autorisations
0644 (rw-r--r--)
:private_key.pem
: clé privée au format PEM.certificates.pem
: bundle de certificats X.509 au format PEM qui peuvent être présentés à d'autres VM sous la forme d'une chaîne de certificats client, ou utilisés comme chaîne de certificats de serveur.ca_certificates.pem
: bundle de certificats X.509 au format PEM à utiliser comme ancres de confiance lors de la validation des certificats de pairs.spiffe://POOL_ID.global.PROJECT_NUMBER.workload.id.goog
config_status
: fichier journal contenant des messages d'erreur.
Les applications peuvent lire directement les certificats, la clé privée et le bundle d'approbations à partir du système de fichiers pour établir des connexions mTLS.
Accéder aux identifiants de la charge de travail et au groupe d'approbation à l'aide du serveur de métadonnées
Une application exécutée sur une VM Compute Engine peut interroger directement les points de terminaison du serveur de métadonnées et récupérer les identifiants et le groupe d'approbation. L'application est chargée de vérifier régulièrement les points de terminaison du serveur de métadonnées pour détecter de nouveaux identifiants et les mises à jour du groupe d'approbation.
Le serveur de métadonnées Compute Engine expose trois points de terminaison HTTP pour permettre aux applications exécutées dans la VM d'utiliser la fonctionnalité d'identité de charge de travail gérée.
gce-workload-certificates/config-status
: point de terminaison contenant les erreurs dans les valeurs de configuration fournies via les métadonnées de la VM.gce-workload-certificates/workload-identities
: point de terminaison des identités gérées par le plan de contrôle Compute Engine. Ce point de terminaison contient le certificat X.509 et la clé privée du domaine de confiance de la VM.gce-workload-certificates/trust-anchors
: point de terminaison contenant un ensemble de certificats de confiance pour la validation de la chaîne de certificats X.509 pairs.
Pour en savoir plus sur l'interrogation des métadonnées d'une instance de VM, consultez la page À propos des métadonnées de VM.
Pour accéder aux identifiants de la charge de travail et au groupe d'approbation à l'aide du serveur de métadonnées, votre application doit procéder comme suit:
Interrogez le point de terminaison
gce-workload-certificates/config-status
. Assurez-vous que le code de réponse HTTP est200
et que la réponse ne contient aucune erreurpartnerMetadataConfigsErrors
. Si de telles erreurs existent, mettez à jour la configuration appropriée avec des valeurs valides en suivant les étapes décrites dans la section Mettre à jour l'émission de certificats et la configuration de confiance.Pour vérifier la valeur, vous pouvez exécuter la commande suivante sur la VM:
curl "http://metadata.google.internal/computeMetadata/v1/instance/gce-workload-certificates/config-status" -H "Metadata-Flavor: Google"
Le point de terminaison
config-status
renvoie une réponse JSON avec la structure suivante:{ "partnerMetadataConfigsErrors": { "errors": { // A map of errors keyed by attribute name. "ATTRIBUTE_NAME" : "ERROR_DETAILS", ... } } }
Interrogez le point de terminaison
gce-workload-certificates/workload-identities
. Assurez-vous que le code de réponse HTTP est200
. Le point de terminaison renvoie une réponse JSON avec la structure suivante:{ "workloadCredentials": { // Credentials for the VM's trust domains "spiffe://POOL_ID.global.PROJECT_NUMBER.workload.id.goog/ns/NAMESPACE_ID/sa/MANAGED_IDENTITY_ID": { "certificatePem" : "X.509 certificate or certificate chain", "privateKeyPem" : "Private for X.509 leaf certificate" } } }
Extrayez
certificatePem
etprivateKeyPem
. Il est essentiel que les deux valeurs soient lues à partir de la même réponse afin d'éviter une incohérence entre la clé privée et la clé publique au cas où les identités de charge de travail gérées auraient été actualisées par l'infrastructure Compute Engine.Interrogez le point de terminaison
gce-workload-certificates/trust-anchors
. Assurez-vous que le code de réponse HTTP est200
. La réponse ne contient que les ancres d'approbation du domaine de confiance SPIFFE, si spécifié. Sinon, la requête renvoie une erreur. Le point de terminaisontrust-anchors
renvoie une réponse JSON avec la structure suivante:{ "trustAnchors": { // Trust bundle for the VM's trust domains "POOL_ID.global.PROJECT_NUMBER.workload.id.goog": { "trustAnchorsPem" : "Trust bundle containing the X.509 roots certificates" } } }
Le contenu de
trustAnchorsPem
contient le groupe d'approbations qui peut ensuite être utilisé pour authentifier les identifiants du pair X.509 lors de l'établissement d'une connexion mTLS.
Actualiser les identifiants et le groupe d'approbation
Le plan de contrôle Compute Engine effectue périodiquement une rotation automatique des identifiants de l'identité de charge de travail gérée et des ancres de confiance.
Si vos applications utilisent le système de fichiers pour accéder aux identifiants de la charge de travail et au groupe de confiance, l'agent invité Compute Engine actualise automatiquement les identifiants et le groupe d'approbation, par exemple lors de la rotation des certificats mTLS.
Si vos applications interrogent le serveur de métadonnées, alors les applications s'exécutant sur une VM doivent interroger régulièrement les points de terminaison du serveur de métadonnées pour obtenir le dernier ensemble d'identifiants d'identité de charge de travail géré et du bundle d'approbation. À défaut, les applications peuvent être interrompues en raison de l'expiration des certificats ou de modifications apportées au groupe de confiance, ce qui peut entraîner l'échec de l'établissement de la connexion mTLS. Google recommande aux applications d'interroger le serveur de métadonnées pour obtenir les identifiants d'identité de la charge de travail gérée et le groupe d'approbation toutes les cinq minutes.
Mettre à jour la configuration d'émission et de confiance de certificats
Vous pouvez modifier la configuration d'émission de certificat et la configuration de confiance pour une VM qui utilise des identités de charge de travail gérées.
Mettre à jour le modèle d'instance d'un groupe d'instances géré
Pour mettre à jour les valeurs de configuration d'émission de certificat et de confiance dans un modèle d'instance, vous devez créer un modèle avec les nouvelles valeurs. Par conséquent, la mise à jour de la configuration d'émission de certificat et de la configuration de confiance pour les groupes d'instances gérés (MIG) existants n'est pas acceptée.
Mettre à jour des VM Compute Engine individuelles
Pour mettre à jour la configuration d'émission de certificats et la configuration de confiance, mettez à jour le contenu du fichier CONFIGS.json
et utilisez la commande gcloud beta compute instances update
pour appliquer les mises à jour:
gcloud beta compute instances update INSTANCE_NAME \ --partner-metadata-from-file FILENAME.json
Remplacez les éléments suivants :
- INSTANCE_NAME: nom de la VM pour laquelle vous mettez à jour les valeurs de configuration
- FILENAME: nom du fichier de configuration modifié, par exemple
CONFIGS.json
Résoudre les problèmes
Pour connaître les méthodes de diagnostic et de résolution des erreurs courantes liées à la récupération des identifiants de charge de travail, consultez la documentation Résoudre les problèmes d'authentification de charge de travail à charge à travail.
Étapes suivantes
- Découvrez-en davantage sur les concepts suivants :