Configurer l'authentification des identités de charge de travail gérées

Cette page explique comment configurer des identités de charge de travail gérées à l'aide de gcloud CLI.

Ce document explique comment configurer le provisionnement automatique et la gestion du cycle de vie des identités de charge de travail gérées pour Compute Engine. Vous configurez des pools d'autorités de certification pour émettre des certificats à l'aide de Certificate Authority Service. Le service d'autorité de certification est un service Google Cloud hautement disponible et évolutif qui simplifie et automatise le déploiement, la gestion et la sécurité des services d'autorité de certification. Vous pouvez créer des instances de machine virtuelle (VM) provisionnées avec des identifiants X.509 à partir du pool d'autorités de certification configuré. Ces identifiants peuvent ensuite être utilisés pour établir des connexions mTLS entre les charges de travail.

Avant de commencer

  1. Create or select a Google Cloud project.

    • 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. Demandez l'accès aux identités de charge de travail gérées en version preview.

  3. Comprendre les identités de charge de travail gérées

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

  5. Découvrez comment authentifier les charges de travail Compute Engine à l'aide d'identités de charge de travail gérées.

  6. Enable the IAM and Certificate Authority Service APIs:

    gcloud services enable iam.googleapis.com privateca.googleapis.com

  7. Configurez 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.

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 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.

Le rôle de base IAM "Propriétaire" (roles/owner) inclut également des autorisations permettant de configurer les identités de charge de travail gérées. 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.

Présentation

Pour utiliser des identités de charge de travail gérées pour vos applications, vous devez effectuer les tâches suivantes :

  1. Administrateur de la sécurité

  2. Administrateur de Compute :

    Activez les identités de charge de travail gérées pour les charges de travail exécutées dans Compute Engine :

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

Les identités de charge de travail gérées permettent à Google Cloud de provisionner automatiquement les identifiants des identités de pool d'identités de charge de travail sur vos charges de travail. 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 workload-identity-pools create.

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

Remplacez les éléments suivants :

  • POOL_ID : ID unique du pool. L'ID doit comporter entre 4 et 32 caractères. Il ne peut contenir que des caractères alphanumériques minuscules et des tirets. Il doit 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 workload-identity-pools describe.

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

Le résultat de la commande doit ressembler à ce qui suit :

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

Si mode: TRUST_DOMAIN ne figure pas dans le résultat de la commande, vérifiez que votre projet a été ajouté à la liste d'autorisation pour la version preview de l'identité de charge de travail gérée et 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.

Créer un espace de nommage

La commande 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="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.
  • 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 workload-identity-pools managed-identities create vous permet de créer une identité de charge de travail gérée dans un 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="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.
  • 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://POOL_ID.global.PROJECT_NUMBER.workload.id.goog/ns/NAMESPACE_ID/sa/MANAGED_IDENTITY_ID

Définissez la règle d'attestation de charge de travail

Une règle d'attestation de charge de travail garantit que seules les charges de travail approuvées peuvent utiliser l'identité gérée.

Lorsque la charge de travail s'exécute et demande un identifiant d'identité pour l'ID de charge de travail gérée, Google Cloud IAM utilise l'attribut que vous définissez dans la règle d'attestation pour vérifier l'instance Compute Engine. La validation repose sur l'un des attributs suivants de la charge de travail:

  • ID d'instance de VM
  • Adresse e-mail du compte de service associé

Une fois la validation effectuée, la charge de travail reçoit un identifiant.

Pour créer une règle d'attestation qui utilise votre compte de service comme sélecteur d'attribut unique pour votre identité gérée, exécutez la commande suivante:

gcloud iam service-accounts create SERVICE_ACCOUNT_NAME

Remplacez les éléments suivants :

  • SERVICE_ACCOUNT_NAME : nom du compte de service.

Pour créer une règle d'attestation de charge de travail qui permet à vos charges de travail avec le compte de service associé d'obtenir des identifiants pour l'identité de charge de travail gérée, utilisez la commande suivante :

gcloud iam workload-identity-pools managed-identities workload-sources create \
    project-WORKLOAD_PROJECT_NUMBER \
    --single-attribute-selectors="compute.googleapis.com/Instance.attached_service_account.email=SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com" \
    --managed-identity=MANAGED_IDENTITY_ID \
    --namespace=NAMESPACE_ID \
    --workload-identity-pool=POOL_ID \
    --location="global"

