Créer une VM qui utilise un compte de service géré par l'utilisateur

Ce document explique comment créer une instance de machine virtuelle (VM) configurée pour utiliser un compte de service géré par l'utilisateur. 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 ressourcesGoogle Cloud .

Avant de commencer

Rôles requis

Pour obtenir les autorisations nécessaires pour créer des VM utilisant des comptes de service, demandez à votre administrateur de vous accorder les rôles IAM suivants sur le projet :

Pour en savoir plus sur l'attribution de rôles, consultez Gérer l'accès aux projets, aux dossiers et aux organisations.

Ces rôles prédéfinis contiennent les autorisations requises pour créer des VM utilisant des comptes de service. Pour connaître les autorisations exactes requises, développez la section Autorisations requises :

Autorisations requises

Les autorisations suivantes sont requises pour créer des VM utilisant des comptes de service :

  • Pour créer des comptes de service : toutes les autorisations du rôle iam.serviceAccountCreator
  • Pour accorder des autorisations au compte de service : toutes les autorisations du rôle resourcemanager.projectIamAdmin
  • Pour créer des machines virtuelles :
    • compute.instances.create sur le projet
    • Pour créer la VM à l'aide d'une image personnalisée : compute.images.useReadOnly sur l'image
    • Pour créer la VM à l'aide d'un instantané : compute.snapshots.useReadOnly sur l'instantané
    • Pour créer la VM à l'aide d'un modèle d'instance : compute.instanceTemplates.useReadOnly sur le modèle d'instance
    • Pour attribuer un ancien réseau à la VM : compute.networks.use sur le projet
    • Pour spécifier une adresse IP statique pour la VM : compute.addresses.use sur le projet
    • Pour attribuer une adresse IP externe à la VM, en cas d'utilisation d'un ancien réseau : compute.networks.useExternalIp sur le projet
    • Pour spécifier un sous-réseau pour la VM : compute.subnetworks.use sur le projet ou sur le sous-réseau choisi
    • Pour attribuer une adresse IP externe à la VM, en cas d'utilisation d'un réseau VPC : compute.subnetworks.useExternalIp sur le projet ou sur le sous-réseau choisi
    • Pour définir les métadonnées d'instance de VM pour la VM : compute.instances.setMetadata sur le projet
    • Pour définir des tags pour la VM : compute.instances.setTags sur la VM
    • Pour définir des étiquettes pour la VM : compute.instances.setLabels sur la VM
    • Pour définir un compte de service que doit utiliser la VM : compute.instances.setServiceAccount sur la VM
    • Pour créer un disque pour la VM : compute.disks.create sur le projet
    • Pour associer un disque existant en mode lecture seule ou en mode lecture/écriture : compute.disks.use sur le disque
    • Pour associer un disque existant en mode lecture seule : compute.disks.useReadOnly sur le disque

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 , définissez le niveau d'accès du compte de service sur Autoriser l'accès complet à toutes les API Cloud.
    • 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 un compte de service

Créez un compte de service et attribuez-lui les rôles IAM requis. Attribuez autant de rôles IAM que nécessaire. Vous pouvez modifier les rôles IAM de votre compte de service si nécessaire.

Nous vous recommandons de limiter les privilèges des comptes de service et de vérifier régulièrement les autorisations de vos comptes de service pour vous assurer qu'elles sont à jour.

Utilisez l'une des méthodes suivantes pour configurer le compte de service.

Console

    Assurez-vous de disposer du rôle IAM Créateur de comptes de service (roles/iam.serviceAccountCreator) et du rôle Administrateur IAM du projet (roles/resourcemanager.projectIamAdmin). Découvrez comment attribuer des rôles.
  1. Dans la console Google Cloud , accédez à la page Créer un compte de service.

    Accéder à la page "Créer un compte de service"
  2. Sélectionnez votre projet.
  3. Dans le champ Nom du compte de service, saisissez un nom. La console Google Cloud remplit le champ ID du compte de service en fonction de ce nom.

    Dans le champ Description du compte de service, saisissez une description. Exemple : Service account for quickstart.

  4. Cliquez sur Créer et continuer.
  5. Attribuez les rôles requis au compte de service.

    Pour attribuer un rôle, trouvez la liste Sélectionner un rôle, puis sélectionnez le rôle.

    Pour attribuer des rôles supplémentaires, cliquez sur Ajouter un autre rôle et ajoutez chaque rôle supplémentaire.

  6. Cliquez sur Continuer.
  7. Dans le champ Rôle d'utilisateur du compte de service, saisissez l'identifiant du compte principal qui associera le compte de service à d'autres ressources, telles que des instances Compute Engine.

    Il s'agit généralement de l'adresse e-mail d'un compte Google.

  8. Cliquez sur OK pour terminer la création du compte de service.

