Configurer mTLS de backend à l'aide d'une identité de charge de travail gérée

Ce document explique comment configurer une identité de charge de travail gérée sur le service de backend d'un équilibreur de charge. Une fois que vous avez attribué une identité gérée, l'équilibreur de charge et ses backends peuvent s'authentifier mutuellement à l'aide du protocole mTLS de backend.

Pour configurer mTLS de backend à l'aide d'une identité de charge de travail gérée, vous devez procéder comme suit :

  1. Configurez un pool d'autorités de certification (CA) Certificate Authority Service pour émettre des certificats X.509 pour les identités de charge de travail gérées.
  2. Configurez un domaine de confiance en créant un pool d'identités de charge de travail avec un espace de noms, une identité gérée, une règle d'attestation, une ressource de configuration d'émission de certificat intégrée et une ressource de configuration de confiance intégrée.1
  3. Associez l'autorité de certification au pool d'identités de charge de travail à l'aide de la configuration d'émission de certificats intégrée.
  4. Autorisez les identités de charge de travail gérées à demander des certificats à partir du pool d'autorités de certification.
  5. Créez l'équilibreur de charge et associez l'identité gérée à son service de backend.

1 Vous devez créer une configuration de confiance intégrée uniquement si l'équilibreur de charge et ses backends se trouvent dans des domaines de confiance différents. Pour cet exemple, l'équilibreur de charge et les backends font partie du même domaine de confiance. Par conséquent, la configuration de la ressource de configuration de confiance intégrée est facultative.

Pour créer une identité gérée pour les backends, consultez Présentation des identités de charge de travail gérées.

Avant de commencer

  1. Create or select a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.
    • Create a Google Cloud project:

      gcloud projects create PROJECT_ID

      Replace PROJECT_ID with a name for the Google Cloud project you are creating.

    • Select the Google Cloud project that you created:

      gcloud config set project PROJECT_ID

      Replace PROJECT_ID with your Google Cloud project name.

  2. Consultez le document Présentation de l'authentification mTLS du backend avec les identités de charge de travail gérées.

  3. Découvrez ce qu'est l'émission de certificats à l'aide de Certificate Authority Service.

  4. Enable the IAM, Certificate Authority Service, Compute Engine, Certificate Manager, and Network Security APIs:

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    gcloud services enable iam.googleapis.com privateca.googleapis.com compute.googleapis.com certificatemanager.googleapis.com  networksecurity.googleapis.com

  5. Configurez la Google Cloud CLI afin d'utiliser le projet ajouté à la liste d'autorisation pour la facturation et les quotas.

    gcloud config set billing/quota_project PROJECT_ID
    

    Remplacez PROJECT_ID par l'ID du projet qui a été ajouté à la liste d'autorisation pour l'identité de charge de travail gérée en preview.

  6. Créez une identité gérée pour le backend. Pour en savoir plus, consultez Présentation des identités de charge de travail gérées.

Rôles requis

Pour obtenir les autorisations nécessaires pour créer des identités de charge de travail gérées et provisionner des certificats d'identité de charge de travail gérés, 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.

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

Configurer le service d'autorité de certification pour émettre des certificats pour les identités de charge de travail gérées

Vous pouvez utiliser des pools d'autorités de certification pour configurer une autorité de certification racine. Le pool d'autorités de certification émet les certificats X.509 pour les identités de charge de travail gérées.

Créer le pool d'autorités de certification racine

Créez le pool d'autorités de certification racine au niveau Enterprise à l'aide de la commande gcloud privateca pools create. Ce niveau est conçu pour l'émission de certificats de longue durée, à faible volume.

gcloud privateca pools create ROOT_CA_POOL_ID \
    --location=REGION \
    --project=PROJECT_ID \
    --tier=enterprise

Remplacez les éléments suivants :

  • ROOT_CA_POOL_ID : ID unique pour le pool d'autorités de certification racine

  • REGION : région où se trouve le pool d'autorités de certification racine

  • PROJECT_ID : ID du projet

Pour en savoir plus sur les pools d'autorités de certification, consultez Créer un pool d'autorités de certification.

Créer une autorité de certification racine

Créez une autorité de certification racine dans le pool d'autorités de certification racine à l'aide de la commande gcloud privateca roots create.

Pour créer une autorité de certification racine, exécutez la commande suivante :

gcloud privateca roots create ROOT_CA_ID \
    --pool=ROOT_CA_POOL_ID \
    --subject="CN=ROOT_CA_CN, O=ROOT_CA_ORGANIZATION" \
    [--key-algorithm="KEY_ALGORITHM"] \
    --max-chain-length=1 \
    --location=REGION \
    --project=PROJECT_ID \
    --auto-enable