Remplacez les éléments suivants :

  • SERVICE_ACCOUNT_NAME : nom du compte de service.
  • WORKLOAD_PROJECT_NUMBER : numéro du projet contenant votre charge de travail. Cette règle permet aux charges de travail de ce projet d'utiliser l'identité de charge de travail gérée.
  • PROJECT_ID : ID du projet contenant le compte de service.
  • MANAGED_IDENTITY_ID : ID unique de l'identité gérée.
  • NAMESPACE_ID : ID de l'espace de noms que vous avez créé précédemment.
  • POOL_ID : ID du pool d'identités de charge de travail que vous avez créé précédemment.

Pour un pool d'identités de charge de travail donné, vous pouvez définir au maximum 50 sélecteurs d'attributs uniques pour votre projet de charge de travail.

Pour savoir comment mettre à jour ou supprimer une règle d'attestation, exécutez la commande suivante :

gcloud iam workload-identity-pools managed-identities workload-sources --help

Configurer Certificate Authority Service afin d'émettre des certificats pour les identités de charge de travail gérées

Créez la configuration recommandée pour les autorités de certification racine et subordonnées à l'aide des pools Certificate Authority Service. Le pool d'autorités de certification subordonnées émet les certificats d'identité de charge de travail X.509 pour les VM.

Après avoir configuré les pools d'autorités de certification, vous autorisez les identités de charge de travail gérées à demander et à recevoir les certificats signés à partir des pools d'autorités de certification.

Configurer le pool d'autorités de certification racine

Utilisez l'interface Google Cloud CLI de Certificate Authority Service pour configurer un pool d'autorités de certification racine.

gcloud

Créez le pool de CA racine.

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

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

    Remplacez les éléments suivants :

    • ROOT_CA_POOL_ID : ID unique pour le pool d'autorités de certification racine. L'ID 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. L'ID de pool doit être unique dans la région.
    • REGION : région où se trouve le pool d'autorités de certification racine.

    Pour en savoir plus, consultez Créer des pools d'autorités de certification.

  2. 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. Vous serez peut-être invité à activer l'autorité de certification racine s'il s'agit de la seule autorité de certification du pool d'autorités de certification racine.

    Par exemple, vous pouvez utiliser une commande semblable à la suivante pour créer une autorité de certification racine.

    gcloud privateca roots create ROOT_CA_ID \
       --pool=ROOT_CA_POOL_ID \
       --subject "CN=ROOT_CA_CN, O=ROOT_CA_ORGANIZATION" \
       --key-algorithm="ec-p256-sha256" \
       --max-chain-length=1 \
       --location=REGION
    

    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.
    • REGION : région où se trouve le pool d'autorités de certification racine.

    Pour en savoir plus, consultez la section Créer une autorité de certification racine. Pour en savoir plus sur les champs subject de l'autorité de certification, consultez la section Objet.

  3. (Facultatif) Répétez les étapes précédentes pour créer une autorité de certification racine supplémentaire dans le pool d'autorités de certification racine. Cela peut être utile pour la rotation de l'autorité de certification racine.

Configurer les autorités de certification subordonnées

Utilisez l'interface Google Cloud CLI pour Certificate Authority Service afin de créer un pool d'autorités de certification subordonnée et une autorité de certification subordonnée.

Si vous disposez de plusieurs scénarios d'émission de certificat, vous pouvez créer une autorité de certification subordonnée pour chacun d'entre eux. De plus, l'ajout de plusieurs autorités de certification subordonnées dans un pool d'autorités de certification vous permet d'améliorer l'équilibrage de charge des requêtes de certificat.

gcloud