gcloud

    Configurez l'authentification :

    1. Assurez-vous de disposer des rôles IAM "Créateur de compte de service" (roles/iam.serviceAccountCreator) et "Administrateur IAM du projet" (roles/resourcemanager.projectIamAdmin). Découvrez comment attribuer des rôles.
    2. Créez le compte de service :

      gcloud iam service-accounts create SERVICE_ACCOUNT_NAME

      Remplacez SERVICE_ACCOUNT_NAME par le nom que vous souhaitez donner au compte de service.

    3. Pour accorder l'accès à votre projet et à vos ressources, attribuez un rôle au compte de service :

      gcloud projects add-iam-policy-binding PROJECT_ID --member="serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com" --role=ROLE

      Remplacez les éléments suivants :

      • SERVICE_ACCOUNT_NAME : nom du compte de service.
      • PROJECT_ID : ID du projet dans lequel vous avez créé le compte de service.
      • ROLE : rôle à accorder
    4. Pour attribuer un autre rôle au compte de service, exécutez la commande comme vous l'avez fait à l'étape précédente.
    5. Attribuez le rôle requis au compte principal qui associera le compte de service à d'autres ressources.

      gcloud iam service-accounts add-iam-policy-binding SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com --member="user:USER_EMAIL" --role=roles/iam.serviceAccountUser

      Remplacez les éléments suivants :

      • SERVICE_ACCOUNT_NAME : nom du compte de service.
      • PROJECT_ID : ID du projet dans lequel vous avez créé le compte de service.
      • USER_EMAIL : adresse e-mail d'un compte Google

Terraform

Pour créer un compte de service, vous pouvez utiliser la ressource google_service_account.

resource "google_service_account" "default" {
  account_id   = "service-account-id"
  display_name = "Service Account"
}

N'oubliez pas de remplacer les valeurs des espaces réservés pour les attributs account_id et display_name.

Pour savoir comment appliquer ou supprimer une configuration Terraform, consultez Commandes Terraform de base.

Créer une VM et associer le compte de service

Après avoir créé le compte de service, créez une VM et associez-y le compte de service que vous avez créé dans la section précédente. Définissez également le niveau d'accès de la VM sur cloud-platform.

Si vous disposez déjà d'une VM et que vous souhaitez la configurer pour qu'elle utilise un autre compte de service, consultez Modifier le compte de service associé.

Utilisez l'une des méthodes suivantes pour créer une VM et y associer le compte de service.

Console

  1. Accédez à la page Créer une instance dans la console Google Cloud .

    Accéder à la page Créer une instance

  2. Pour associer un compte de service, procédez comme suit :

    1. Dans le menu de navigation, cliquez sur Sécurité.
    2. Dans la liste Compte de service, sélectionnez le compte de service que vous avez créé.
    3. Pour Niveaux d'accès, sélectionnez Autoriser l'accès complet à l'ensemble des API Cloud.
  3. Facultatif : spécifiez d'autres options de configuration. Pour en savoir plus, consultez Options de configuration lors de la création d'une instance.

  4. Pour créer et démarrer l'instance, cliquez sur Créer.

gcloud

Pour créer une instance de VM et la configurer pour utiliser un compte de service personnalisé à l'aide de Google Cloud CLI, exécutez la commande gcloud compute instances create et indiquez l'adresse e-mail du compte de service et le niveau d'accès cloud-platform à l'instance de VM.

gcloud compute instances create VM_NAME \
    --service-account=SERVICE_ACCOUNT_EMAIL \
    --scopes=https://www.googleapis.com/auth/cloud-platform

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.
  • VM_NAME : nom de l'instance de VM

Par exemple :

gcloud compute instances create example-vm \
    --service-account 123-my-sa@my-project-123.iam.gserviceaccount.com \
    --scopes=https://www.googleapis.com/auth/cloud-platform

Vous pouvez également spécifier le champ d'application à l'aide de l'alias : --scopes=cloud-platform. Ces alias ne sont reconnus que par gcloud CLI. L'API et les autres bibliothèques ne reconnaissent pas ces alias. Vous devez donc spécifier l'URI de champ d'application complet.

Terraform

Pour configurer une nouvelle VM pour utiliser un compte de service, vous pouvez utiliser la ressource google_compute_instance.

resource "google_compute_instance" "default" {
  name         = "my-test-vm"
  machine_type = "n1-standard-1"
  zone         = "us-central1-a"

  boot_disk {
    initialize_params {
      image = "debian-cloud/debian-11"
    }
  }

  // Local SSD disk
  scratch_disk {
    interface = "SCSI"
  }

  network_interface {
    network = "default"

    access_config {
      // Ephemeral public IP
    }
  }

  service_account {
    # Google recommends custom service accounts with `cloud-platform` scope with
    # specific permissions granted via IAM Roles.
    # This approach lets you avoid embedding secret keys or user credentials
    # in your instance, image, or app code
    email  = google_service_account.default.email
    scopes = ["cloud-platform"]
  }
}

