Modifier le compte de service associé


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

    1. Install the Google Cloud CLI, then initialize it by running the following command:

      gcloud init
    2. Set a default region and zone.
    3. 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 :

  • compute.instances.setServiceAccount
  • compute.instances.stop
  • compute.instances.start

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 :

  1. 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.
  2. Associez le compte de service à votre VM.
  3. 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.

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 :

  • 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ôle roles/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.

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

  1. Accédez à la page Instances de VM.

    Accéder à Instances de VM

  2. Cliquez sur le nom de l'instance de VM dont vous souhaitez modifier le compte de service.

  3. Si la VM n'est pas arrêtée, cliquez sur Arrêter. Attendez que la VM soit complètement arrêtée.

  4. Cliquez sur Modifier.

  5. Faites défiler jusqu'à la section Compte de service.

  6. 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.
  7. Cliquez sur Enregistrer pour enregistrer les modifications.

  8. Cliquez sur Démarrer/Reprendre pour redémarrer la VM.

gcloud

  1. Arrêtez la VM à l'aide de la commande instances stop. Remplacez VM_NAME par le nom de votre instance de VM.

    gcloud compute instances stop VM_NAME
    
  2. 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 VM

    • SCOPES : 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
    
  3. Arrêtez la VM à l'aide de la commande instances start. Remplacez VM_NAME par le nom de votre instance de VM.

    gcloud compute instances start VM_NAME
    

REST

  1. Arrêtez la VM en envoyant une requête POST à l'aide de la méthode instances.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.
  2. Associez le compte de service en envoyant une requête POST à la méthode setServiceAccount :

    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"
      ]
    }
    
  3. Démarrez la VM en créant une requête POST à l'aide de la méthode instances.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.

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

  1. Accédez à la page Instances de VM.

    Accéder à Instances de VM

  2. Cliquez sur le nom de l'instance de VM dont vous souhaitez modifier le compte de service.

  3. 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.

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

  • 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.

Étape suivante