Remplacez les éléments suivants :

  • ROOT_CA_ID : nom unique de l'autorité de certification racine. Ce nom peut comporter jusqu'à 64 caractères et ne doit contenir que des caractères alphanumériques minuscules et majuscules, des traits de soulignement ou des traits d'union. Le nom de l'autorité de certification doit être unique dans la région.
  • ROOT_CA_POOL_ID : ID du pool d'autorités de certification racine.
  • ROOT_CA_CN : nom commun de l'autorité de certification racine.
  • ROOT_CA_ORGANIZATION : organisation de l'autorité de certification racine.
  • KEY_ALGORITHM : algorithme à utiliser pour créer une clé Cloud KMS. Cette option est facultative. Si vous n'incluez pas cette option, l'algorithme de clé est défini par défaut sur rsa-pkcs1-4096-sha256.
  • REGION : région où se trouve le pool d'autorités de certification racine.
  • PROJECT_ID : ID du projet.

Pour en savoir plus sur les autorités de certification racine, consultez Créer une autorité de certification racine.

Créer des identités de charge de travail gérées

Lorsque vous utilisez des identités de charge de travail gérées, Google Cloud peut provisionner et gérer automatiquement les certificats X.509 du Certificate Authority Service. Les identités de charge de travail sont définies dans un pool d'identités de charge de travail et sont organisées en limites administratives appelées espaces de noms.

Créer un pool d'identités de charge de travail

Vous devez créer un pool en mode TRUST_DOMAIN pour créer des identités de charge de travail gérées. Pour créer un pool d'identités de charge de travail pour les identités de charge de travail gérées, utilisez la commande gcloud iam workload-identity-pools create.

gcloud iam workload-identity-pools create WORKLOAD_IDENTITY_POOL_ID \
    --location="global" \
    --mode="TRUST_DOMAIN"

Remplacez WORKLOAD_IDENTITY_POOL_ID par l'ID unique du pool. L'ID doit comporter entre 4 et 32 caractères, ne contenir que des caractères alphanumériques minuscules et des tirets, et commencer et se terminer par un caractère alphanumérique. Une fois que vous avez créé un pool d'identités de charge de travail, vous ne pouvez plus modifier son ID.

Pour vérifier que votre pool d'identités de charge de travail a été créé en mode TRUST_DOMAIN, utilisez la commande gcloud iam workload-identity-pools describe.

gcloud iam workload-identity-pools describe WORKLOAD_IDENTITY_POOL_ID \
    --location="global"

Le résultat ressemble à ce qui suit :

mode: TRUST_DOMAIN
name: projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/WORKLOAD_IDENTITY_POOL_ID
state: ACTIVE

Ce résultat inclut les valeurs suivantes :

  • PROJECT_NUMBER : numéro de votre projetGoogle Cloud
  • WORKLOAD_IDENTITY_POOL_ID : ID du pool d'identités de charge de travail

Créer un espace de noms

La commande gcloud iam workload-identity-pools namespaces create vous permet de créer un espace de noms dans un pool d'identités de charge de travail.

gcloud iam workload-identity-pools namespaces create NAMESPACE_ID \
    --workload-identity-pool="WORKLOAD_IDENTITY_POOL_ID" \
    --location="global"

Remplacez les éléments suivants :

  • NAMESPACE_ID : ID unique de l'espace de noms. L'ID doit comporter entre 2 et 63 caractères, ne contenir que des caractères alphanumériques minuscules et des tirets, et commencer et se terminer par un caractère alphanumérique. Une fois que vous avez créé un espace de noms, vous ne pouvez pas modifier son ID.
  • WORKLOAD_IDENTITY_POOL_ID : ID du pool d'identités de charge de travail que vous avez créé précédemment.

Créer une identité de charge de travail gérée

La commande gloud iam workload-identity-pools managed-identities create vous permet de créer une identité de charge de travail gérée dans un espace de noms de pool d'identités de charge de travail.

gcloud iam workload-identity-pools managed-identities create MANAGED_IDENTITY_ID \
    --namespace="NAMESPACE_ID" \
    --workload-identity-pool="WORKLOAD_IDENTITY_POOL_ID" \
    --location="global"

Remplacez les éléments suivants :

  • MANAGED_IDENTITY_ID : ID unique de l'identité gérée. L'ID doit comporter entre 2 et 63 caractères, ne contenir que des caractères alphanumériques minuscules et des tirets, et commencer et se terminer par un caractère alphanumérique. Une fois que vous avez créé une identité de charge de travail gérée, vous ne pouvez pas modifier son ID.
  • NAMESPACE_ID : ID de l'espace de noms que vous avez créé précédemment.
  • WORKLOAD_IDENTITY_POOL_ID : ID du pool d'identités de charge de travail que vous avez créé précédemment.

L'ID de votre identité de charge de travail gérée est l'identifiant SPIFFE, dont le format est le suivant :

spiffe://WORKLOAD_IDENTITY_POOL_ID.global.PROJECT_NUMBER.workload.id.goog/ns/NAMESPACE_ID/sa/MANAGED_IDENTITY_ID

Créer une règle d'attestation

