Ce document explique comment configurer une machine virtuelle (VM) existante pour utiliser un autre compte de service. Un compte de service est un type particulier de compte généralement utilisé par une application ou une charge de travail de calcul pour effectuer des appels d'API autorisés.
Les comptes de service sont nécessaires dans les cas où une charge de travail, telle qu'une application personnalisée, doit accéder à des ressources Google Cloud ou effectuer des actions sans intervention de l'utilisateur final. Pour en savoir plus sur l'utilisation des comptes de service, consultez la page Bonnes pratiques d'utilisation des comptes de service.
Si vous avez des applications qui doivent appeler les API Google Cloud, Google vous recommande d'associer un compte de service géré par l'utilisateur à la VM sur laquelle l'application ou la charge de travail est en cours d'exécution. Ensuite, vous accordez au compte de service des rôles IAM, qui permettent au compte de service et, par extension, aux applications exécutées sur la VM, d'accéder aux ressources Google Cloud.
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 :
Select the tab for how you plan to use the samples on this page:
Console
When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.
gcloud
-
Install the Google Cloud CLI, then initialize it by running the following command:
gcloud init
- Set a default region and zone.
-
compute.instances.setServiceAccount
-
compute.instances.stop
-
compute.instances.start
- Créez un compte de service géré par l'utilisateur plutôt que d'utiliser le compte de service Compute Engine par défaut, et accordez-lui des rôles IAM pour les ressources et les opérations dont il a besoin.
- Associez le compte de service à votre VM.
- Définissez le champ d'application Cloud Platform (
https://www.googleapis.com/auth/cloud-platform
) sur votre VM. Cela permet au compte de service de la VM d'appeler les API Google Cloud qu'il est autorisé à utiliser.- Si vous spécifiez le compte de service à l'aide de la console Google Cloud, le niveau d'accès de la VM est automatiquement défini par défaut sur le champ d'application
cloud-platform
. - Si vous spécifiez le compte de service à l'aide de Google Cloud CLI ou de l'API Compute Engine, vous pouvez utiliser le paramètre
scopes
pour définir le niveau d'accès.
- Si vous spécifiez le compte de service à l'aide de la console Google Cloud, le niveau d'accès de la VM est automatiquement défini par défaut sur le champ d'application
L'attribution d'un rôle IAM au compte de service par défaut affecte toutes les VM exécutées en tant que compte de service par défaut. Par exemple, si vous accordez le rôle
roles/storage.objectAdmin
au compte de service par défaut, toutes les VM exécutées en tant que compte de service par défaut avec les champs d'application d'accès requis disposent des autorisations accordées par le rôleroles/storage.objectAdmin
. De même, si vous limitez l'accès en omettant certains rôles, cela affecte toutes les VM exécutées en tant que compte de service par défaut.Selon la configuration de vos règles d'administration, le compte de service par défaut peut se voir attribuer automatiquement le rôle Éditeur sur votre projet. Nous vous recommandons vivement de désactiver l'attribution automatique des rôles en appliquant la contrainte de règle d'administration
iam.automaticIamGrantsForDefaultServiceAccounts
. Si vous avez créé votre organisation après le 3 mai 2024, cette contrainte est appliquée par défaut.Si vous désactivez l'attribution automatique de rôles, vous devez choisir les rôles à attribuer aux comptes de service par défaut, puis attribuer ces rôles vous-même.
Si le compte de service par défaut dispose déjà du rôle Éditeur, nous vous recommandons de le remplacer par des rôles moins permissifs. Pour modifier les rôles du compte de service en toute sécurité, utilisez Policy Simulator pour voir l'impact de la modification, puis attribuez et révoquez les rôles appropriés.
Accédez à la page Instances de VM.
Cliquez sur le nom de l'instance de VM dont vous souhaitez modifier le compte de service.
Si la VM n'est pas arrêtée, cliquez sur Arrêter. Attendez que la VM soit complètement arrêtée.
Cliquez sur Modifier.
Faites défiler jusqu'à la section Compte de service.
Dans la liste déroulante, sélectionnez le compte de service à attribuer à l'instance.
- Si vous choisissez un compte de service géré par l'utilisateur, le niveau d'accès de la VM est défini par défaut sur le champ d'application recommandé
cloud-platform
. Si vous avez besoin d'un champ d'application différent pour votre compte de service géré par l'utilisateur, utilisez gcloud CLI ou l'API Compute Engine pour associer le compte de service. - Si vous choisissez le compte de service Compute Engine par défaut, vous pouvez modifier ses niveaux d'accès dans la console Google Cloud.
- Pour modifier les niveaux d'accès, sélectionnez Définir l'accès pour chaque API dans la section Niveaux d'accès et définissez les niveaux d'accès appropriés pour vos besoins.
- Recommandé Si vous ne savez pas quels niveaux d'accès définir, choisissez Autoriser l'accès complet à l'ensemble des API Cloud, puis assurez-vous de restreindre l'accès en définissant des rôles IAM sur le compte de service.
- Si vous choisissez un compte de service géré par l'utilisateur, le niveau d'accès de la VM est défini par défaut sur le champ d'application recommandé
Cliquez sur Enregistrer pour enregistrer les modifications.
Cliquez sur Démarrer/Reprendre pour redémarrer la VM.
Arrêtez la VM à l'aide de la commande
instances stop
. RemplacezVM_NAME
par le nom de votre instance de VM.gcloud compute instances stop VM_NAME
Associez le compte de service. Pour associer le compte de service, utilisez la commande
instances set-service-account
et indiquez le nom de la VM, l'adresse e-mail du compte de service et les niveaux d'accès souhaités. Pour en savoir plus sur la définition des niveaux d'accès, consultez Bonnes pratiques.gcloud compute instances set-service-account VM_NAME \ --service-account=SERVICE_ACCOUNT_EMAIL \ --scopes=SCOPES
Remplacez les éléments suivants :
SERVICE_ACCOUNT_EMAIL
: adresse e-mail du compte de service que vous avez créé. Exemple :my-sa-123@my-project-123.iam.gserviceaccount.com
. Pour afficher l'adresse e-mail, consultez la section Répertorier les comptes de service.Si vous souhaitez supprimer le compte de service de la VM, utilisez l'option
--no-service-account
.VM_NAME
: nom de l'instance de VMSCOPES
: liste d'URI ou d'alias de niveaux d'accès séparés par des virgules et fournis dans la description de l'option--scopes
.Si vous souhaitez supprimer tous les niveaux d'accès de l'instance, utilisez plutôt l'indicateur
--no-scopes
.
Par exemple, la commande suivante attribue le compte de service
my-sa-123@my-project-123.iam.gserviceaccount.com
à une instance appelée "example-instance" et définit les niveaux d'accès sur cette instance de manière à accorder un accès en lecture/écriture à Compute Engine et un accès en lecture seule à Cloud Storage.gcloud compute instances set-service-account example-instance \ --service-account=my-sa-123@my-project-123.iam.gserviceaccount.com \ --scopes=compute-rw,storage-ro
Arrêtez la VM à l'aide de la commande
instances start
. RemplacezVM_NAME
par le nom de votre instance de VM.gcloud compute instances start VM_NAME
Arrêtez la VM en envoyant une requête
POST
à l'aide de la méthodeinstances.stop
:POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME/stop
Remplacez les éléments suivants :
PROJECT_ID
: le projet dans lequel se trouve votre VM.ZONE
: zone où se trouve votre VM.VM_NAME
: nom de la VM à arrêter.
Associez le compte de service en envoyant une requête
POST
à la méthodesetServiceAccount
:POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME/setServiceAccount { "email": "SERVICE_ACCOUNT_EMAIL", "scopes": [ "SCOPE_URI", "SCOPE_URI", ... ] }
Remplacez les éléments suivants :
PROJECT_ID
: ID du projet pour cette requête.ZONE
: zone à laquelle appartient cette VM.VM_NAME
: nom de la VM.SERVICE_ACCOUNT_EMAIL
: adresse e-mail du compte de service que vous avez créé. Exemple :my-sa-123@my-project-123.iam.gserviceaccount.com
. Pour afficher l'adresse e-mail, consultez la section Répertorier les comptes de service.SCOPE_URI
: URI de niveau d'accès requis.
Par exemple, la requête suivante utilise l'adresse e-mail de compte de service
my-sa-123@my-project-123.iam.gserviceaccount.com
et définit Cloud Storage et BigQuery en tant que champ d'application :POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME/setServiceAccount { "email": "my-sa-123@my-project-123.iam.gserviceaccount.com", "scopes": [ "https://www.googleapis.com/auth/bigquery", "https://www.googleapis.com/auth/devstorage.read_only" ] }
Démarrez la VM en créant une requête
POST
à l'aide de la méthodeinstances.start
:POST https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME/start
Remplacez les éléments suivants :
PROJECT_ID
: le projet dans lequel se trouve votre VM.ZONE
: zone où se trouve votre VM.VM_NAME
: nom de la VM à démarrer.
Accédez à la page Instances de VM.
Cliquez sur le nom de l'instance de VM dont vous souhaitez modifier le compte de service.
Accédez à la section Gestion des API et des identités. Cette section affiche le compte de service et le niveau d'accès utilisés par la VM.
- Limitez les privilèges des comptes de service et vérifiez régulièrement les autorisations de ces comptes pour vous assurer qu'elles sont à jour.
- Soyez prudents lorsque vous supprimez des comptes de service. Avant de supprimer un compte de service, vérifiez qu'il n'est plus utilisé par vos applications critiques. Si vous ne savez pas si un compte de service est utilisé, nous vous recommandons de le désactiver plutôt que de le supprimer. Il est possible de réactiver des comptes de services désactivés si ceux-ci sont encore requis.
- Limitez les risques de sécurité associés à votre compte de service. Si vous souhaitez en savoir plus, consultez Bonnes pratiques d'utilisation des comptes de service.
- Consultez les bonnes pratiques concernant les comptes de service
Consultez la page Authentifier des charges de travail à l'aide de comptes de service
REST
Pour utiliser les exemples d'API REST de cette page dans un environnement de développement local, vous devez utiliser les identifiants que vous fournissez à gcloud CLI.
Install the Google Cloud CLI, then initialize it by running the following command:
gcloud init
Pour en savoir plus, consultez la section S'authentifier pour utiliser REST dans la documentation sur l'authentification Google Cloud.
Rôles requis
Pour obtenir les autorisations nécessaires pour configurer des comptes de service sur votre VM, demandez à votre administrateur de vous accorder le rôle IAM Administrateur d'instances Compute (v1) (
roles/compute.instanceAdmin.v1
) sur la VM ou sur votre projet. Pour en savoir plus sur l'attribution de rôles, consultez la section Gérer les accès.Ce rôle prédéfini contient les autorisations requises pour configurer des comptes de service sur votre VM. Pour connaître les autorisations exactes requises, développez la section Autorisations requises :
Autorisations requises
Les autorisations suivantes sont requises pour configurer des comptes de service sur votre VM :
Vous pouvez également obtenir ces autorisations avec des rôles personnalisés ou d'autres rôles prédéfinis.
Présentation
Il est recommandé de configurer les comptes de service de vos VM comme suit :
Configurer le compte de service
Vous pouvez créer un compte de service géré par l'utilisateur ou utiliser le compte de service Compute Engine par défaut. Il est recommandé d'utiliser un compte de service géré par l'utilisateur.
Pour le compte de service sélectionné, assurez-vous que les rôles IAM (Identity and Access Management) requis sont attribués.
Gestion par l'utilisateur
Si vous ne possédez pas encore de compte de service géré par l'utilisateur, créez-en un. Pour obtenir des instructions détaillées, consultez la page Configurer un compte de service.
Par défaut
Si vous connaissez le compte de service par défaut de Compute Engine et que vous souhaitez utiliser ses identifiants au lieu de créer des comptes de service, vous pouvez accorder des rôles IAM au compte de service par défaut.
Avant d'attribuer des rôles IAM au compte de service par défaut, notez les points suivants :
En cas de doute sur l'attribution de rôles IAM au compte de service par défaut, créez plutôt un nouveau compte de service géré par l'utilisateur.
Associer le compte de service et mettre à jour le niveau d'accès
Pour que vous puissiez modifier le compte de service et les niveaux d'accès d'une VM, celle-ci doit être temporairement arrêtée.
Si le compte de service se trouve dans un projet différent de celui des VM, vous devez configurer le compte de service pour une ressource située dans un autre projet.
Utilisez l'une des méthodes suivantes pour modifier le compte de service et les niveaux d'accès sur votre VM.
Console
gcloud
REST
Afficher le compte de service utilisé par une VM
Pour afficher tous les comptes de service d'un projet, consultez la section Répertorier les comptes de service.
Si vous devez identifier le compte de service utilisé par une VM, suivez l'une des procédures suivantes :
Console
gcloud
Exécutez la commande
gcloud compute instances describe
suivante :gcloud compute instances describe VM_NAME \ --format json
Le résultat ressemble à ce qui suit :
{ ... "serviceAccounts":[ { "email":"123845678986-compute@developer.gserviceaccount.com", "scopes":[ "https://www.googleapis.com/auth/devstorage.full_control" ] } ] ... }
Si l'instance n'utilise pas de compte de service, vous recevez une réponse sans la propriété
serviceAccounts
.Serveur de métadonnées
Interrogez le serveur de métadonnées à partir de la VM elle-même. Envoyez une requête à
http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/
:user@myinst:~$ curl "http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/" \ -H "Metadata-Flavor: Google"
Si vous avez activé un ou plusieurs comptes de service lors de la création de l'instance, cette commande
curl
renvoie un résultat semblable au suivant :123845678986-compute@developer.gserviceaccount.com/ default/
Si l'instance n'utilise pas de compte de service, vous recevez une réponse vide.
Bonnes pratiques
Étape suivante
Sauf indication contraire, le contenu de cette page est régi par une licence Creative Commons Attribution 4.0, et les échantillons de code sont régis par une licence Apache 2.0. Pour en savoir plus, consultez les Règles du site Google Developers. Java est une marque déposée d'Oracle et/ou de ses sociétés affiliées.
Dernière mise à jour le 2024/11/21 (UTC).
-