Utilisez la commande gcloud privateca pools create pour créer un pool d'autorités de certification subordonnées.

  1. Créez le pool d'autorités de certification subordonnées au niveau DevOps, conçu pour l'émission de certificats de courte durée et à volume élevé.

    gcloud privateca pools create SUBORDINATE_CA_POOL_ID \
       --location=REGION \
       --tier=devops
    

    Remplacez les éléments suivants :

    • SUBORDINATE_CA_POOL_ID : ID unique pour le pool d'autorités de certification subordonnée. L'ID 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. L'ID de pool doit être unique dans la région.
    • REGION : région dans laquelle créer le pool d'autorités de certification subordonné.

    Pour en savoir plus, consultez Créer des pools d'autorités de certification.

  2. Créez une autorité de certification subordonnée dans le pool d'autorités de certification subordonnées à l'aide de la commande gcloud privateca subordinates create. Ne modifiez pas le mode d'émission basé sur la configuration par défaut.

    Par exemple, vous pouvez utiliser une commande semblable à la suivante pour créer une autorité de certification subordonnée.

    gcloud privateca subordinates create SUBORDINATE_CA_ID \
       --pool=SUBORDINATE_CA_POOL_ID \
       --location=REGION \
       --issuer-pool=ROOT_CA_POOL_ID \
       --issuer-location=REGION \
       --subject="CN=SUBORDINATE_CA_CN, O=SUBORDINATE_CA_ORGANIZATION" \
       --key-algorithm="ec-p256-sha256" \
       --use-preset-profile=subordinate_mtls_pathlen_0
    

    Remplacez les éléments suivants :

    • SUBORDINATE_CA_ID : nom unique de l'autorité de certification subordonnée. Ce nom peut comporter jusqu'à 64 caractères et ne doit contenir que des minuscules et majuscules, des traits de soulignement ou des traits d'union. Le nom du pool doit être unique dans la région.
    • SUBORDINATE_CA_POOL_ID : nom du pool d'autorités de certification subordonné.
    • REGION : région où se trouve le pool d'autorités de certification subordonné.
    • ROOT_CA_POOL_ID : ID du pool d'autorités de certification racine.
    • REGION : région du pool d'autorités de certification racine.
    • SUBORDINATE_CA_CN : nom commun de l'autorité de certification subordonnée.
    • SUBORDINATE_CA_ORGANIZATION : nom de l'organisation émettrice de l'autorité de certification subordonnée.

    Pour en savoir plus, consultez Créer des pools d'autorités de certification. Pour en savoir plus sur les champs subject de l'autorité de certification, consultez la section Objet.

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

Les identités de charge de travail gérées ont besoin d'autorisations pour demander des certificats à CA Service et obtenir les certificats publics.

gcloud

  1. Accordez le rôle IAM Demandeur de certificat de charge de travail du service CA (roles/privateca.workloadCertificateRequester) sur chaque pool d'autorités de certification subordonnées à l'identité de charge de travail gérée. La commande gcloud privateca pools add-iam-policy-binding suivante autorise l'identité de charge de travail gérée à demander des certificats à partir des chaînes de certificats de CA Service.

    gcloud privateca pools add-iam-policy-binding SUBORDINATE_CA_POOL_ID \
     --location=REGION \
     --role=roles/privateca.workloadCertificateRequester \
     --member="principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/*"
    

    Remplacez les éléments suivants :

    • SUBORDINATE_CA_POOL_ID : ID du pool d'autorités de certification subordonnée.
    • REGION : région du pool d'autorités de certification subordonnées.
    • PROJECT_NUMBER : numéro de projet du projet contenant le pool d'identités de charge de travail.
    • POOL_ID : ID du pool d'identités de charge de travail.
  2. Accordez le rôle IAM Lecteur de pool du service d'autorités de certification (roles/privateca.poolReader) sur les pools d'autorités de certification subordonnés à l'identité de charge de travail gérée. Cela permet à l'identité de charge de travail gérée d'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 SUBORDINATE_CA_POOL_ID \
     --location=REGION \
     --role=roles/privateca.poolReader \
     --member="principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/*"
    

    Remplacez les éléments suivants :

    • SUBORDINATE_CA_POOL_ID : ID du pool d'autorités de certification subordonnée.
    • REGION : région du pool d'autorités de certification subordonnées.
    • PROJECT_NUMBER : numéro de projet du projet contenant le pool d'identités de charge de travail.
    • POOL_ID : ID du pool d'identités de charge de travail.

Définissez la configuration de confiance et d'émission de certificats

Vous utiliserez ces informations pour créer un fichier JSON qui sera importé en tant que données de partenaire lors de la création d'une VM.

Définir la configuration d'émission de certificats

La configuration d'émission de certificats suivante est requise pour activer les identités de charge de travail gérées pour Compute Engine.

{
  "primary_certificate_authority_config": {
    "certificate_authority_config": {
      "ca_pool": "projects/SUBORDINATE_CA_POOL_PROJECT_ID/locations/REGION/caPools/SUBORDINATE_CA_POOL_ID"
    }
  },
  "key_algorithm": "ALGORITHM",
  "workload_certificate_lifetime_seconds": DURATION,
  "rotation_window_percentage": ROTATION_WINDOW_PERCENTAGE
}