Dans cet exemple, une règle d'attestation contenue dans une règle d'attestation vérifie si le service de backend fait partie d'un projet spécifique. Si la validation de la règle d'attestation réussit, IAM demande un certificat X.509 pour l'identité gérée au service d'autorité de certification.

Pour créer une règle d'attestation, exécutez la commande suivante pour ajouter une règle d'attestation.

gcloud iam workload-identity-pools managed-identities add-attestation-rule MANAGED_IDENTITY_ID \
    --namespace=NAMESPACE_ID \
    --workload-identity-pool=WORKLOAD_IDENTITY_POOL_ID \
    --google-cloud-resource='//compute.googleapis.com/projects/PROJECT_NUMBER/type/BackendService/*' \
    --location=global

Remplacez les éléments suivants :

  • MANAGED_IDENTITY_ID : ID unique de l'identité gérée. L'ID doit comporter entre 2 et 63 caractères, ne contenir que des caractères alphanumériques minuscules et des tirets, et commencer et se terminer par un caractère alphanumérique. Une fois que vous avez créé une identité de charge de travail gérée, vous ne pouvez pas modifier son ID.
  • NAMESPACE_ID : ID de l'espace de noms que vous avez créé précédemment.
  • WORKLOAD_IDENTITY_POOL_ID : ID du pool d'identités de charge de travail que vous avez créé précédemment.
  • PROJECT_NUMBER : numéro du projet Google Cloud .

Créer une configuration d'émission de certificats intégrée

Pour associer une autorité de certification à un pool d'identités de charge de travail, ce pool doit disposer d'une configuration d'émission de certificats intégrée.

Pour configurer une configuration d'émission de certificat intégrée, créez un fichier de configuration au format JSON (cic.json). Le format du fichier est semblable à ce qui suit :

{
  "inlineCertificateIssuanceConfig": {
      "caPools": {
        "REGION": "projects/PROJECT_NUMBER/locations/REGION/caPools/ROOT_CA_POOL_ID",
      },
      ["lifetime": "CERTIFICATE_LIFETIME"],
      ["rotationWindowPercentage": ROTATION_WINDOW_PERCENTAGE],
      ["keyAlgorithm": "ALGORITHM"]
  }
}

Remplacez les éléments suivants :

  • REGION : région où se trouve l'autorité de certification.

  • PROJECT_NUMBER : Numéro du projet Pour obtenir le numéro de projet à partir du projet spécifié par la variable PROJECT_ID, exécutez la commande suivante :

    gcloud projects describe PROJECT_ID --format="value(projectNumber)"
    
  • ROOT_CA_POOL_ID : ID du pool d'autorités de certification racine.

  • CERTIFICATE_LIFETIME : durée de vie des certificats de charge de travail émis par le pool d'autorités de certification en secondes (par exemple, 86400s pour 24 heures). CERTIFICATE_LIFETIME doit être une valeur comprise entre 24 heures et 30 jours. Si CERTIFICATE_LIFETIME n'est pas spécifié, la durée de vie du certificat est de 24 heures par défaut. CERTIFICATE_LIFETIME est facultatif.

  • ROTATION_WINDOW_PERCENTAGE : pourcentage de la durée de vie du certificat au cours duquel un renouvellement est déclenché. La valeur de ROTATION_WINDOW_PERCENTAGE doit être comprise entre 50 et 80. La valeur par défaut est 50. ROTATION_WINDOW_PERCENTAGE est facultatif.

  • ALGORITHM : algorithme de chiffrement utilisé pour générer la clé privée. Les valeurs valides pour ALGORITHM sont ECDSA_P256 (par défaut), ECDSA_P384, RSA_2048, RSA_3072 et RSA_4096. ALGORITHM est facultatif.

Créer une configuration de confiance intégrée

Dans cet exemple de configuration, l'équilibreur de charge et le backend font partie du même domaine de confiance et partagent le même certificat racine. Par conséquent, la configuration de la configuration de confiance intégrée est facultative. La racine de confiance commune est utilisée pour créer une chaîne de confiance et valider l'identité des charges de travail dans le domaine de confiance.

Hiérarchie des ressources d'identité de charge de travail gérée.
Hiérarchie des ressources d'identité de charge de travail gérée (cliquez pour agrandir)

Par défaut, vos charges de travail appartenant au même domaine de confiance peuvent s'authentifier mutuellement à l'aide d'identités de charge de travail gérées. Si vous souhaitez que les charges de travail appartenant à des domaines de confiance différents s'authentifient mutuellement, vous devez déclarer explicitement la relation d'approbation dans le pool d'identités de charge de travail. Pour ce faire, vous devez créer une configuration de confiance intégrée qui reconnaît et accepte les certificats provenant d'autres domaines de confiance.