REST

Utilisez la méthode instances.insert pour créer la VM et spécifiez l'adresse e-mail du compte de service ainsi que le niveau d'accès de l'instance de VM.

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances

{
   "machineType":"zones/MACHINE_TYPE_ZONE/machineTypes/MACHINE_TYPE",
   "name":"VM_NAME",
   
   "disks":[
      {
         "initializeParams":{
            "sourceImage":"projects/IMAGE_PROJECT/global/images/IMAGE"
         },
         "boot":true
      }
   ],
   
   
   "networkInterfaces":[
      {
         "network":"global/networks/NETWORK_NAME"
      }
   ],
   
  "serviceAccounts": [
      {
      "email": "SERVICE_ACCOUNT_EMAIL",
      "scopes": ["https://www.googleapis.com/auth/cloud-platform"]
      }
   ],
   "shieldedInstanceConfig":{
      "enableSecureBoot":"ENABLE_SECURE_BOOT"
   }
}

Remplacez les éléments suivants :

  • PROJECT_ID : ID du projet dans lequel créer la VM.
  • ZONE : zone dans laquelle créer la VM.
  • MACHINE_TYPE_ZONE : zone contenant le type de machine à utiliser pour la nouvelle VM.
  • MACHINE_TYPE : type de machine, prédéfini ou personnalisé, pour la nouvelle VM.
  • VM_NAME : nom de la nouvelle VM.
  • IMAGE_PROJECT : projet contenant l'image.
    Par exemple, si vous spécifiez debian-10 comme famille d'images, spécifiez debian-cloud comme projet d'image.
  • IMAGE : Spécifiez l'une des options suivantes :
    • IMAGE : version spécifique d'une image publique.

      Par exemple : "sourceImage": "projects/debian-cloud/global/images/debian-10-buster-v20200309"

    • IMAGE_FAMILY : famille d'images.

      Cela crée la VM à partir de l'image d'OS non obsolète la plus récente. Par exemple, si vous spécifiez "sourceImage": "projects/debian-cloud/global/images/family/debian-10", Compute Engine crée une VM à partir de la dernière version de l'image de l'OS dans la famille d'images Debian 10.

  • NETWORK_NAME : réseau VPC que vous souhaitez utiliser pour la VM. Vous pouvez spécifier default pour utiliser votre réseau par défaut.
  • 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 Obtenir une adresse e-mail de compte de service.
  • ENABLE_SECURE_BOOT (facultatif) : si vous avez choisi une image compatible avec les fonctionnalités de VM protégée, Compute Engine active par défaut le module vTPM et la surveillance de l'intégrité. Compute Engine n'active pas le démarrage sécurisé par défaut.

    Si vous spécifiez true pour enableSecureBoot, Compute Engine crée une VM avec les trois fonctionnalités de VM protégée activées. Une fois que Compute Engine a démarré votre VM, vous devez l'arrêter pour modifier les options de VM protégée.

Accéder à d'autres services Google Cloud et les utiliser

Une fois votre VM configurée pour utiliser le compte de service, les applications peuvent utiliser ce compte pour s'authentifier. La méthode la plus courante consiste à s'authentifier à l'aide des identifiants par défaut de l'application et d'une bibliothèque cliente. Certains outils Google Cloud , tels que gcloud CLI, peuvent utiliser automatiquement le compte de service pour accéder aux API Google Cloud à partir d'une VM. Pour en savoir plus, consultez Authentifier des charges de travail à l'aide de comptes de service.

Si un compte de service est supprimé, les applications n'ont plus accès aux ressourcesGoogle Cloud via ce compte de service. Si vous supprimez les comptes de service par défaut App Engine et Compute Engine, vos VM n'auront plus accès aux ressources du projet. Si vous n'êtes pas sûr qu'un compte de service est utilisé, Google recommande de le désactiver avant de le supprimer. Il est possible de réactiver des comptes de services désactivés si ceux-ci sont encore requis.

Exemple : Accéder aux ressources Cloud Storage à partir de votre VM

Une fois que vous avez configuré votre VM pour utiliser un compte de service doté du rôle storage.admin, vous pouvez utiliser des outils tels que gcloud CLI pour gérer les fichiers sur lesquels vous avez stocké Cloud Storage. Pour accéder à vos ressources Cloud Storage, procédez comme suit :

  1. Assurez-vous que le compte de service associé à votre VM dispose du rôle roles/storage.admin.

  2. Si votre VM utilise une image d'OS personnalisée, installez gcloud CLI. Par défaut, gcloud CLI est installée sur la plupart des images d'OS publiques fournies par Google Cloud.

  3. Connectez-vous à la VM.

  4. Depuis la VM, utilisez la Google Cloud CLI pour gérer vos ressources Cloud Storage.

Étape suivante