Remplacez les éléments suivants :

  • SUBORDINATE_CA_POOL_PROJECT_ID: ID du projet contenant le pool d'autorités de certification subordonnées.
  • REGION : région où se trouve le pool d'autorités de certification subordonnées
  • SUBORDINATE_CA_POOL_ID : nom du pool d'autorités de certification subordonnée
  • ALGORITHM : algorithme de chiffrement utilisé pour générer la clé privée. Les valeurs valides sont rsa-2048 (par défaut), rsa-3072, rsa-4096, ecdsa-p256 et ecdsa-p384.
  • DURATION : (facultatif) durée de validité du certificat d'entité finale, en secondes. La valeur doit être comprise entre 3600 et 315360000. Si aucune valeur n'est spécifiée, la valeur par défaut 86400 est utilisée. La validité réelle du certificat émis dépend également de l'autorité de certification émettrice, car elle peut restreindre la durée de vie de ce certificat.
  • ROTATION_WINDOW_PERCENTAGE : (facultatif) pourcentage de la durée de vie du certificat au cours duquel un renouvellement est déclenché. La valeur doit être comprise entre 1 et 100. La valeur par défaut est 66 %. Vous devez définir le pourcentage de la période de rotation en fonction de la durée de validité du certificat afin que le renouvellement du certificat ait lieu au moins sept jours après l'émission du certificat et au moins sept jours avant son expiration.

Définir la configuration de confiance

La configuration de confiance contient l'ensemble des ancres de confiance permettant de valider les certificats de pairs. Éléments inclus :

  • URI de ressources de pool d'autorités de certification : ensemble d'URI de ressources de pool d'autorités de certification autorisés à émettre des certificats dans le même domaine de confiance que les VM.
  • Certificats CA au format PEM : ensemble de certificats CA au format PEM autorisés à émettre des certificats dans le même domaine de confiance que les VM.
{
  "POOL_ID.global.PROJECT_NUMBER.workload.id.goog": {
    "trust_anchors": [
      {
        "ca_pool": "projects/SUBORDINATE_CA_POOL_PROJECT_ID/locations/REGION/caPools/SUBORDINATE_CA_POOL_ID"
      },
      {
        "pem_certificate": "PEM_ENCODED_CERTIFICATE"
      }
    ]
  }
}

Remplacez les éléments suivants :

  • POOL_ID : ID du pool d'identités de charge de travail
  • PROJECT_NUMBER : numéro de projet du projet contenant le pool d'identités de charge de travail.
  • SUBORDINATE_CA_POOL_PROJECT_ID: ID du projet contenant le pool d'autorités de certification subordonnées.
  • REGION : région où se trouve le pool d'autorités de certification subordonné
  • SUBORDINATE_CA_POOL_ID : ID du pool d'autorités de certification subordonnée
  • PEM_ENCODED_CERTIFICATE : (facultatif) ensemble de certificats CA au format PEM approuvés pour émettre des certificats dans le même domaine de confiance que celui auquel les VM appartiennent Ces certificats seront ajoutés à la liste des ancres de confiance du pool d'autorités de certification subordonnées. La commande suivante peut être utilisée pour encoder un fichier trust-anchor.pem 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'
    

Créer un fichier de configuration pour importer les métadonnées partenaire d'une VM

Créez un fichier JSON contenant les informations suivantes :

Enregistrez ce fichier sous le nom CONFIGS.json. Ce fichier est utilisé lors de la création de VM pour exécuter des applications qui utilisent des identités de charge de travail gérées.

Votre fichier CONFIGS.json doit ressembler à ce qui suit :

  {
  "wc.compute.googleapis.com": {
     "entries": {
        "certificate-issuance-config": {
           "primary_certificate_authority_config": {
              "certificate_authority_config": {
                 "ca_pool": "projects/PROJECT_ID/locations/REGION/caPools/SUBORDINATE_CA_POOL_ID"
              }
           },
           "key_algorithm": "ALGORITHM"
        },
        "trust-config": {
           "POOL_ID.global.PROJECT_NUMBER.workload.id.goog": {
               "trust_anchors": [{
                  "ca_pool": "projects/PROJECT_ID/locations/REGION/caPools/SUBORDINATE_CA_POOL_ID"
                }]
           }
     }
  }
  },
  "iam.googleapis.com": {
     "entries": {
        "workload-identity": "spiffe://POOL_ID.global.PROJECT_NUMBER.workload.id.goog/ns/NAMESPACE_ID/sa/MANAGED_IDENTITY_ID"
     }
  }
  }
  

Étapes suivantes

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