Pour créer une configuration de confiance intégrée, procédez comme suit :

  1. Téléchargez les certificats.

    gcloud privateca pools get-ca-certs ROOT_CA_POOL_ID \
        --output-file=CERTIFICATE_PATH \
        --location=REGION
    

    Remplacez les éléments suivants :

    • ROOT_CA_POOL_ID : ID du pool d'autorités de certification racine
    • CERTIFICATE_PATH : chemin d'accès vers lequel exporter le certificat encodé au format PEM.
    • REGION : région du pool d'autorités de certification racine
  2. Créez un fichier de configuration au format JSON (tc.json) contenant la configuration de confiance intégrée, avec des certificats au format PEM.

    Le fichier ressemble à ceci :

    {
      "inlineTrustConfig": {
        "additionalTrustBundles": {
          "TRUST_DOMAIN_NAME1": {
            "trustAnchors": [
              {
                  "pemCertificate": "-----BEGIN CERTIFICATE-----\nCERTIFICATE_MATERIAL1\n-----END CERTIFICATE-----"
              },
              {
                  "pemCertificate": "-----BEGIN CERTIFICATE-----\nCERTIFICATE_MATERIAL2\n-----END CERTIFICATE-----"
              }
            ]
          },
          "TRUST_DOMAIN_NAME2": {
            "trustAnchors": [
              {
                  "pemCertificate": "-----BEGIN CERTIFICATE-----\nCERTIFICATE_MATERIAL3\n-----END CERTIFICATE-----"
              },
              {
                  "pemCertificate": "-----BEGIN CERTIFICATE-----\nCERTIFICATE_MATERIAL4\n-----END CERTIFICATE-----"
              }
            ]
          }
        }
      }
    }
    

    Remplacez les éléments suivants :

    • TRUST_DOMAIN_NAME : le domaine de confiance peut être n'importe quel domaine de confiance (comme "example.com"), y compris un autre domaine de confiance de pool d'identités de charge de travail (ou même le même).

      Pour un domaine de confiance de pool d'identités de charge de travail, le nom du domaine de confiance est mis en forme comme suit :

      WORKLOAD_IDENTITY_POOL_ID.global.PROJECT_NUMBER.workload.id.goog
      

      Dans le format, remplacez les éléments suivants :

      • WORKLOAD_IDENTITY_POOL_ID : ID du pool d'identités de charge de travail
      • PROJECT_NUMBER : numéro du projet contenant le pool d'identités de charge de travail
    • CERTIFICATE_MATERIAL : certificat CA au format PEM autorisé à émettre des certificats dans le domaine de confiance. La commande suivante peut être utilisée pour encoder un fichier de certificat au format PEM dans une chaîne d'une seule ligne :

      cat trust-anchor.pem | sed 's/^[ ]*//g' | sed -z '$ s/\n$//' | tr '\n' $ | sed 's/\$/\\n/g'
      

Associer l'autorité de certification au pool d'identités de charge de travail

Après avoir créé votre hiérarchie d'AC et une configuration d'émission de certificat pour l'AC, vous pouvez associer l'AC au pool d'identités de charge de travail. Pour associer l'autorité de certification au pool d'identités de charge de travail, vous devez mettre à jour le pool d'identités de charge de travail avec la configuration d'émission de certificats de l'autorité de certification. Vous pouvez ensuite vérifier que le pool a été mis à jour.

Mettre à jour le pool d'identités de charge de travail

Pour associer une autorité de certification au pool d'identités de charge de travail, mettez à jour le pool d'identités de charge de travail avec la configuration d'émission de certificats de l'autorité de certification. Vous pouvez ensuite vérifier que le pool a été mis à jour.

Pour mettre à jour le pool, exécutez la commande suivante :

gcloud iam workload-identity-pools update WORKLOAD_IDENTITY_POOL_ID \
    --location="global" \
    --inline-certificate-issuance-config-file=CIC_JSON_FILE_PATH \
    [--inline-trust-config-file=TC_JSON_FILE_PATH] \
    --project=PROJECT_ID

Remplacez les éléments suivants :

  • WORKLOAD_IDENTITY_POOL_ID : ID du pool d'identités de charge de travail.

  • CIC_JSON_FILE_PATH : chemin d'accès au fichier de configuration au format JSON (cic.json) pour la configuration d'émission de certificats intégrée que vous avez créée précédemment.

  • TC_JSON_FILE_PATH : chemin d'accès au fichier de configuration au format JSON (tc.json) pour la configuration de confiance intégrée que vous avez créée précédemment. Si vos charges de travail s'authentifient dans différents domaines de confiance, vous devez spécifier ce fichier. Sinon, vous pouvez omettre --inline-trust-config.

Vérifier que le pool d'identités de charge de travail a été mis à jour

Pour vérifier que votre pool d'identités de charge de travail a été mis à jour en même temps que la configuration d'émission de certificats et la configuration de confiance, exécutez la commande suivante :

gcloud iam workload-identity-pools describe WORKLOAD_IDENTITY_POOL_ID \
    --location="global" \
    --project=PROJECT_ID

