Cette page explique comment créer et gérer des clés de compte de service à l'aide de Google Cloud Console, de l'outil de ligne de commande gcloud
, de l'API Identity and Access Management ou de l'une des bibliothèques clientes Google Cloud.
Prérequis pour ce guide
- Comprendre les comptes de service
- Installer l'outil
gcloud
Autorisations requises
Pour permettre à un utilisateur de gérer les clés de compte de service, attribuez-lui le rôle Administrateur de clés de compte de service (roles/iam.serviceAccountKeyAdmin
). Pour en savoir plus, consultez la section Rôles des comptes de service.
Les rôles de base IAM contiennent également les autorisations nécessaires pour gérer les clés de compte de service. Les rôles de base ne doivent pas être attribués dans un environnement de production, mais ils peuvent être attribués dans un environnement de développement ou de test.
Créer des clés de compte de service
Pour utiliser un compte de service en dehors de Google Cloud, par exemple sur d'autres plates-formes ou sur site, vous devez d'abord établir l'identité du compte de service. Pour ce faire, un moyen sûr consiste à utiliser les paires de clés publique/privée.
Pour créer une clé de compte de service, vous pouvez utiliser Cloud Console, l'outil gcloud
, la méthode serviceAccounts.keys.create()
ou l'une des bibliothèques clientes.
Un compte de service peut compter jusqu'à 10 clés.
Dans les exemples ci-dessous, sa-name
est le nom de votre compte de service et project-id
est l'ID de votre projet Google Cloud. Vous pouvez récupérer la chaîne sa-name@project-id.iam.gserviceaccount.com
à partir de la page Comptes de service de Cloud Console.
Console
Dans Cloud Console, accédez à la page Comptes de service.
Sélectionnez un projet.
Cliquez sur l'adresse e-mail du compte de service pour lequel vous souhaitez créer une clé.
Cliquez sur l'onglet Clés.
Cliquez sur le menu déroulant Ajouter une clé, puis sélectionnez Créer une clé.
Sélectionnez un type de clé, puis cliquez sur Créer.
Cliquez sur Créer pour télécharger un fichier de clé de compte de service. Une fois téléchargé, vous ne pouvez plus le télécharger à nouveau.
Veillez à stocker le fichier de clé en toute sécurité, car il peut être utilisé pour s'authentifier en tant que compte de service. Vous pouvez déplacer et renommer ce fichier comme vous le souhaitez.
gcloud
Exécutez la commande gcloud iam service-accounts keys create
pour créer des clés de compte de service.
Commande :
gcloud iam service-accounts keys create ~/key.json \ --iam-account sa-name@project-id.iam.gserviceaccount.com
Sortie :
created key [e44da1202f82f8f4bdd9d92bc412d1d8a837fa83] of type [json] as [/usr/home/username/key.json] for [sa-name@project-id.iam.gserviceaccount.com]
Le fichier de clé du compte de service est maintenant téléchargé sur votre ordinateur. Une fois téléchargé, vous ne pouvez plus le télécharger à nouveau.
Veillez à stocker le fichier de clé en toute sécurité, car il peut être utilisé pour s'authentifier en tant que compte de service. Vous pouvez déplacer et renommer ce fichier comme vous le souhaitez.
REST
La méthode projects.serviceAccounts.keys.create
crée une clé pour un compte de service.
Avant d'utiliser les données de requête ci-dessous, effectuez les remplacements suivants :
project-id
: ID de votre projet Google Cloud.sa-name
: nom du compte de service pour lequel vous souhaitez créer une clé.private-key-type
: facultatif. Format de sortie de la clé privée. La valeur par défaut estTYPE_GOOGLE_CREDENTIALS_FILE
, qui est un fichier de clé JSON encodé en base64. Pour obtenir la liste de toutes les valeurs possibles, consultez la documentation de référence surServiceAccountPrivateKeyType
.key-algorithm
: facultatif. Algorithme de clé à utiliser pour la clé. La valeur par défaut, susceptible d'être modifiée, est une clé RSA de 2 048 bits. Pour obtenir la liste de toutes les valeurs possibles, consultez la documentation de référence surServiceAccountKeyAlgorithm
.
Méthode HTTP et URL :
POST https://iam.googleapis.com/v1/projects/project-id/serviceAccounts/sa-name@project-id.iam.gserviceaccount.com/keys
Corps JSON de la requête :
{ "privateKeyType": "private-key-type", "keyAlgorithm": "key-algorithm" }
Pour envoyer votre requête, développez l'une des options suivantes :
La réponse contient une clé pour votre compte de service. Exemple :
{ "name":"projects/my-project/serviceAccounts/my-service-account@my-project.iam.gserviceaccount.com/keys/90c48f61c65cd56224a12ab18e6ee9ca9c3aee7c", "privateKeyType": "TYPE_GOOGLE_CREDENTIALS_FILE", "privateKeyData":"MIIJqAIB . . .", "validAfterTime": "2020-05-17T18:48:27Z", "validBeforeTime": "9999-12-31T23:59:59Z", "keyAlgorithm": "KEY_ALG_RSA_2048", "keyOrigin": "GOOGLE_PROVIDED", "keyType": "USER_MANAGED" }
Veillez à stocker les données de la clé en toute sécurité, car elles peuvent être utilisées pour s'authentifier en tant que compte de service.
C#
Avant d'essayer cet exemple, suivez les instructions de configuration pour C# décrites dans le Guide de démarrage rapide de Cloud IAM – Utiliser les bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API Cloud IAM en langage C#.
Go
Avant d'essayer cet exemple, suivez les instructions de configuration pour Go décrites dans le Guide de démarrage rapide de Cloud IAM – Utiliser les bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API Cloud IAM en langage Go.
Java
Avant d'essayer cet exemple, suivez les instructions de configuration pour Java décrites dans le Guide de démarrage rapide de Cloud IAM – Utiliser les bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API Cloud IAM en langage Java.
Python
Avant d'essayer cet exemple, suivez les instructions de configuration pour Python décrites dans le Guide de démarrage rapide de Cloud IAM – Utiliser les bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API Cloud IAM en langage Python.
Notez que le résultat privateKeyData
est une représentation de la valeur TYPE_GOOGLE_CREDENTIALS_FILE
(identifiants de clé JSON ou P12) sous forme de chaîne codée en base64.
Lorsque vous créez une clé, la nouvelle paire de clés publique/privée est générée et téléchargée sur votre ordinateur. C'est la seule copie de la clé privée dont vous disposez. Vous avez la responsabilité de stocker votre clé privée en lieu sûr. Prenez note de son emplacement et assurez-vous que votre application puisse y accéder facilement, car elle en aura besoin pour effectuer des appels d'API authentifiés.
Le format de la clé peut différer selon la manière dont elle est générée. Les clés créées à l'aide de Cloud Console ou de l'outil de ligne de commande gcloud
prennent la forme suivante :
{ "type": "service_account", "project_id": "project-id", "private_key_id": "key-id", "private_key": "-----BEGIN PRIVATE KEY-----\nprivate-key\n-----END PRIVATE KEY-----\n", "client_email": "service-account-email", "client_id": "client-id", "auth_uri": "https://accounts.google.com/o/oauth2/auth", "token_uri": "https://accounts.google.com/o/oauth2/token", "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs", "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/service-account-email" }
Alors que les clés générées avec l'API REST ou les bibliothèques clientes ont ce format :
{ "name": "projects/project-id/serviceAccounts/service-account-email/keys/key-id", "privateKeyType": "TYPE_GOOGLE_CREDENTIALS_FILE", "privateKeyData": "private-key", "validAfterTime": "date", "validBeforeTime": "date", "keyAlgorithm": "KEY_ALG_RSA_2048" }
Notez que, là encore, le résultat privateKeyData
est une représentation de la valeur TYPE_GOOGLE_CREDENTIALS_FILE
(identifiants de clé JSON ou P12) sous forme de chaîne codée en base64. Vous pouvez stocker le résultat privateKeyData
décodé en base64 dans un fichier portant l'extension appropriée (.p12
ou .json
), puis l'utiliser comme entrée dans les bibliothèques clientes ou dans la commande gcloud auth activate-service-account
.
Le formatage étant différent selon la méthode employée, il est plus facile de générer une clé avec la méthode qui sera utilisée pour les futurs appels d'API. Par exemple, si vous utilisez gcloud
, générez également la clé avec gcloud
. Pour utiliser une clé générée avec une autre méthode que celle que vous employez (par exemple, une clé REST à utiliser avec gcloud
), vous devez modifier la clé afin qu'elle corresponde au format approprié.
Google fait en sorte que toutes les clés publiques de tous les comptes de service soient accessibles par tout le monde et disponibles pour vérifier les signatures créées avec la clé privée. La clé publique est accessible aux adresses suivantes :
- Certificat x.509 : https://www.googleapis.com/service_accounts/v1/metadata/x509/sa-name@project-id.iam.gserviceaccount.com
- Clé Web JSON (JWK) : https://www.googleapis.com/service_accounts/v1/jwk/sa-name@project-id.iam.gserviceaccount.com
- Point de terminaison brut : https://www.googleapis.com/service_accounts/v1/metadata/raw/sa-name@project-id.iam.gserviceaccount.com
Liste des clés de compte de service
Pour répertorier les clés d'un compte de service particulier, vous pouvez utiliser Cloud Console, l'outil gcloud
, la méthode serviceAccount.keys.list()
ou l'une des bibliothèques clientes.
La méthode serviceAccount.keys.list()
est couramment utilisée pour auditer les comptes et les clés de service. Elle permet également de créer un outil de gestion personnalisé pour les comptes de service.
Pour savoir à quel projet votre clé est associée, vous pouvez la télécharger sous forme de fichier JSON, puis consulter ce fichier.
Il est possible que des clés soient répertoriées alors que vous ne les avez pas créées. Ces clés sont utilisées par les services Google Cloud tels qu'App Engine et Compute Engine. Pour en savoir plus sur la différence entre les clés utilisateur et les clés gérées par Google Cloud, consultez la section Comprendre les comptes de service.
Console
Dans Cloud Console, accédez à la page Comptes de service.
Sélectionnez un projet. Cloud Console répertorie tous les comptes de service du projet, ainsi que les clés correspondantes.
gcloud
Exécutez la commande gcloud iam service-accounts keys list
pour répertorier les clés de compte de service.
Commande :
gcloud iam service-accounts keys list \ --iam-account sa-name@project-id.iam.gserviceaccount.com
Sortie :
KEY_ID | CREATED_AT | EXPIRES_AT |
8e6e3936d7024646f8ceb39792006c07f4a9760c | 2021-01-01T21:01:42Z | 9999-12-31T23:59:59Z |
937c98f870f5c8db970af527aa3c12fd88b1c20a | 2021-01-01T20:55:40Z | 9999-12-31T23:59:59Z |
REST
La méthode projects.serviceAccounts.keys.list
répertorie toutes les clés d'un compte de service donné.
Avant d'utiliser les données de requête ci-dessous, effectuez les remplacements suivants :
project-id
: ID de votre projet Google Cloud.sa-name
: nom du compte de service dont vous souhaitez répertorier les clés.key-types
: facultatif. Liste de types de clés séparés par une virgule que vous souhaitez inclure dans la réponse. Le type de clé indique si une clé est gérée par l'utilisateur (USER_MANAGED
) ou gérée par le système (SYSTEM_MANAGED
). Si aucune valeur n'est spécifiée, toutes les clés sont renvoyées.
Méthode HTTP et URL :
GET https://iam.googleapis.com/v1/projects/project-id/serviceAccounts/sa-name@project-id.iam.gserviceaccount.com/keys?keyTypes=key-types
Pour envoyer votre requête, développez l'une des options suivantes :
Vous devriez recevoir une réponse JSON de ce type :
{ "keys": [ { "name": "projects/my-project/serviceAccounts/my-service-account@my-project.iam.gserviceaccount.com/keys/90c48f61c65cd56224a12ab18e6ee9ca9c3aee7c", "validAfterTime": "2020-03-04T17:39:47Z", "validBeforeTime": "9999-12-31T23:59:59Z", "keyAlgorithm": "KEY_ALG_RSA_2048", "keyOrigin": "GOOGLE_PROVIDED", "keyType": "USER_MANAGED" }, { "name": "projects/my-project/serviceAccounts/my-service-account@my-project.iam.gserviceaccount.com/keys/e5e3800831ac1adc8a5849da7d827b4724b1fce8", "validAfterTime": "2020-03-31T23:50:09Z", "validBeforeTime": "9999-12-31T23:59:59Z", "keyAlgorithm": "KEY_ALG_RSA_2048", "keyOrigin": "GOOGLE_PROVIDED", "keyType": "USER_MANAGED" }, { "name": "projects/my-project/serviceAccounts/my-service-account@my-project.iam.gserviceaccount.com/keys/b97699f042b8eee6a846f4f96259fbcd13e2682e", "validAfterTime": "2020-05-17T18:58:13Z", "validBeforeTime": "9999-12-31T23:59:59Z", "keyAlgorithm": "KEY_ALG_RSA_2048", "keyOrigin": "GOOGLE_PROVIDED", "keyType": "USER_MANAGED" } ] }
C#
Avant d'essayer cet exemple, suivez les instructions de configuration pour C# décrites dans le Guide de démarrage rapide de Cloud IAM – Utiliser les bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API Cloud IAM en langage C#.
Go
Avant d'essayer cet exemple, suivez les instructions de configuration pour Go décrites dans le Guide de démarrage rapide de Cloud IAM – Utiliser les bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API Cloud IAM en langage Go.
Java
Avant d'essayer cet exemple, suivez les instructions de configuration pour Java décrites dans le Guide de démarrage rapide de Cloud IAM – Utiliser les bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API Cloud IAM en langage Java.
Python
Avant d'essayer cet exemple, suivez les instructions de configuration pour Python décrites dans le Guide de démarrage rapide de Cloud IAM – Utiliser les bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API Cloud IAM en langage Python.
Obtenir une clé de compte de service
Vous ne pouvez obtenir les données de clé privée d'une clé de compte de service qu'au moment où vous la créez.
Pour accéder aux informations de base d'une clé, telles que l'ID, l'algorithme et les données de clé publique, utilisez la méthode projects.serviceAccounts.keys.get()
de l'API REST. Cloud Console et l'outil de ligne de commande gcloud
ne permettent pas d'obtenir ces informations.
Importer des clés publiques pour des comptes de service
Vous pouvez importer la partie publique d'une paire de clés gérée par l'utilisateur vers un compte de service. Une fois que vous avez importé la clé publique, celle-ci est associée définitivement au compte de service et est utilisée de la même manière que les autres clés de compte de service gérées par les utilisateurs. Pour désactiver l'importation de clés pour votre projet, consultez la section Limiter l'importation des clés de compte de service.
Si vous choisissez d'utiliser une paire de clés gérée par l'utilisateur au lieu d'une paire de clés gérée par Google, veillez à la gérer et à l'alterner régulièrement.
La clé que vous importez doit être une clé publique RSA encapsulée dans un certificat X.509 v3 et encodée en base64. Vous pouvez utiliser des outils tels que OpenSSL pour générer une clé et un certificat dans ce format. Par exemple, la commande suivante génère une paire de clés RSA de 2 048 bits et encapsule la clé publique dans un certificat autosigné qui est valide pendant 365 jours :
openssl req -x509 -nodes -newkey rsa:2048 -days 365 \
-keyout /path/to/private_key.pem \
-out /path/to/public_key.pem \
-subj "/CN=unused"
Vous pouvez ensuite importer le fichier public_key.pem
en tant que clé publique d'un compte de service.
Console
Dans Cloud Console, accédez à la page Comptes de service.
Sélectionnez un projet.
Cliquez sur l'adresse e-mail du compte de service pour lequel vous souhaitez importer une clé.
Cliquez sur l'onglet Clés.
Cliquez sur le menu déroulant Ajouter une clé, puis sélectionnez Importer une clé existante.
Cliquez sur Parcourir, puis recherchez et sélectionnez votre fichier de clé publique. Vous pouvez également copier et coller le contenu de votre fichier de clé publique dans la zone Coller une clé existante.
Cliquez sur Importer.
gcloud
Exécutez la commande gcloud iam service-accounts keys upload
pour importer une clé publique permettant de signer des clés de compte de service.
Commande :
gcloud iam service-accounts keys upload /path/to/public_key.pem \ --iam-account sa-name@project-id.iam.gserviceaccount.com
Le résultat contient un identifiant unique pour la clé importée :
Name: projects/project-id/serviceAccounts/sa-name@project-id.iam.gserviceaccount.com/keys/c7b74879da78e4cdcbe7e1bf5e129375c0bfa8d0
Pour savoir si la commande a réussi, exécutez la commande gcloud iam service-accounts keys list
:
gcloud iam service-accounts keys list \ --iam-account sa-name@project-id.iam.gserviceaccount.com
Le résultat contiendra l'identifiant unique qui a été renvoyé après la création de la clé :
KEY_ID | CREATED_AT | EXPIRES_AT |
c7b74879da78e4cdcbe7e1bf5e129375c0bfa8d0 | 2019-06-26T21:01:42Z | 9999-12-31T23:59:59Z |
REST
La méthode projects.serviceAccounts.keys.upload
importe la clé publique à partir d'une paire de clés gérée par l'utilisateur et ajoute cette clé au compte de service.
Avant d'utiliser les données de requête ci-dessous, effectuez les remplacements suivants :
project-id
: ID de votre projet Google Cloud.sa-name
: nom du compte de service auquel associer la clé.public-key-data
: données de la clé publique pour la paire de clés. Il doit s'agir d'une clé publique RSA encapsulée dans un certificat X.509 v3. Encodez les données de clé publique en base64, y compris la première ligne,-----BEGIN CERTIFICATE-----
, et la dernière ligne,-----END CERTIFICATE-----
.
Méthode HTTP et URL :
POST https://iam.googleapis.com/v1/projects/project-id/serviceAccounts/sa-name@project-id.iam.gserviceaccount.com/keys:upload
Corps JSON de la requête :
{ "publicKeyData": "public-key-data" }
Pour envoyer votre requête, développez l'une des options suivantes :
Vous devriez recevoir une réponse JSON de ce type :
{ "name": "projects/my-project/serviceAccounts/my-service-account@my-project.iam.gserviceaccount.com/keys/c7b74879da78e4cdcbe7e1bf5e129375c0bfa8d0", "validAfterTime": "2020-05-17T19:31:19Z", "validBeforeTime": "2021-05-17T19:31:19Z", "keyAlgorithm": "KEY_ALG_RSA_2048", "keyOrigin": "USER_PROVIDED", "keyType": "USER_MANAGED" }
Supprimer des clés de compte de service
Pour supprimer une clé de compte de service, vous pouvez utiliser Cloud Console, l'outil gcloud
, la méthode serviceAccount.keys.delete()
ou l'une des bibliothèques clientes.
Si vous supprimez une clé, votre application ne pourra plus accéder aux ressources Google Cloud à l'aide de cette clé. Pour des raisons de sécurité, il est recommandé d'alterner régulièrement vos clés de compte de service. Il suffit de créer une nouvelle clé, de modifier la liaison avec vos applications, puis de supprimer l'ancienne clé. Les méthodes serviceAccount.keys.create()
et serviceAccount.keys.delete()
permettent d'automatiser la rotation.
Console
Dans Cloud Console, accédez à la page Comptes de service.
Sélectionnez un projet.
Cliquez sur l'adresse e-mail du compte de service dont vous souhaitez supprimer la clé.
Cliquez sur l'onglet Clés.
Dans la liste de clés, cliquez sur Supprimer
pour chaque clé que vous souhaitez supprimer.
gcloud
Exécutez la commande gcloud iam service-accounts keys delete
pour supprimer des clés de compte de service.
Commande :
gcloud iam service-accounts keys delete key-id \ --iam-account sa-name@project-id.iam.gserviceaccount.com
Sortie :
Deleted key [8e6e3936d7024646f8ceb39792006c07f4a9760c] for service account [sa-name@project-id.iam.gserviceaccount.com]
REST
La méthode projects.serviceAccounts.keys.delete
supprime une clé de compte de service.
Avant d'utiliser les données de requête ci-dessous, effectuez les remplacements suivants :
project-id
: ID de votre projet Google Cloud.sa-name
: nom du compte de service dont vous souhaitez supprimer la clé.key-id
: ID de la clé que vous souhaitez supprimer.
Méthode HTTP et URL :
DELETE https://iam.googleapis.com/v1/projects/project-id/serviceAccounts/sa-name@project-id.iam.gserviceaccount.com/keys/key-id
Pour envoyer votre requête, développez l'une des options suivantes :
Vous devriez recevoir une réponse JSON de ce type :
{ }
C#
Avant d'essayer cet exemple, suivez les instructions de configuration pour C# décrites dans le Guide de démarrage rapide de Cloud IAM – Utiliser les bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API Cloud IAM en langage C#.
Go
Avant d'essayer cet exemple, suivez les instructions de configuration pour Go décrites dans le Guide de démarrage rapide de Cloud IAM – Utiliser les bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API Cloud IAM en langage Go.
Java
Avant d'essayer cet exemple, suivez les instructions de configuration pour Java décrites dans le Guide de démarrage rapide de Cloud IAM – Utiliser les bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API Cloud IAM en langage Java.
Python
Avant d'essayer cet exemple, suivez les instructions de configuration pour Python décrites dans le Guide de démarrage rapide de Cloud IAM – Utiliser les bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API Cloud IAM en langage Python.
Faites l'essai
Si vous débutez sur Google Cloud, créez un compte pour évaluer les performances de nos produits en conditions réelles. Les nouveaux clients bénéficient également de 300 $ de crédits gratuits pour exécuter, tester et déployer des charges de travail.
Profiter d'un essai gratuit