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.

Cette page explique également 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. Créez ou sélectionnez un projet Google Cloud.

    • Créez un projet Google Cloud :

      gcloud projects create PROJECT_ID

      Remplacez PROJECT_ID par le nom du projet Google Cloud que vous créez.

    • Sélectionnez le projet Google Cloud que vous avez créé :

      gcloud config set project PROJECT_ID

      Remplacez PROJECT_ID par le nom de votre projet Google Cloud.

  2. Demandez l'accès aux identités de charge de travail gérées en version preview.

  3. Consultez la documentation sur 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 des identités de charge de travail gérées.

  6. Activer les API IAM and Certificate Authority Service :

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

  7. Configurez Google Cloud CLI pour utiliser le projet qui a été 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 section Gérer les accès.

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 des identifiants pour les 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 plus 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'identité SPIFFE de votre identité de charge de travail gérée est égale à ce qui suit :

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

Définir 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 de confiance peuvent utiliser l'identité gérée. Vous devez autoriser votre charge de travail à utiliser l'identité de charge de travail gérée avant de pouvoir lui attribuer des identifiants.

Pour ce faire, vous devez créer un compte de service géré par l'utilisateur et l'associer à votre charge de travail. Votre charge de travail utilise l'identité de charge de travail gérée comme identité lorsqu'elle s'authentifie auprès d'autres charges de travail à l'aide du protocole d'authentification TLS mutuelle (mTLS), et votre charge de travail utilise le compte de service comme son lorsqu'il accède à d'autres services et ressources Google Cloud.

La commande service-accounts 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.

Pour créer le compte de service associé, 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 workload-identity-pools managed-identities workload-sources create :

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. La 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é émet les certificats d'identité de charge de travail X.509 aux 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 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 d'autorités de certification 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 du 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 la section 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 s'avérer utile pour la rotation des autorités 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. En outre, l'ajout de plusieurs autorités de certification subordonnées dans un pool d'autorités de certification vous aide à mieux équilibrer la 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é.

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

    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 du 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 la section 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 la section 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 nécessitent des autorisations pour demander des certificats au service CA 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é à l'identité de la 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 aux chaînes de certificats du service CA.

    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éfinir la configuration d'approbation et d'émission de certificats

Vous utilisez ces informations pour créer un fichier JSON qui est 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 certificat 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/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 :

  • PROJECT_NAME : nom du projet contenant le pool d'autorités de certification
  • REGION : région où se trouve le pool d'autorités de certification subordonné
  • 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 l'intervalle de rotation par rapport à la durée de vie du certificat pour que son renouvellement ait lieu au moins sept jours après son émission 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/PROJECT_NAME/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.
  • PROJECT_NAME : nom du projet contenant le pool d'autorités de certification
  • 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

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