Remplacez les éléments suivants :

  • WORKLOAD_IDENTITY_POOL_ID : ID du pool d'identités de charge de travail.

  • PROJECT_ID : ID du projet

Le résultat ressemble à ce qui suit :

inlineCertificateIssuanceConfig:
    caPools:
      REGION: projects/PROJECT_NUMBER/locations/REGION1/caPools/ROOT_CA_POOL_ID
    keyAlgorithm: ALGORITHM
    lifetime: CERTIFICATE_LIFETIME
    rotationWindowPercentage: ROTATION_WINDOW_PERCENTAGE
inlineTrustConfig:
    additionalTrustBundles:
      TRUST_DOMAIN_NAME1:
          trustAnchors:
          - pemCertificate: |-
            -----BEGIN CERTIFICATE-----
            CERTIFICATE_MATERIAL1
            -----END CERTIFICATE-----
          - pemCertificate: |-
            -----BEGIN CERTIFICATE-----
            CERTIFICATE_MATERIAL2
            -----END CERTIFICATE-----
      TRUST_DOMAIN_NAME2:
          trustAnchors:
          - pemCertificate: |-
            -----BEGIN CERTIFICATE-----
            CERTIFICATE_MATERIAL3
            -----END CERTIFICATE-----
          - pemCertificate: |-
            -----BEGIN CERTIFICATE-----
            CERTIFICATE_MATERIAL4
            -----END CERTIFICATE-----
mode: TRUST_DOMAIN
name: projects/PROJECT_NUMBER/name/locations/global/workloadIdentityPools/WORKLOAD_IDENTITY_POOL_ID
state: ACTIVE

Ce résultat inclut les valeurs suivantes :

  • PROJECT_NUMBER : numéro du projet
  • REGION : région où se trouve le pool d'autorités de certification racine
  • ROOT_CA_POOL_ID : ID du pool d'autorités de certification racine
  • ALGORITHM : algorithme de chiffrement utilisé pour générer la clé privée.
  • CERTIFICATE_LIFETIME : durée de vie (en secondes) des certificats de charge de travail émis par le pool d'autorités de certification
  • ROTATION_WINDOW_PERCENTAGE : pourcentage de la durée de vie du certificat au cours duquel un renouvellement est déclenché.
  • TRUST_DOMAIN_NAME : le domaine de confiance peut être n'importe quel domaine de confiance (comme "example.com"), y compris un autre domaine de confiance de pool d'identités de charge de travail (ou même le même).
  • CERTIFICATE_MATERIAL : certificat CA au format PEM autorisé à émettre des certificats dans le domaine de confiance
  • WORKLOAD_IDENTITY_POOL_ID : ID du pool d'identités de charge de travail

Si inlineCertificateIssuanceConfig ou inlineTrustConfig ne figurent pas dans le résultat, vérifiez que vous avez correctement configuré votre gcloud CLI afin d'utiliser le projet approprié pour la facturation et les quotas. Vous devrez peut-être passer à une version plus récente de gcloud CLI.

Autoriser les identités de charge de travail gérées à demander des certificats à partir du pool d'autorités de certification

Une fois l'autorité de certification associée au pool d'identités de charge de travail, vous devez autoriser les identités de charge de travail gérées à demander des certificats à partir du pool d'autorités de certification.

  1. Attribuez le rôle Demandeur de certificat de charge de travail du service CA (roles/privateca.workloadCertificateRequester) au domaine de confiance. Ce rôle autorise le domaine de confiance à demander des certificats à partir des chaînes de certificats CA Service.

    gcloud privateca pools add-iam-policy-binding ROOT_CA_POOL_ID \
        --location=REGION \
        --role=roles/privateca.workloadCertificateRequester \
        --member="principal://iam.googleapis.com/projects/PROJECT_NUMBER/name/locations/global/workloadIdentityPools/WORKLOAD_IDENTITY_POOL_ID" \
        --project=PROJECT_ID
    

    Remplacez les éléments suivants :

    • ROOT_CA_POOL_ID : ID du pool d'autorités de certification racine
    • REGION : région du pool d'autorités de certification racine
    • PROJECT_NUMBER : numéro du projet

      Pour obtenir PROJECT_NUMBER à partir de PROJECT_ID, exécutez la commande suivante :

      gcloud projects describe PROJECT_ID --format="value(projectNumber)"
      
    • WORKLOAD_IDENTITY_POOL_ID : ID du pool d'identités de charge de travail

    • PROJECT_ID : ID du projet

  2. Accordez le rôle Lecteur de pool de services d'autorité de certification (roles/privateca.poolReader) au domaine de confiance. Ce rôle autorise le domaine de confiance à obtenir les certificats X.509 signés à partir des chaînes de certificats de l'autorité de certification.

    gcloud privateca pools add-iam-policy-binding ROOT_CA_POOL_ID \
        --location=REGION \
        --role=roles/privateca.poolReader \
        --member="principal://iam.googleapis.com/projects/PROJECT_NUMBER/name/locations/global/workloadIdentityPools/WORKLOAD_IDENTITY_POOL_ID" \
        --project=PROJECT_ID
    

    Remplacez les éléments suivants :

    • ROOT_CA_POOL_ID : ID du pool d'autorités de certification racine
    • REGION : région du pool d'autorités de certification racine
    • PROJECT_NUMBER : numéro du projet
    • WORKLOAD_IDENTITY_POOL_ID : ID du pool d'identités de charge de travail
    • PROJECT_ID : ID du projet

