Importer des clés de compte de service

Cette page explique comment importer une clé publique pour un compte de service. Après avoir importé la clé publique, vous pouvez utiliser la clé privée de la paire de clés pour vous authentifier en tant que compte de service.

Avant de commencer

Rôles requis

Pour obtenir les autorisations nécessaires pour gérer des clés de compte de service, demandez à votre administrateur de vous attribuer le rôle IAM Administrateur de clés de compte de service (roles/iam.serviceAccountKeyAdmin) sur le projet, ou sur le compte de service dont vous souhaitez gérer les clés. Pour en savoir plus sur l'attribution de rôles, consultez la page Gérer l'accès aux projets, aux dossiers et aux organisations.

Vous pouvez également obtenir les autorisations requises via des rôles personnalisés ou d'autres rôles prédéfinis.

Pour en savoir plus, consultez la section Rôles des comptes de service.

Selon la configuration de vos règles d'administration, vous devrez peut-être également autoriser l'importation de clés de compte de service dans votre projet avant d'en importer une.

Pour obtenir les autorisations nécessaires pour permettre l'importation de clés de compte de service dans un projet, demandez à votre administrateur de vous accorder les rôles IAM suivants dans votre organisation :

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

Ces rôles prédéfinis contiennent les autorisations requises pour permettre l'importation de clés de compte de service dans un projet. Pour connaître les autorisations exactes requises, développez la section Autorisations requises :

Autorisations requises

Les autorisations suivantes sont requises pour permettre l'importation de clés de compte de service dans un projet :

  • orgpolicy.constraints.list
  • orgpolicy.customConstraints.create
  • orgpolicy.customConstraints.delete
  • orgpolicy.customConstraints.get
  • orgpolicy.customConstraints.list
  • orgpolicy.customConstraints.update
  • orgpolicy.policies.create
  • orgpolicy.policies.delete
  • orgpolicy.policies.list
  • orgpolicy.policies.update
  • orgpolicy.policy.get
  • orgpolicy.policy.set
  • resourcemanager.organizations.get
  • resourcemanager.projects.listTagBindings
  • resourcemanager.projects.listEffectiveTags
  • resourcemanager.tagKeys.get
  • resourcemanager.tagKeys.list
  • resourcemanager.tagValues.list
  • resourcemanager.tagValues.get

Vous pouvez également obtenir ces autorisations avec des rôles personnalisés ou d'autres rôles prédéfinis.

Autoriser l'importation de clés de compte de service

Avant de créer une clé de compte de service, assurez-vous que la contrainte de règle d'organisation iam.disableServiceAccountKeyUpload n'est pas appliquée à votre projet. Si cette contrainte est appliquée à votre projet, vous ne pouvez pas importer de clés de compte de service dans ce projet.

Nous vous recommandons d'appliquer cette contrainte à la plupart des projets et de n'exempter que ceux qui nécessitent vraiment des clés de compte de service. Pour en savoir plus sur les autres méthodes d'authentification, consultez Choisir la méthode d'authentification adaptée à votre cas d'utilisation.

Pour exempter un projet de la contrainte de règle d'organisation iam.disableServiceAccountKeyUpload, demandez à un administrateur des règles d'organisation d'effectuer les opérations suivantes :

  1. Au niveau de l'organisation, créez une clé de tag et une valeur de tag que vous utiliserez pour définir si un projet ou un dossier doit être exempté de la règle d'administration. Nous vous recommandons de créer un tag ayant comme clé disableServiceAccountKeyUpload et comme valeurs possibles enforced et not_enforced.

    Pour savoir comment créer des clés et des valeurs de tags, consultez la section Créer et définir un tag.

  2. Associez la balise disableServiceAccountKeyUpload à l'organisation et définissez sa valeur sur enforced. Tous les projets ou dossiers de l'organisation héritent de cette valeur de tag, sauf si elle est remplacée par une valeur de tag différente.

    Pour apprendre à associer des tags à des ressources, consultez la section Associer des tags aux ressources.

  3. Associez à chaque projet ou dossier que vous souhaitez exempter de la règle d'administration le tag disableServiceAccountKeyUpload et définissez sa valeur sur not_enforced. Définir de cette manière une valeur de tag pour un projet ou un dossier remplace la valeur de tag héritée de l'organisation.
  4. Créez ou mettez à jour la règle d'administration qui empêche l'importation de clés de compte de service afin qu'elle n'applique pas la contrainte pour les ressources exemptées. Cette règle doit comporter les règles suivantes :

    • Configurez la contrainte iam.disableServiceAccountKeyUpload pour qu'elle ne soit appliquée à aucune ressource portant le tag disableServiceAccountKeyUpload: not_enforced. La condition de cette règle doit se présenter comme suit :

      resource.matchTag(\"ORGANIZATION_ID/disableServiceAccountKeyUpload\", \"not_enforced\")
      
    • Configurez la contrainte iam.disableServiceAccountKeyUpload à appliquer à toutes les autres ressources.

    Pour découvrir comment créer des règles d'administration avec des conditions de tags, consultez la page Définir une règle d'administration avec des tags.

Importer une clé publique pour un compte de service

Vous pouvez importer la partie publique d'une paire de clés gérée par l'utilisateur pour l'associer à un compte de service. Une fois que vous avez importé la clé publique, vous pouvez utiliser la clé privée de la paire de clés en tant que clé de compte de service.

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.

N'incluez aucune information privée dans le certificat X.509. Plus précisément, utilisez un objet générique et n'ajoutez aucun attribut facultatif. Les certificats sont visibles publiquement. Toute information privée inclue dans le certificat est visible par toute personne qui le récupère. Pour en savoir plus, consultez la section Éviter de divulguer des informations confidentielles dans les certificats X.509 importés.

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

  1. Dans Google Cloud Console, accédez à la page Comptes de service.

    Accéder à la page "Comptes de service"

    Les étapes restantes s'affichent dans la console Google Cloud.

  2. Sélectionnez un projet.
  3. Sur la page Comptes de service, cliquez sur l'adresse e-mail du compte de service pour lequel vous souhaitez importer une clé.
  4. Cliquez sur l'onglet Clés.
  5. Cliquez sur le menu déroulant Ajouter une clé, puis sélectionnez Importer une clé existante.
  6. 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.
  7. 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.

Remplacez les valeurs suivantes :

  • KEY_FILE : chemin d'accès au fichier contenant les données de clé à importer (par exemple, ./public_key.pem).
  • SA_NAME : nom du compte de service pour lequel importer une clé.
  • PROJECT_ID : ID de votre projet Google Cloud.
gcloud iam service-accounts keys upload KEY_FILE \
    --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 DÉSACTIVÉ
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. Les ID de projet sont des chaînes alphanumériques, telles que my-project.
  • 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"
}

Désactiver l'importation de clés publiques

Pour désactiver l'importation de clés pour votre projet, consultez la section Limiter l'importation des clés de compte de service.

Étape suivante

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.

Essai gratuit