S'authentifier avec des comptes de service

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

  1. Connectez-vous à la console GDC.
  2. Dans le menu de navigation, sélectionnez Identity & Access > Service identities (Identité et accès > Identités de service).
  3. Cliquez sur Create Service Identity (Ajouter une identité de service). La page Service Identity details (Détails de l'identité de service) s'ouvre.
  4. Dans le champ Service identity name (Nom de l'identité de service), saisissez un nom pour votre identité de service. Exemple : Test service identity.
  5. 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 init est déjà défini, omettez l'option --project flag.

Cette commande crée un ProjectServiceAccount dans l'espace de noms du projet.

API

  1. Créez un fichier YAML de ressource personnalisée ProjectServiceAccount, tel que my-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 ressource ProjectServiceAccount. 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 exemple 2025-02-07T00:59:34Z.
    • EXPIRATION_TIME: heure d'expiration de la clé, par exemple 2026-02-07T00:59:34Z.
  2. Appliquez la ressource personnalisée ProjectServiceAccount au serveur d'API de gestion :

    kubectl --kubeconfig MANAGEMENT_API_SERVER_KUBECONFIG apply -f my-project-sa.yaml
    

    Remplacez la variable MANAGEMENT_API_SERVER_KUBECONFIG par 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

  1. Connectez-vous à la console GDC.
  2. Sélectionnez un projet.
  3. 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

  1. Connectez-vous à la console GDC.
  2. Sélectionnez un projet.
  3. Dans le menu de navigation, sélectionnez Identity & Access > Access (Identité et accès > Accès).
  4. Dans la liste Member (Membre), cliquez sur Add member (Ajouter un membre). La page Users and roles (Utilisateurs et rôles) s'affiche.
  5. Sélectionnez Service identity (Identité de service) dans la liste Member type (Type de membre).
  6. Dans la liste Service identity (Identité de service), sélectionnez l'identité de service à laquelle vous souhaitez attribuer une liaison de rôle.
  7. 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).
  8. (Facultatif) Pour ajouter un autre rôle, cliquez sur Add another role (Ajouter un autre rôle). Sélectionnez le rôle supplémentaire.
  9. 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 init est 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 format Role/name, où Role est le type Kubernetes, tel que Role ou ProjectRole, 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 sur Role/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

  1. Connectez-vous à la console GDC.
  2. Dans le menu de navigation, sélectionnez Identity & Access > Service Identities (Identité et accès > Identités de service).
  3. Cochez la case de l'identité de service que vous souhaitez supprimer.
  4. Cliquez sur Delete (Supprimer).
  5. 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.
  6. 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

  1. Connectez-vous à la console GDC.
  2. Dans le menu de navigation, sélectionnez Identity & Access > Service Identities (Identité et accès > Identités de service).
  3. Cliquez sur le nom de l'identité de service que vous souhaitez ajouter dans la clé.
  4. Cliquez sur Create New Key (Ajouter une clé).
  5. 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 init est 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

  1. 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"
    
  2. 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)
    
  3. 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 ressource ProjectServiceAccount. 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 exemple 2025-02-07T00:59:34Z.
    • EXPIRATION_TIME: heure d'expiration de la clé, par exemple 2026-02-07T00:59:34Z.
  4. Appliquez la ressource personnalisée ProjectServiceAccount au serveur d'API de gestion :

    kubectl --kubeconfig MANAGEMENT_API_SERVER_KUBECONFIG apply -f my-project-sa.yaml
    

    Remplacez la variable MANAGEMENT_API_SERVER_KUBECONFIG par le chemin d'accès au fichier kubeconfig du serveur d'API de gestion.

  5. Créez le fichier JSON des identifiants par défaut de l'application contenant la clé privée. Assurez-vous que la variable KEY_ID du fichier JSON est définie sur la même valeur que la variable KEY_ID que vous avez utilisée dans la spécification ProjectServiceAccount.

    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"
    }
    EOF
    

    Remplacez 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 valeur KEY_ID utilisée dans la spécification ProjectServiceAccount.
    • PROJECT: espace de noms du projet dans l'organisation.
    • AUTH_URL: adresse du point de terminaison d'authentification.
  6. 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

  1. Connectez-vous à la console GDC.
  2. Dans le menu de navigation, sélectionnez Identity & Access > Service Identities (Identité et accès > Identités de service).
  3. Cliquez sur le nom de l'identité de service contenant la clé que vous souhaitez supprimer.
  4. Cliquez sur Delete (Supprimer).
  5. 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 :

  1. Créez un fichier de clé de compte de service, si vous n'en avez pas déjà un.

  2. Activez le compte de service en exécutant la commande suivante :

    gdcloud auth activate-service-account --key-file=KEY_FILE
    

    Remplacez KEY_FILE par le chemin d'accès au fichier de clé du compte de service.

    Après avoir activé le compte de service, gdcloud utilise les identifiants du compte de service pour les commandes suivantes, au lieu de vos identifiants utilisateur.