Créer l'équilibreur de charge et attribuer l'identité gérée au service de backend

Une identité gérée ne peut être attribuée que lors de la création du service de backend.

Les étapes de cette section ne concernent que l'attribution d'une identité gérée au service de backend de l'équilibreur de charge. Cela fait partie de la configuration du backend de l'équilibreur de charge.

Pour configurer un équilibreur de charge d'application externe global, suivez les étapes décrites dans Configurer un équilibreur de charge d'application externe global avec des backends de groupe d'instances de VM. Lorsque vous configurez le service de backend de l'équilibreur de charge, vous devez également effectuer les opérations suivantes :

Console

  1. Dans la console Google Cloud , accédez à la page Équilibrage de charge.

    Accéder à la page "Équilibrage de charge"

  2. Dans la section Configuration du backend, ajoutez les informations nécessaires pour créer un service de backend.

  3. Développez la section Configurations avancées.

  4. Dans la section Authentification du backend, sélectionnez l'option Identité gérée.

  5. Pour attribuer une identité gérée au service de backend, dans le champ Identité gérée, saisissez l'identité de charge de travail gérée que vous avez créée précédemment.

  6. Cliquez sur Créer.

  7. Suivez les étapes décrites dans Configurer l'équilibreur de charge pour terminer la configuration de l'équilibreur de charge.

gcloud

  1. Pour attribuer une identité gérée au service de backend, ajoutez l'indicateur --identity lorsque vous utilisez la commande gcloud beta compute backend-services create.

    gcloud beta compute backend-services create BACKEND_SERVICE_NAME \
        --load-balancing-scheme=EXTERNAL_MANAGED \
        --protocol=HTTPS \
        --health-checks=HEALTH_CHECK_NAME \
        --identity='//WORKLOAD_IDENTITY_POOL_ID.global.PROJECT_NUMBER.workload.id.goog/ns/NAMESPACE_ID/sa/MANAGED_IDENTITY_ID' \
        --global
    

    Remplacez les éléments suivants :

    • BACKEND_SERVICE_NAME : Nom du service de backend.
    • HEALTH_CHECK_NAME: nom de la vérification d'état
    • WORKLOAD_IDENTITY_POOL_ID : ID du pool d'identités de charge de travail
    • PROJECT_NUMBER : numéro du projet
    • NAMESPACE_ID : ID de l'espace de noms
    • MANAGED_IDENTITY_ID : ID de l'identité gérée

Ressources créées automatiquement

Une fois qu'une identité gérée est configurée sur le service de backend de l'équilibreur de charge, les ressources suivantes sont automatiquement créées par l'identité de charge de travail gérée :

  • Configuration d'authentification de backend : associée au service de backend de l'équilibreur de charge
  • Certificat d'identité gérée du gestionnaire de certificats : associé à la configuration d'authentification du backend
  • Configuration de confiance du gestionnaire de certificats : associée à la configuration d'authentification de backend

Les sections suivantes concernent la vérification de votre configuration pour déterminer si les ressources créées automatiquement ont été configurées.

Vérifier votre configuration

Vérifiez votre configuration pour savoir si les ressources créées automatiquement ont été configurées.

Les ressources créées automatiquement sont précédées du préfixe mi, ce qui indique que la ressource est créée par l'identité de charge de travail gérée.

Vérifier la création de la configuration d'authentification de backend et de l'identité gérée

Pour vérifier la création de la configuration d'authentification de backend et de l'identité gérée, utilisez la commande gcloud beta compute backend-services describe pour décrire le service de backend.

gcloud beta compute backend-services describe BACKEND_SERVICE_NAME --global

Le résultat ressemble à ce qui suit :

affinityCookieTtlSec: 0
connectionDraining:
  drainingTimeoutSec: 0
creationTimestamp: '2025-11-06T02:15:43.680-08:00'
description: ''
enableCDN: false
fingerprint: lTZwas8aylg=
healthChecks:
- https://www.googleapis.com/compute/beta/projects/PROJECT_ID/global/healthChecks/HEALTH_CHECK_NAME
id: '719352032'
kind: compute#backendService
loadBalancingScheme: EXTERNAL_MANAGED
name: BACKEND_SERVICE_NAME
port: 80
portName: PORT_NAME
protocol: HTTPS
selfLink: https://www.googleapis.com/compute/beta/projects/PROJECT_ID/global/backendServices/BACKEND_SERVICE_NAME
sessionAffinity: NONE
timeoutSec: 30
tlsSettings:
  authenticationConfig: //networksecurity.googleapis.com/projects/PROJECT_ID/locations/global/backendAuthenticationConfigs/mi-bac-423b651f-d549-4a9f-a4f2-g2bcaa7108bd
  identity: //WORKLOAD_IDENTITY_POOL_ID.global.PROJECT_NUMBER.workload.id.goog/ns/NAMESPACE_ID/sa/MANAGED_IDENTITY_ID

