Les comptes de service sont les comptes que les charges de travail ou les services utilisent pour consommer des ressources de manière programmatique et accéder aux microservices de manière sécurisée. Il s'agit d'un type spécial d'identité utilisé par une application ou une charge de travail, plutôt que par une personne. Comme un compte utilisateur, les comptes de service peuvent se voir accorder des autorisations et des rôles, mais ils ne peuvent pas se connecter comme un utilisateur humain.
Les comptes de service sont utiles pour gérer l'infrastructure d'appliance isolée de Google Distributed Cloud (GDC), par exemple :
- Les services et charges de travail d'appliance isolée GDC internes pour accéder de manière sécurisée à l'interface de programmation d'application (API) du plan de contrôle d'appliance isolée GDC.
- Les charges de travail client dans l'appliance isolée GDC pour accéder aux services d'appliance isolée GDC et effectuer des appels d'interface de programmation d'application (API) autorisés.
- Les charges de travail externes à fédérer avec l'appliance isolée GDC.
- Les services d'appliance isolée GDC ou les contrôleurs système pour accéder de manière sécurisée aux ressources client. Par exemple, les comptes de service peuvent gérer les workflows d'authentification et d'autorisation dans lesquels les contrôleurs de service s'exécutant dans le cluster Kubernetes Bare Metal doivent exécuter des charges de travail gérées par les clients.
Vous pouvez gérer les comptes à l'aide de la console GDC, de la CLI gdcloud ou de l'API. Avec la CLI gdcloud, la fonctionnalité d'identité de service est basée sur l'API ProjectServiceAccount.
Avant de commencer
Vous ne pouvez créer des comptes de service que dans un projet. Pour en savoir plus, consultez Créer un projet.
Créer une identité de service
Pour obtenir les autorisations requises pour créer des comptes de service, demandez à votre administrateur IAM de projet de vous accorder le rôle Administrateur IAM de projet (project-iam-admin).
Les utilisateurs ayant accès aux comptes de service peuvent accéder à tous les comptes de service d'un projet.
Pour créer des identités de service dans un projet, utilisez la console GDC, la CLI gdcloud ou l'API.
Console
- Connectez-vous à la console GDC.
- Dans le menu de navigation, sélectionnez Identity & Access > Service identities (Identité et accès > Identités de service).
- Cliquez sur Create Service Identity (Ajouter une identité de service). La page Service Identity details (Détails de l'identité de service) s'ouvre.
- Dans le champ Service identity name (Nom de l'identité de service), saisissez un nom pour votre identité de service. Exemple :
Test service identity. - Cliquez sur Create (Créer).
gdcloud
Créez une identité de service :
gdcloud iam service-accounts create NAME \
--project=PROJECT
Remplacez les valeurs suivantes :
- NAME : nom de
ProjectServiceAccount. Le nom doit être unique dans l'espace de noms du projet. - PROJECT : projet dans lequel créer l'identité de service. Si
gdcloud initest déjà défini, omettez l'option--projectflag.
Cette commande crée un ProjectServiceAccount dans l'espace de noms du projet.
API
Créez un fichier YAML de ressource personnalisée
ProjectServiceAccount, tel quemy-project-sa.yaml:apiVersion: resourcemanager.gdc.goog/v1 kind: ProjectServiceAccount metadata: name: NAME namespace: PROJECT spec: keys: - algorithm: ALGORITHM id: KEY_ID key: BASE64_ENCODED_KEY validAfter: "START_TIME" validBefore: "EXPIRATION_TIME"Remplacez les variables suivantes :
NAME: nom de la ressourceProjectServiceAccount. Le nom doit être unique dans l'espace de noms du projet.PROJECT: projet dans lequel créer l'identité de service.ALGORITHM: algorithme de la clé. Seules les clés ES256 sont acceptées.KEY_ID: identifiant unique de la clé. L'ID permet de déterminer la clé à vérifier.BASE64_ENCODED_KEY: clé publique encodée en base64 au format PEM à vérifier. La clé privée utilisée pour générer cette clé publique doit être au format ECDSA P256 PEM.START_TIME: heure de début de validité de la clé, par exemple2025-02-07T00:59:34Z.EXPIRATION_TIME: heure d'expiration de la clé, par exemple2026-02-07T00:59:34Z.
Appliquez la ressource personnalisée
ProjectServiceAccountau serveur d'API de gestion :kubectl --kubeconfig MANAGEMENT_API_SERVER_KUBECONFIG apply -f my-project-sa.yamlRemplacez la variable
MANAGEMENT_API_SERVER_KUBECONFIGpar le chemin d'accès au fichier kubeconfig du serveur d'API de gestion.
Afficher les identités de service
Pour afficher la liste des comptes de service d'un projet, utilisez la console GDC ou la CLI gdcloud.
Console
- Connectez-vous à la console GDC.
- Sélectionnez un projet.
- Dans le menu de navigation, cliquez sur Identity & Access > Service Identities (Identité et accès > Identités de service) pour afficher la liste des comptes de service du projet.
gdcloud
Répertoriez les comptes de service d'un projet :
gdcloud iam service-accounts list \
--project=PROJECT
Attribuer une liaison de rôle à l'identité de service
Pour attribuer une liaison de rôle, vous devez disposer des autorisations appropriées. Pour obtenir les autorisations requises pour attribuer des rôles, demandez à votre administrateur IAM de projet de vous accorder le rôle Administrateur IAM de projet (project-iam-admin).
Utilisez la console GDC ou la CLI gdcloud pour attribuer une liaison de rôle.
Console
- Connectez-vous à la console GDC.
- Sélectionnez un projet.
- Dans le menu de navigation, sélectionnez Identity & Access > Access (Identité et accès > Accès).
- Dans la liste Member (Membre), cliquez sur Add member (Ajouter un membre). La page Users and roles (Utilisateurs et rôles) s'affiche.
- Sélectionnez Service identity (Identité de service) dans la liste Member type (Type de membre).
- Dans la liste Service identity (Identité de service), sélectionnez l'identité de service à laquelle vous souhaitez attribuer une liaison de rôle.
- Dans la liste Role (Rôle), sélectionnez le rôle que vous souhaitez attribuer à l'identité de service, par exemple Backup Creator (Créateur de sauvegarde).
- (Facultatif) Pour ajouter un autre rôle, cliquez sur Add another role (Ajouter un autre rôle). Sélectionnez le rôle supplémentaire.
- Cliquez sur Add (Ajouter).
gdcloud
Cette commande crée et nomme la liaison de rôle de projet pour lier le rôle spécifié à ProjectServiceAccount :
gdcloud iam service-accounts add-iam-policy-binding \
--project=PROJECT \
--role=ROLE \
--iam-account=NAME
Remplacez les valeurs suivantes :
- PROJECT : projet dans lequel créer la liaison de rôle.
Si
gdcloud initest déjà défini, vous pouvez omettre l'option--project. - ROLE : rôle prédéfini à attribuer au
ProjectServiceAccount. Spécifiez les rôles au formatRole/name, où Role est le type Kubernetes, tel queRoleouProjectRole, et name est le nom du rôle prédéfini. Par exemple, pour attribuer le rôle Lecteur de projet, définissez le rôle surRole/project-viewer. - NAME : nom de l'identité de service à utiliser.
Supprimer une identité de service
Pour supprimer des comptes de service dans un projet, utilisez la console GDC ou la CLI gdcloud.
Une fois que vous avez supprimé une identité de service, les applications n'ont plus accès aux ressources du projet via cette identité de service.
Console
- Connectez-vous à la console GDC.
- Dans le menu de navigation, sélectionnez Identity & Access > Service Identities (Identité et accès > Identités de service).
- Cochez la case de l'identité de service que vous souhaitez supprimer.
- Cliquez sur Delete (Supprimer).
- La boîte de dialogue de confirmation s'affiche. Dans le champ Confirm by typing the following below (Confirmez en saisissant ce qui suit), saisissez
remove. - Cliquez sur Delete (Supprimer).
gdcloud
Exécutez la commande suivante pour supprimer une identité de service :
gdcloud iam service-accounts delete NAME \
--project=PROJECT
Créer et ajouter des paires de clés
Pour créer et ajouter des paires de clés dans un projet, utilisez la console GDC, la CLI gdcloud ou l'API.
Console
- Connectez-vous à la console GDC.
- Dans le menu de navigation, sélectionnez Identity & Access > Service Identities (Identité et accès > Identités de service).
- Cliquez sur le nom de l'identité de service que vous souhaitez ajouter dans la clé.
- Cliquez sur Create New Key (Ajouter une clé).
- La nouvelle clé s'affiche dans la liste Keys (Clés), et une boîte de dialogue confirme que vous avez créé la clé.
gdcloud
La commande gdcloud crée le fichier JSON des identifiants par défaut de l'application, ainsi que les paires de clés publique et privée :
gdcloud iam service-accounts keys create APPLICATION_DEFAULT_CREDENTIALS_FILENAME \
--project=PROJECT \
--iam-account=NAME \
--ca-cert-path=CA_CERTIFICATE_PATH
Remplacez les valeurs suivantes :
- APPLICATION_DEFAULT_CREDENTIALS_FILENAME : nom du fichier JSON.
- PROJECT : sélectionne le projet pour lequel créer la clé.
Si
gdcloud initest déjà défini, vous pouvez omettre l'option--project. - NAME : nom de l'identité de service pour laquelle ajouter la clé.
- CA_CERTIFICATE_PATH : facultatif : chemin d'accès au certificat de l'autorité de certification (CA) pour vérifier le point de terminaison d'authentification. Si vous ne spécifiez pas ce chemin, les certificats CA du système sont utilisés. Vous devez installer l'autorité de certification dans les certificats CA du système.
L'appliance isolée GDC ajoute la clé publique aux clés ProjectServiceAccount que vous utilisez pour vérifier les jetons Web JSON (JWT) signés par la clé privée. La clé privée écrit dans le fichier JSON des identifiants par défaut de l'application.
L'exemple suivant montre le fichier JSON des identifiants par défaut de l'application :
{
"type": "gdch_service_account",
"format_version": "1",
"project": "project_name",
"private_key_id": "abcdef1234567890",
"private_key": "-----BEGIN PRIVATE KEY-----\nETC\n-----END PRIVATE KEY-----\n",
"name": "service_identity_name",
"ca_cert_path": "service_identity_name",
"token_uri": "https://service-identity.<Domain>/authenticate"
}
Cet exemple utilise les valeurs suivantes :
project: espace de noms du projet dans l'organisation.private_key_id: ID attribué à la clé.private_key: clé privée ECDSA P256 au format PEM générée par la CLI.name: nom de l'identité de service.token_uri: adresse du point de terminaison d'authentification.
API
Générez la paire de clés publique et privée. Les commandes suivantes utilisent
opensslà titre d'exemple, car il s'agit d'un outil courant à cet effet.openssl ecparam -name prime256v1 -genkey -noout -out "key.pem" openssl ec -in "key.pem" -pubout > "pub.pem"Encodez la clé publique en base64 et récupérez son ID de clé :
KEY_ID=$(openssl pkey -in key.pem -pubout -outform der | openssl dgst -sha256 | sed 's/^.* //') BASE64_ENCODED_KEY=$(cat pub.pem | base64)Créez ou mettez à jour le fichier YAML de ressource personnalisée
ProjectServiceAccount, y compris les informations de clé générées à l'étape précédente :apiVersion: resourcemanager.gdc.goog/v1 kind: ProjectServiceAccount metadata: name: NAME namespace: PROJECT spec: keys: - algorithm: ALGORITHM id: KEY_ID key: BASE64_ENCODED_KEY validAfter: "START_TIME" validBefore: "EXPIRATION_TIME"Remplacez les variables suivantes :
NAME: nom de la ressourceProjectServiceAccount. Le nom doit être unique dans l'espace de noms du projet.PROJECT: projet dans lequel vous créez la clé.ALGORITHM: algorithme de la clé. Seules les clés ES256 sont acceptées.KEY_ID: identifiant unique de la clé. L'ID permet de déterminer la clé à vérifier.BASE64_ENCODED_KEY: clé publique encodée en base64 au format PEM à vérifier. La clé privée utilisée pour générer cette clé publique doit être au format ECDSA P256 PEM.START_TIME: heure de début de validité de la clé, par exemple2025-02-07T00:59:34Z.EXPIRATION_TIME: heure d'expiration de la clé, par exemple2026-02-07T00:59:34Z.
Appliquez la ressource personnalisée
ProjectServiceAccountau serveur d'API de gestion :kubectl --kubeconfig MANAGEMENT_API_SERVER_KUBECONFIG apply -f my-project-sa.yamlRemplacez la variable
MANAGEMENT_API_SERVER_KUBECONFIGpar le chemin d'accès au fichier kubeconfig du serveur d'API de gestion.Créez le fichier JSON des identifiants par défaut de l'application contenant la clé privée. Assurez-vous que la variable
KEY_IDdu fichier JSON est définie sur la même valeur que la variableKEY_IDque vous avez utilisée dans la spécificationProjectServiceAccount.cat <<EOF > "key_file.json" { "format_version": "1", "name": "NAME", "private_key": "$(tr '\n' '\t' < "key.pem" | sed 's/\t/\\n/g')", "private_key_id": "KEY_ID", "project": "PROJECT", "token_uri": "AUTH_URL", "type": "gdch_service_account" } EOFRemplacez les variables suivantes :
NAME: nom de l'identité de service.KEY_ID: identifiant unique de la clé. L'ID permet de déterminer la clé à vérifier et doit correspondre à la valeurKEY_IDutilisée dans la spécificationProjectServiceAccount.PROJECT: espace de noms du projet dans l'organisation.AUTH_URL: adresse du point de terminaison d'authentification.
Ajoutez la paire de clés à votre projet en activant le compte de service :
gdcloud auth activate-service-account –-key-file=key_file.json
Répertorier les identifiants des comptes de service
Répertoriez les clés publiques d'un ProjectServiceAccount spécifique dans le projet :
gdcloud iam service-accounts keys list \
--project=PROJECT \
--iam-account=NAME
Supprimer les identifiants
Pour supprimer la clé publique, utilisez la console GDC ou la CLI gdcloud.
Console
- Connectez-vous à la console GDC.
- Dans le menu de navigation, sélectionnez Identity & Access > Service Identities (Identité et accès > Identités de service).
- Cliquez sur le nom de l'identité de service contenant la clé que vous souhaitez supprimer.
- Cliquez sur Delete (Supprimer).
- Dans la boîte de dialogue de confirmation, cliquez sur Delete (Supprimer).
gdcloud
Supprimez la clé publique avec l'ID de clé du ProjectServiceAccount spécifique dans le projet :
gdcloud iam service-accounts keys delete KEY_ID \
--project=PROJECT \
--iam-account=NAME
Autoriser un compte de service à l'aide d'une clé de compte de service
Vous pouvez utiliser la commande gdcloud pour activer un compte de service à l'aide d'une clé de compte de service :
Créez un fichier de clé de compte de service, si vous n'en avez pas déjà un.
Activez le compte de service en exécutant la commande suivante :
gdcloud auth activate-service-account --key-file=KEY_FILERemplacez KEY_FILE par le chemin d'accès au fichier de clé du compte de service.
Après avoir activé le compte de service,
gdcloudutilise les identifiants du compte de service pour les commandes suivantes, au lieu de vos identifiants utilisateur.