Ce résultat inclut les valeurs suivantes :

  • PROJECT_ID : ID du projet
  • HEALTH_CHECK_NAME: nom de la vérification d'état
  • BACKEND_SERVICE_NAME : nom du service de backend
  • PORT_NAME : nom du port
  • REGION : région où se trouve le pool d'autorités de certification racine
  • WORKLOAD_IDENTITY_POOL_ID : ID du pool d'identités de charge de travail
  • PROJECT_NUMBER : numéro du projet
  • NAMESPACE_ID : ID de l'espace de noms
  • MANAGED_IDENTITY_ID : ID de l'identité gérée

La configuration d'authentification de backend est créée automatiquement et associée au champ backendService.tlsSettings.authenticationConfig. La configuration d'authentification du backend commençant par le préfixe mi est appelée MI_BACKEND_AUTHENTICATION_CONFIG_ID dans la section suivante.

L'identité de charge de travail gérée est également associée au champ backendService.tlsSettings.identity. Son format est le suivant :

//WORKLOAD_IDENTITY_POOL_ID.global.PROJECT_NUMBER.workload.id.goog/ns/NAMESPACE_ID/sa/MANAGED_IDENTITY_ID
spiffe

Vérifier la création du certificat d'identité gérée du gestionnaire de certificats et de la configuration de confiance du gestionnaire de certificats

Pour vérifier que le certificat d'identité gérée du gestionnaire de certificats et la configuration de confiance du gestionnaire de certificats sont associés à la ressource de configuration d'authentification de backend, utilisez la commande gcloud network-security backend-authentication-configs describe.

gcloud network-security backend-authentication-configs describe MI_BACKEND_AUTHENTICATION_CONFIG_ID \
    --location=global

Le résultat ressemble à ce qui suit :

clientCertificate: projects/PROJECT_NUMBER/locations/global/certificates/mi-crt-181fa461-3b53-40fa-8515-507d47337c5d
createTime: '2025-11-06T10:15:56.237734973Z'
etag: xwyxl1VYVoh4QIwf3nhKhAVXgcuOqoN7xdqAiS8Esvs
name: projects//locations/global/backendAuthenticationConfigs/mi-bac-477b381f-d349-4a8f-a6f2-f2bbaa7109bd
trustConfig: projects/PROJECT_NUMBER/locations/global/trustConfigs/mi-tc-e4f05160-f20f-4109-aae3-4c1a68891742
updateTime: '2025-11-06T10:16:01.964275141Z'

clientCertificate et trustConfig sont créés automatiquement par l'identité de charge de travail gérée et associés à la ressource de configuration de l'authentification du backend.

Le clientCertificate commençant par le préfixe mi est appelé MI_CLIENT_CERTIFICATE_ID dans la section suivante.

Le trustConfig commençant par le préfixe mi est appelé MI_TRUST_CONFIG_ID dans la section suivante.

Vérifier que le certificat Certificate Manager est un certificat d'identité gérée

Pour afficher les détails du certificat d'identité gérée par le gestionnaire de certificats, utilisez la commande gcloud certificate-manager certificates describe.

gcloud certificate-manager certificates describe MI_CLIENT_CERTIFICATE_ID

Le résultat ressemble à ce qui suit :

createTime: '2025-11-06T10:15:46.187892797Z'
expireTime: '2025-11-07T22:55:47Z'
extendedKeyUsage:
  clientAuth: true
managedIdentity:
  identity: //WORKLOAD_IDENTITY_POOL_ID.global.PROJECT_NUMBER.workload.id.goog/ns/NAMESPACE_ID/sa/MANAGED_IDENTITY_ID
  state: ACTIVE
name: projects/PROJECT_ID/locations/global/certificates/mi-crt-181fa461-3b53-40fa-8515-507d47337c5d
pemCertificate: -----BEGIN CERTIFICATE-----\nCERTIFICATE_MATERIAL\n-----END CERTIFICATE-----
scope: CLIENT_AUTH
updateTime: '2025-11-06T10:15:49.427339950Z'
usedBy:
- name: //networksecurity.googleapis.com/projects/PROJECT_NUMBER/locations/global/backendAuthenticationConfigs/mi-bac-477b381f-d349-4a8f-a6f2-f2bbaa7109bd

Ce résultat inclut les valeurs suivantes :

  • WORKLOAD_IDENTITY_POOL_ID : ID du pool d'identités de charge de travail
  • PROJECT_NUMBER : numéro du projet
  • NAMESPACE_ID : ID de l'espace de noms
  • MANAGED_IDENTITY_ID : ID de l'identité gérée
  • CERTIFICATE_MATERIAL : X.509-SVID au format PEM.

Le certificat d'identité gérée du gestionnaire de certificats possède une propriété managedIdentity, qui l'identifie comme un certificat d'identité gérée. La ressource de certificat d'identité gérée par Certificate Manager stocke le SVID X.509 au format PEM.

Le champ d'application du certificat d'identité géré par le gestionnaire de certificats est CLIENT_AUTH, ce qui indique que ce certificat est utilisé comme certificat client dans le mTLS de backend.

Vérifiez que l'ID SPIFFE fait partie du SAN dans le X.509-SVID.

Le SVID X.509 contient l'ID SPIFFE encodé en tant qu'URI dans le champ SAN. Cet ID SPIFFE correspond à l'identité gérée dans le pool d'identités de charge de travail.

Pour imprimer un format lisible du certificat, exécutez la commande suivante :

openssl x509 -text -noout \
<<< "-----BEGIN CERTIFICATE-----\nCERTIFICATE_MATERIAL\n-----END CERTIFICATE-----"

Le résultat ressemble à ce qui suit (version abrégée) :

Certificate:
    Data:
        Version: 3 (0x2)
        Signature Algorithm: ecdsa-with-SHA256
        Issuer: O = example.com, CN = Example CA
        Validity
            Not Before: Nov  6 10:15:48 2025 GMT
            Not After : Nov  7 10:15:47 2025 GMT
        Subject:
        Subject Public Key Info:
            Public Key Algorithm: id-ecPublicKey
                Public-Key: (256 bit)
        X509v3 extensions:
            X509v3 Subject Alternative Name: critical
                URI:spiffe://WORKLOAD_IDENTITY_POOL_ID.global.PROJECT_NUMBER.workload.id.goog/ns/NAMESPACE_ID/sa/MANAGED_IDENTITY_ID

Ce résultat inclut les valeurs suivantes :

  • WORKLOAD_IDENTITY_POOL_ID : ID du pool d'identités de charge de travail
  • PROJECT_NUMBER : numéro du projet
  • NAMESPACE_ID : ID de l'espace de noms
  • MANAGED_IDENTITY_ID : ID de l'identité gérée

Vérifiez que la configuration de confiance de Certificate Manager contient le champ spiffeTrustStore.

La configuration de confiance du gestionnaire de certificats contient un champ appelé spiffeTrustStores. Le champ spiffeTrustStores contient le bundle de confiance associé au domaine de confiance du pool d'identités de charge de travail (représenté par WORKLOAD_IDENTITY_POOL_ID.global.PROJECT_NUMBER.workload.id.goog dans la sortie) et tous les bundles de confiance supplémentaires spécifiés par le champ additionalTrustBundles dans la configuration de confiance intégrée du pool d'identités de charge de travail.

Pour afficher les détails de la configuration de confiance du gestionnaire de certificats, utilisez la commande gcloud certificate-manager trust-configs describe.

gcloud certificate-manager certificates describe MI_TRUST_CONFIG_ID

Remplacez MI_TRUST_CONFIG_ID par la configuration de confiance créée automatiquement par l'identité gérée.

Dans l'exemple de résultat suivant, l'hôte example.com est le domaine d'approbation supplémentaire auquel l'approbation est étendue.

createTime: '2025-11-06T10:15:50.048030758Z'
etag: kDoKfm5W6Il2HPvduKZWpuYpyrKrNVq4jqMEICE-6rQ
name: projects/PROJECT_ID/locations/global/trustConfigs/mi-tc-e4f05160-f20f-4109-aae3-4c1a68891742
spiffeTrustStores:
  example.com:
    trustAnchors:
    - pemCertificate: -----BEGIN CERTIFICATE-----\nCERTIFICATE_MATERIAL1\n-----END CERTIFICATE-----
  WORKLOAD_IDENTITY_POOL_ID.global.PROJECT_NUMBER.workload.id.goog:
    trustAnchors:
    - pemCertificate: -----BEGIN CERTIFICATE-----\nCERTIFICATE_MATERIAL2\n-----END CERTIFICATE-----
updateTime: '2025-11-07T08:25:15.760754841Z'

Ce résultat inclut les valeurs suivantes :

  • PROJECT_ID : ID du projet
  • CERTIFICATE_MATERIAL : certificat CA au format PEM autorisé à émettre des certificats dans le domaine de confiance
  • WORKLOAD_IDENTITY_POOL_ID : ID du pool d'identités de charge de travail
  • PROJECT_NUMBER : numéro du projet
  • MANAGED_IDENTITY_ID : ID de l'identité gérée

Pour en savoir plus sur la configuration de confiance du Gestionnaire de certificats, consultez Configuration de confiance du Gestionnaire de certificats.

Étape suivante