Configurer la fédération d'identité de charge de travail avec Active Directory

Ce guide explique comment utiliser la fédération d'identité de charge de travail pour permettre aux charges de travail d'utiliser des identifiants Active Directory pour s'authentifier auprès de Google Cloud.

Si vous exécutez des charges de travail Windows Server dans un environnement Active Directory, celles-ci peuvent avoir accès aux identifiants Active Directory. Exemple :

  • Un service Windows peut être configuré pour se connecter en tant qu'utilisateur du domaine.
  • Une application IIS peut être configurée pour s'exécuter en tant que compte de service géré de groupe (gMSA).

En utilisant la fédération d'identité de charge de travail conjointement avec Active Directory Federation Services (AD FS), vous pouvez autoriser ces charges de travail à échanger leurs identifiants Kerberos Active Directory contre des identifiants Google Cloud de courte durée. Les charges de travail peuvent utiliser ces identifiants éphémères pour accéder aux API Google Cloud.

L'échange d'identifiants Active Directory contre des identifiants Google Cloud de courte durée consiste à associer deux échanges de jetons :

  1. Une charge de travail utilise OpenID Connect (OIDC), SAML-POST ou WS-Trust pour demander un jeton OIDC ou une assertion SAML auprès d'AD FS. Pour s'authentifier auprès d'AD FS, la charge de travail utilise l'authentification Windows intégrée (IWA) et ses identifiants Active Directory existants.
  2. La charge de travail utilise ensuite la fédération d'identité de charge de travail pour échanger le jeton OIDC ou l'assertion SAML contre un jeton STS (Security Token Service) et, éventuellement, pour emprunter l'identité d'un compte de service Google Cloud.

Cet document vous explique comment automatiser ce processus de manière à ne pas modifier votre application à l'aide de Workload Authenticator pour Windows.

Préparer AD FS

Vous n'avez besoin de suivre cette procédure qu'une seule fois.

Sélectionner un protocole

La manière de préparer AD FS dépend du protocole que vous souhaitez utiliser :

  • SAML : vous pouvez autoriser les charges de travail à utiliser SAML ou WS-Trust pour obtenir des assertions SAML.

    Pour utiliser SAML ou WS-Trust, vous devez créer une partie de confiance dans AD FS et configurer un pool d'identités de charge de travail pour approuver les assertions émises pour cette partie de confiance.

    Une charge de travail peut utiliser son utilisateur Active Directory pour s'authentifier auprès d'AD FS, à l'aide de la liaison SAML-POST ou de WS-Trust. AD FS émet ensuite une assertion SAML contenant des informations sur l'utilisateur Active Directory de la charge de travail et des informations supplémentaires telles que les appartenances aux groupes.

    L'utilisation de SAML ou WS-Trust nécessite AD FS 3.0, AD FS pour Windows Server 2016 ou une version plus récente d'AD FS.

  • OIDC : vous pouvez autoriser les charges de travail à utiliser OIDC pour obtenir des jetons OIDC.

    Pour utiliser OIDC, vous créez un client OIDC (application native) et une ressource OIDC (API Web) dans AD FS. Vous configurez ensuite un pool d'identités de charge de travail pour approuver les jetons d'accès émis pour l'API Web.

    Une charge de travail peut utiliser son utilisateur Active Directory et l'autorisation OAuth client_credentials pour s'authentifier auprès d'AD FS. AD FS émet ensuite un jeton d'accès, mais aucun jeton d'ID.

    Le jeton d'accès contient des informations sur l'application cliente OIDC, mais n'inclut aucune information sur l'utilisateur Active Directory de la charge de travail ou ses membres.

    Comme les jetons d'accès ne contiennent aucune information sur l'utilisateur Active Directory, l'utilisation d'OIDC peut être moins flexible que l'utilisation de SAML ou de WS-Trust.

    L'utilisation d'OIDC nécessite AD FS pour Windows Server 2016 ou une version plus récente d'AD FS.

Pour la connexion, votre fournisseur d'identité doit fournir des informations d'authentification signées : les fournisseurs d'identité OIDC doivent fournir un jeton JWT, et les réponses du fournisseur d'identité SAML doivent être signées.

Prérequis IWA

Cette section décrit les conditions préalables à l'utilisation de l'IWA pour utiliser ce guide.

Si vous n'avez encore jamais utilisé IWA avec AD FS, assurez-vous de remplir les conditions préalables suivantes :

Enregistrer la charge de travail

Pour enregistrer votre charge de travail dans AD FS, procédez comme suit :

OIDC

Pour permettre aux charges de travail d'utiliser OIDC, vous avez besoin de deux enregistrements d'application dans AD FS :

  • Enregistrement d'une application de type application native ou application de serveur.

  • Enregistrement d'une application de type API Web qui correspond à un fournisseur de pools d'identités de charge de travail sur Google Cloud.

Enregistrer l'application cliente

Créer une application cliente qui représente la charge de travail. Si vous avez plusieurs charges de travail devant accéder à Google Cloud, vous devrez peut-être créer plusieurs applications clientes.

Pour enregistrer une application cliente dans AD FS, procédez comme suit :

  1. Ouvrez le composant logiciel enfichable MMC AD FS et accédez à Groupes d'applications.
  2. Cliquez sur Ajouter un groupe d'applications.
  3. Sur la page Bienvenue, procédez comme suit :

    1. Dans le champ de texte, saisissez le nom du client.
    2. Sélectionnez Application de serveur.
    3. Cliquez sur Next (Suivant).
  4. Sur la page Application de serveur, procédez comme suit :

    1. Dans le champ de texte text-field, saisissez un identifiant client (ID client) et un URI de redirection.

      Si vous prévoyez uniquement d'utiliser le type d'attribution client_credentials, l'URI de redirection ne sera pas utilisé et vous pouvez utiliser un URI tel que http://localhost/.

    2. Cliquez sur Next (Suivant).

  5. Sur la page Configurer les identifiants de l'application, procédez comme suit :

    1. Choisissez la méthode d'authentification du client. Pour utiliser l'IWA, définissez l'authentification intégrée de Windows sur enabled.
    2. Sélectionnez l'utilisateur de domaine avec lequel votre application est configurée pour s'exécuter.
    3. Cliquez sur Next (Suivant).
  6. Sur la page Résumé, vérifiez les paramètres, puis cliquez sur Suivant.

  7. Cliquez sur Fermer pour fermer la boîte de dialogue.

Créer une application API Web pour le pool d'identité de charge de travail

Créez une autre enregistrement d'application de type API Web. Cette application correspond à un fournisseur de pools d'identités de charge de travail que vous utilisez pour configurer une relation d'approbation avec Google Cloud.

Pour créer l'application dans AD FS, procédez comme suit :

  1. Ouvrez le composant logiciel enfichable MMC AD FS et accédez à Groupes d'applications.
  2. Cliquez sur Ajouter un groupe d'applications.
  3. Sur la page d'accueil, saisissez un nom tel que Workload Identity Federation (test environment), puis sélectionnez API Web. Cliquez ensuite sur Next (Suivant).
  4. Sur la page Configurer l'API Web, saisissez un identifiant de partie de confiance pour l'API Web.

    Au lieu de définir un identifiant de partie de confiance personnalisé, vous pouvez utiliser l'URI suivant comme identifiant de partie de confiance :

    https://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/WORKLOAD_POOL_ID/providers/PROVIDER_ID
    

    Remplacez les éléments suivants :

    • PROJECT_NUMBER : numéro de projet du projet Google Cloud que vous utilisez pour créer le pool d'identités de charge de travail.
    • WORKLOAD_POOL_ID : ID de votre choix qui identifie le pool d'identités de charge de travail. Vous devrez utiliser le même ID lors de la création du pool d'identités de charge de travail.
    • PROVIDER_ID : ID de votre choix qui identifie le fournisseur du pool d'identités de charge de travail. Vous devrez utiliser le même ID lorsque vous créerez le fournisseur du pool d'identités de charge de travail.

    Le formatage de l'URI de cette manière garantit que l'identifiant de partie de confiance identifie de manière unique un fournisseur de pools d'identités de charge de travail.

    Vous aurez besoin de l'identifiant de la partie de confiance ultérieurement lorsque vous configurerez le fournisseur du pool d'identités de charge de travail.

  5. Cliquez sur Next (Suivant).

  6. Sur la page Appliquer la règle de contrôle des accès, sélectionnez une règle d'accès appropriée, puis cliquez sur Suivant.

  7. Sur la page Configurer les autorisations des applications, ajoutez l'application cliente que vous avez créée précédemment. Cliquez ensuite sur Next (Suivant).

  8. Sur la page Résumé, vérifiez les paramètres, puis cliquez sur Suivant.

  9. Cliquez sur Fermer pour fermer la boîte de dialogue.

SAML ou WS-Trust

Créez une approbation de partie de confiance dans AD FS :

  1. Ouvrez le composant logiciel enfichable MMC AD FS.
  2. Accédez à Approbations de partie de confiance.
  3. Cliquez sur Ajouter une approbation de partie de confiance.
  4. Sur la page Bienvenue de l'assistant Ajouter une approbation par un tiers de confiance, procédez comme suit :
    1. Sélectionnez Prise en charge des revendications.
    2. Cliquez sur Start (Démarrer).
  5. Sur la page Sélectionner une source de données, procédez comme suit :
    1. Sélectionnez Saisir manuellement les données concernant le tiers de confiance.
    2. Cliquez sur Next (Suivant).
  6. Sur la page Spécifier le nom à afficher, procédez comme suit :

    1. Saisissez un nom pour l'approbation.
    2. Cliquez sur Next (Suivant).
  7. Sur la page Configurer le certificat, cliquez sur Suivant. Bien que la fédération d'identité de charge de travail soit compatible avec le protocole SAML chiffré, elle n'est pas décrite dans cette procédure. Pour en savoir plus, consultez les instructions de gcloud CLI dans la section Créer le pool d'identités et le fournisseur, plus loin dans ce guide.

  8. Sur la page Configurer l'URL, procédez comme suit :

    SAML

    Utilisez les paramètres suivants :

    • Définissez l'option Activer la prise en charge du protocole SAML 2.0 WebSSO sur activé.
    • Dans le champ URL du service d'authentification unique SAML 2.0 de confiance, saisissez l'URL suivante :

      https://sts.googleapis.com/v1/token
      

    WS-Trust

    Conserver les paramètres par défaut

  9. Cliquez sur Next (Suivant).

  10. Sur la page Configurer les identifiants, saisissez un identifiant de partie de confiance.

    Au lieu de définir un identifiant de partie de confiance personnalisé, vous pouvez utiliser l'URI suivant comme identifiant de partie de confiance :

    https://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/WORKLOAD_POOL_ID/providers/PROVIDER_ID
    

    Remplacez les éléments suivants :

    • PROJECT_NUMBER : numéro de projet du projet Google Cloud que vous utilisez pour créer le pool d'identités de charge de travail.
    • WORKLOAD_POOL_ID : ID de votre choix qui identifie le pool d'identités de charge de travail. Vous devrez utiliser le même ID lors de la création du pool d'identités de charge de travail.
    • PROVIDER_ID : ID de votre choix qui identifie le fournisseur du pool d'identités de charge de travail. Vous devrez utiliser le même ID lors de la création du fournisseur de pools d'identités de charge de travail.

    Le formatage de l'URI de cette manière garantit que l'identifiant de partie de confiance identifie de manière unique un fournisseur de pools d'identités de charge de travail.

    Vous aurez besoin de l'identifiant de la partie de confiance ultérieurement lorsque vous configurerez le fournisseur du pool d'identités de charge de travail.

  11. Cliquez sur Next (Suivant).

  12. Sur la page Choisir une stratégie de contrôle d'accès, sélectionnez une stratégie de contrôle d'accès appropriée, puis cliquez sur Suivant.

  13. Sur la page Prêt à ajouter l'approbation, vérifiez les paramètres et cliquez sur Suivant.

  14. Sur la page Terminer, cliquez sur Fermer pour fermer la boîte de dialogue.

Pour être compatibles avec la fédération d'identité de charge de travail, les assertions SAML doivent contenir au moins une revendication qui identifie de manière unique l'utilisateur Active Directory. En règle générale, vous utilisez la revendication Name ID à cette fin, qui correspond à la valeur de l'élément NameID de l'assertion SAML.

Pour personnaliser l'ensemble de revendications de l'assertion SAML, vous devez modifier la stratégie d'émission de revendication de l'approbation de partie de confiance. Pour modifier la stratégie d'émission de revendication, procédez comme suit :

  1. Dans la liste des approbations de partie de confiance, sélectionnez l'approbation que vous venez de créer et cliquez sur Éditer la stratégie d'émission de revendication.
  2. Cliquez sur Ajouter une règle.
  3. Sur la page Sélectionner le type de règle de l'assistant Ajouter une règle de revendication de transformation, procédez comme suit :
    1. Sélectionnez Transformer une revendication entrante.
    2. Cliquez sur Next (Suivant).
  4. Sur la page Configurer la règle de revendication, configurez les paramètres suivants :

    • Nom de la règle de revendication : Name Identifier.
    • Type de revendication entrante : sélectionnez SID principal, UPN ou une autre revendication pour identifier le sujet de manière unique.
    • Type de revendication sortante : Name ID
    • Format de l'ID du nom sortant : Non spécifié.
  5. Sélectionnez Transmettre toutes les valeurs de revendication, puis cliquez sur Terminer.

  6. Vous pouvez éventuellement configurer des règles supplémentaires pour inclure davantage d'attributs dans les assertions SAML.

  7. Cliquez sur OK pour fermer la boîte de dialogue de stratégie d'émission de revendication.

Configurer la fédération d'identité de charge de travail

Vous ne devez effectuer ces étapes qu'une seule fois par locataire Azure AD ou par compte AWS avec lequel vous souhaitez fédérer. Vous pouvez ensuite utiliser le même pool d'identités de charge de travail et le même fournisseur pour plusieurs charges de travail et sur plusieurs projets Google Cloud.

Pour commencer à configurer la fédération d'identité de charge de travail, procédez comme suit :

  1. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  2. Il est préférable d'utiliser un projet dédié pour gérer les pools et les fournisseurs d'identités de charge de travail.
  3. Make sure that billing is enabled for your Google Cloud project.

  4. Enable the IAM, Resource Manager, Service Account Credentials, and Security Token Service APIs.

    Enable the APIs

Définir un mappage et une condition d'attribut

Les identifiants spécifiques à l'environnement de votre charge de travail AWS ou Azure contiennent plusieurs attributs. Vous devez choisir l'attribut que vous souhaitez utiliser comme identifiant de sujet (google.subject) dans Google Cloud.

Vous pouvez éventuellement mapper d'autres attributs. Vous pouvez ensuite faire référence à ces attributs supplémentaires lorsque vous accordez l'accès aux ressources.

OIDC

Vos mappages d'attributs peuvent utiliser les revendications intégrées aux jetons d'accès AD FS en tant qu'attributs sources.

Pour authentifier une application, vous pouvez utiliser le mappage d'attributs suivant :

google.subject=assertion.appid

Ce mappage définit google.subject sur la valeur de la revendication appid, qui contient l'ID client de l'application AD FS.

SAML ou WS-Trust

Vos mappages d'attributs peuvent utiliser les revendications intégrées dans l'assertion émise par AD FS, comme décrit précédemment dans ce guide.

Utilisez le mappage suivant pour permettre à la fédération d'identité de charge de travail d'utiliser la revendication Name ID de l'assertion SAML pour identifier de manière unique l'utilisateur :

google.subject=assertion.subject

Si vous avez configuré votre stratégie d'émission de revendications pour inclure des revendications supplémentaires dans les assertions SAML, vous pouvez ajouter des mappages supplémentaires. Exemple :

google.groups=assertion.attributes['http://schemas.microsoft.com/ws/2008/06/identity/claims/groupsid']
attribute.userip=['http://schemas.microsoft.com/2014/09/requestcontext/claims/userip'][0]

Vous pouvez également définir une condition d'attribut. Les conditions d'attribut sont des expressions CEL qui peuvent vérifier les attributs d'assertion et les attributs cibles. Si la condition d'attribut renvoie true pour un identifiant donné, celui-ci est accepté. Dans le cas contraire, l'identifiant est rejeté.

OIDC

Vous pouvez utiliser une condition d'attribut pour limiter les clients pouvant utiliser la fédération d'identité de charge de travail afin d'obtenir des jetons Google Cloud de courte durée.

Par exemple, la condition suivante définit que les applications doivent utiliser l'IWA pour s'authentifier auprès d'AD FS :

assertion.authmethod=='http://schemas.microsoft.com/ws/2008/06/identity/authenticationmethod/windows'

Pour contrôler la liste des applications pouvant obtenir des identifiants éphémères pour Google Cloud, ne définissez pas de conditions d'attribut. Utilisez plutôt les autorisations client dans AD FS pour définir les applications autorisées.

SAML ou WS-Trust

Vous pouvez utiliser une condition d'attribut pour limiter les utilisateurs Active Directory pouvant utiliser la fédération d'identité de charge de travail afin d'obtenir des jetons Google Cloud de courte durée.

Par exemple, la condition suivante n'autorise que les assertions SAML incluant une revendication d'appartenance à un groupe :

"S-1-5-6" in google.groups

Créer le pool d'identité de charge de travail et le fournisseur

Rôles requis

Pour obtenir les autorisations nécessaires pour configurer la fédération d'identité de charge de travail, 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 la fédération d'identité. 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.

Console

  1. Dans la console Google Cloud, accédez à la page Nouveau fournisseur et pool de charges de travail.

    Accéder au nouveau fournisseur de charges de travail et au pool

  2. Sous Créer un pool d'identités, saisissez les informations suivantes :

    • Nom : nom du pool. Le nom est également utilisé comme ID du pool. Vous ne pourrez pas modifier l'ID du pool par la suite.
    • Description : texte décrivant l'objectif du pool.
  3. Cliquez sur Continuer.

  4. Configurez les paramètres du fournisseur :

    OIDC

    • Sélectionner un fournisseur : OpenID Connect (OIDC).
    • Nom du fournisseur : nom du fournisseur. Le nom est également utilisé comme ID de fournisseur. Vous ne pourrez pas modifier l'ID du fournisseur par la suite.
    • URL de l'émetteur : https://ADFS_DOMAIN/adfs, où ADFS_DOMAIN est le nom de domaine public du serveur ou de la ferme AD FS.

    SAML

    Pour configurer la fédération d'identité de charge de travail à partir d'un fournisseur d'identité compatible avec SAML 2.0, vous pouvez suivre les instructions de gcloud CLI.

  5. Cliquez sur Continuer.

  6. Sous Configurer les attributs de fournisseur, ajoutez les mappages d'attributs que vous avez identifiés précédemment.

  7. Sous Conditions d'attribut, saisissez la condition d'attribut que vous avez identifiée précédemment. Laissez le champ vide si vous n'avez pas de condition d'attribut.

  8. Cliquez sur Enregistrer pour créer le pool d'identités de charge de travail et le fournisseur.

gcloud

  1. Créez un pool d'identités de charge de travail :

    gcloud iam workload-identity-pools create WORKLOAD_POOL_ID \
        --location="global" \
        --description="DESCRIPTION" \
        --display-name="DISPLAY_NAME"
    

    Remplacez les éléments suivants :

    • WORKLOAD_POOL_ID : ID unique pour le pool.
    • DISPLAY_NAME : nom du pool.
    • DESCRIPTION : description du pool. Cette description apparaît lorsque vous accordez l'accès aux identités du pool.
  2. Ajoutez un fournisseur de pool d'identités de charge de travail :

    OIDC

    gcloud iam workload-identity-pools providers create-oidc PROVIDER_ID \
        --location="global" \
        --workload-identity-pool="WORKLOAD_POOL_ID" \
        --issuer-uri="https://ADFS_DOMAIN/adfs" \
        --allowed-audiences="RELYING_PARTY_ID" \
        --attribute-mapping="MAPPINGS" \
        --attribute-condition="CONDITIONS"
    

    Remplacez les éléments suivants :

    Le préfixe gcp- est réservé et ne peut pas être utilisé dans un ID de pool ou de fournisseur.

    SAML ou WS-Trust

    curl -O https://ADFS_DOMAIN/federationmetadata/2007-06/federationmetadata.xml
    
    gcloud iam workload-identity-pools providers create-saml PROVIDER_ID \
        --location="global" \
        --workload-identity-pool="POOL_ID" \
        --idp-metadata-path="federationmetadata.xml" \
        --attribute-mapping="MAPPINGS" \
        --attribute-condition="CONDITIONS"
    

    Remplacez les éléments suivants :

    Le préfixe gcp- est réservé et ne peut pas être utilisé dans un ID de pool ou de fournisseur.

    Exemple :

    gcloud iam workload-identity-pools providers create-saml example-provider \
        --location="global" \
        --workload-identity-pool="pool-1" \
        --idp-metadata-path="federationmetadata.xml" \
        --attribute-mapping=google.subject=assertion.subject"
    

    Facultatif : accepter les assertions SAML chiffrées provenant de votre fournisseur d'identité

    Pour permettre à votre fournisseur d'identité SAML 2.0 de produire des assertions SAML chiffrées pouvant être acceptées par la fédération d'identité de charge de travail, procédez comme suit :

    • Dans la fédération d'identité de charge de travail, procédez comme suit :
      • Créez une paire de clés asymétriques pour votre fournisseur de pools d'identités de charge de travail.
      • Créez une paire de clés asymétriques pour votre fournisseur de pools d'identités de charge de travail.
      • Configurez votre fournisseur d'identité SAML pour qu'il utilise la clé publique pour chiffrer les assertions SAML émises.
    • Dans votre fournisseur d'identité, procédez comme suit :
      • Activer le chiffrement des assertions, également appelé chiffrement de jeton.
      • Importez la clé publique que vous avez créée dans la fédération d'identité de charge de travail.
      • Vérifiez que votre fournisseur d'identité génère des assertions SAML chiffrées.
    Notez que, même avec les clés de fournisseur de chiffrement SAML configurées, la fédération d'identité de charge de travail peut toujours traiter une assertion en texte brut.

    Créer des clés de chiffrement d'assertion SAML pour la fédération d'identité de charge de travail

    Cette section vous guide dans la création d'une paire de clés asymétriques permettant à la fédération d'identité de charge de travail d'accepter les assertions SAML chiffrées.

    Google Cloud utilise la clé privée pour déchiffrer les assertions SAML émises par votre fournisseur d'identité. Pour créer une paire de clés asymétriques à utiliser avec le chiffrement SAML, exécutez la commande suivante. Pour en savoir plus, consultez la page Algorithmes de chiffrement SAML compatibles.

    gcloud iam workload-identity-pools providers keys create KEY_ID \
        --workload-identity-pool WORKLOAD_POOL_ID \
        --provider PROVIDER_ID \
        --location global \
        --use encryption \
        --spec KEY_SPECIFICATION

    Remplacez les éléments suivants :

    • KEY_ID : nom de la clé de votre choix
    • WORKLOAD_POOL_ID : ID du pool
    • PROVIDER_ID : ID du fournisseur
    • KEY_SPECIFICATION : spécification de clé, qui peut être rsa-2048, rsa-3072 ou rsa-4096.

    Une fois la paire de clés créée, pour télécharger la clé publique dans un fichier de certificat, exécutez la commande suivante. Seule la fédération d'identité de charge de travail a accès à la clé privée.

    gcloud iam workload-identity-pools providers keys describe KEY_ID \
        --workload-identity-pool WORKLOAD_POOL_ID \
        --provider PROVIDER_ID \
        --location global \
        --format "value(keyData.key)" \
        > CERTIFICATE_PATH

    Remplacez les éléments suivants :

    • KEY_ID : nom de la clé
    • WORKLOAD_POOL_ID : ID du pool
    • PROVIDER_ID : ID du fournisseur
    • CERTIFICATE_PATH : chemin d'accès dans lequel écrire le certificat (par exemple, saml-certificate.cer ou saml-certificate.pem)

    Configurer votre fournisseur d'identité compatible avec SAML 2.0 pour émettre des assertions SAML chiffrées

    1. Déplacez le fichier de certificat vers votre serveur AD FS.
    2. Sur votre serveur AD FS, effectuez un clic droit sur le bouton Start (Démarrer) (ou appuyez sur Win+X) et cliquez sur Windows PowerShell (Administrateur).
    3. Dans PowerShell, exécutez la commande suivante pour activer le chiffrement :
              Set-AdfsRelyingPartyTrust `
              -TargetName NAME `
              -SamlResponseSignature MessageAndAssertion `
              -EncryptionCertificate PATH `
              -EncryptClaims $True
          

      Remplacez les éléments suivants :

      • NAME : nom de votre approbation par un tiers de confiance
      • PATH : chemin d'accès du fichier de certificat

    Utilisateurs de WS-Trust : cette fonctionnalité n'est disponible que lorsque vous utilisez SAML.

    Après avoir configuré votre fournisseur d'identité pour chiffrer les assertions SAML, nous vous recommandons de vérifier que les assertions générées sont bien chiffrées. Même si le chiffrement des assertions SAML est configuré, la fédération d'identité de charge de travail peut toujours traiter les assertions en texte brut.

    Supprimer les clés de chiffrement de la fédération d'identité de charge de travail

    Pour supprimer les clés de chiffrement SAML, exécutez la commande suivante :
      gcloud iam workload-identity-pools providers keys delete KEY_ID \
          --workload-identity-pool WORKLOAD_POOL_ID \
          --provider PROVIDER_ID \
          --location global

    Remplacez les éléments suivants :

    • KEY_ID : nom de la clé
    • WORKLOAD_POOL_ID : ID du pool
    • PROVIDER_ID : ID du fournisseur

    Algorithmes de chiffrement SAML compatibles

    La fédération d'identité de charge de travail est compatible avec les algorithmes de transport de clés suivants :

    La fédération d'identité de charge de travail est compatible avec les algorithmes de chiffrement de bloc suivants :

Authentifier une charge de travail

Vous devez effectuer ces étapes une fois par charge de travail.

Autoriser votre charge de travail externe à accéder aux ressources Google Cloud

Pour autoriser votre charge de travail à accéder aux ressources Google Cloud, nous vous recommandons d'accorder un accès direct aux ressources au compte principal. Dans ce cas, le compte principal est l'utilisateur fédéré. Certains produits Google Cloud sont soumis aux limites de l'API Google Cloud. Si votre charge de travail appelle un point de terminaison d'API présentant une limite, vous pouvez emprunter l'identité d'un compte de service. Dans ce cas, le compte principal est le compte de service Google Cloud, qui agit en tant qu'identité. Vous accordez l'accès au compte de service sur la ressource.

Accès direct aux ressources

Vous pouvez accorder l'accès à une identité fédérée directement sur les ressources à l'aide de la console Google Cloud ou de gcloud CLI.

Console

Pour attribuer des rôles IAM directement sur une ressource à l'aide de la console Google Cloud, vous devez accéder à la page de la ressource, puis attribuer le rôle. L'exemple suivant montre comment accéder à la page Cloud Storage et accorder le rôle Lecteur des objets de l'espace de stockage (roles/storage.objectViewer) à une identité fédérée directement sur un bucket Cloud Storage.

  1. Dans la console Google Cloud, accédez à la page Buckets Cloud Storage.

    Accéder à la page "Buckets"

  2. Dans la liste des buckets, cliquez sur le nom du bucket pour lequel vous souhaitez attribuer le rôle.

  3. Sélectionnez l'onglet Autorisations en haut de la page.

  4. Cliquez sur le bouton  Accorder l'accès.

    La boîte de dialogue Ajouter des entités principales s'affiche.

  5. Dans le champ Nouveaux comptes principaux, saisissez une ou plusieurs identités nécessitant un accès au bucket.

    Par sujet

    principal://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/subject/SUBJECT
    

    Remplacez les éléments suivants :

    • PROJECT_NUMBER : numéro de projet
    • POOL_ID : ID de pool de charges de travail
    • SUBJECT : sujet individuel mappé à partir de votre fournisseur d'identité (par exemple, administrator@example.com)

    Par groupe

    principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/group/GROUP
    

    Remplacez les éléments suivants :

    • PROJECT_NUMBER : numéro de projet
    • WORKLOAD_POOL_ID : ID de pool de charges de travail
    • GROUP : groupe mappé à partir de votre fournisseur d'identité (par exemple, administrator-group@example.com)

    Par attribut

    principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/attribute.ATTRIBUTE_NAME/ATTRIBUTE_VALUE
    

    Remplacez les éléments suivants :

    • PROJECT_NUMBER : numéro de projet
    • WORKLOAD_POOL_ID : ID de pool de charges de travail
    • ATTRIBUTE_NAME : l'un des attributs mappés à partir de votre fournisseur d'identité
    • ATTRIBUTE_VALUE : valeur de l'attribut
  6. Sélectionnez un ou plusieurs rôles dans le menu déroulant Select a role (Sélectionnez un rôle). Les rôles sélectionnés apparaissent dans le volet et sont accompagnés d'une brève description des autorisations auxquelles ils correspondent.

  7. Cliquez sur Enregistrer.

gcloud

Pour accorder des rôles IAM sur une ressource d'un projet à l'aide de gcloud CLI, procédez comme suit :

  1. Obtenez le numéro du projet dans lequel la ressource est définie.

    gcloud projects describe $(gcloud config get-value core/project) --format=value\(projectNumber\)
    
  2. Accordez l'accès à la ressource.

    Pour utiliser gcloud CLI afin d'accorder le rôle Utilisateur Workload Identity (roles/iam.workloadIdentityUser) aux identités externes qui répondent à certains critères, exécutez la commande suivante.

    Par sujet

    gcloud storage buckets add-iam-policy-binding BUCKET_ID \
        --role=roles/storage.objectViewer \
        --member="principal://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/subject/SUBJECT"

    Par groupe

    gcloud storage buckets add-iam-policy-binding BUCKET_ID \
        --role=roles/storage.objectViewer \
        --member="principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/group/GROUP"

    Par attribut

    gcloud storage buckets add-iam-policy-binding BUCKET_ID \
        --role=roles/storage.objectViewer \
        --member="principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/attribute.ATTRIBUTE_NAME/ATTRIBUTE_VALUE"

    Remplacez les éléments suivants :

    • BUCKET_ID : bucket pour lequel vous souhaitez accorder l'accès.
    • PROJECT_NUMBER : numéro du projet contenant le pool d'identités de charge de travail
    • POOL_ID : ID du pool d'identités de charge de travail.
    • SUBJECT : valeur attendue pour l'attribut que vous avez mappé sur google.subject.
    • GROUP : valeur attendue pour l'attribut que vous avez mappé sur google.groups.
    • ATTRIBUTE_NAME : nom d'un attribut personnalisé dans votre mappage d'attributs
    • ATTRIBUTE_VALUE : valeur de l'attribut personnalisé dans votre mappage d'attributs

    Vous pouvez attribuer des rôles sur n'importe quelle ressource Google Cloud compatible avec les stratégies d'autorisation IAM.

Emprunter l'identité d'un compte de service

  1. Pour créer un compte de service pour la charge de travail externe, procédez comme suit :

    1. Enable the IAM, Security Token Service, and Service Account Credentials APIs.

      Enable the APIs

    2. Créez un compte de service qui représente la charge de travail. Il est préférable d'utiliser un compte de service dédié pour chaque charge de travail.

      Le compte de service ne doit pas obligatoirement se trouver dans le même projet que le pool d'identités de charge de travail.

    3. Accordez au compte de service l'accès aux ressources auxquelles vous souhaitez que les identités externes accèdent.

    4. Attribuez le rôle Utilisateur Workload Identity (roles/iam.workloadIdentityUser) au compte de service.

    5. Créez un compte de service qui représente la charge de travail. Nous vous recommandons d'utiliser un compte de service dédié pour chaque charge de travail.

      Le compte de service ne doit pas obligatoirement se trouver dans le même projet que le pool d'identités de charge de travail, mais vous devez faire référence au projet qui contient le compte de service.

  2. Pour accorder l'accès à une identité fédérée à l'aide de l'emprunt d'identité d'un compte de service en utilisant la console Google Cloud ou gcloud CLI, procédez comme suit :

    Console

    Pour attribuer des rôles IAM à une identité fédérée avec un compte de service à l'aide de la console Google Cloud, procédez comme suit :

    1. Créez un compte de service servant d'identité à emprunter en procédant comme suit :

      1. Enable the IAM, Security Token Service, and Service Account Credentials APIs.

        Enable the APIs

      2. Créez un compte de service qui représente l'identité de la charge de travail. Nous vous recommandons d'utiliser un compte de service dédié pour chaque charge de travail.

        Le compte de service ne doit pas obligatoirement se trouver dans le même projet que le pool d'identités de charge de travail, mais lorsque vous accordez l'accès IAM, vous devez faire référence au projet contenant le compte de service.

      3. Accordez au compte de service l'accès aux ressources auxquelles vous souhaitez que les identités externes accèdent.

    2. Pour accorder l'accès à l'aide de l'emprunt d'identité d'un compte de service, procédez comme suit :

      1. Accédez à la page Pools d'identités de charge de travail.

        Accéder aux pools d'identité de charge de travail

      2. Sélectionnez Accorder l'accès.

      3. Dans la boîte de dialogue Accorder l'accès au compte de service, sélectionnez Accorder l'accès à l'aide de l'emprunt d'identité du compte de service.

      4. Dans la liste Comptes de service, sélectionnez le compte de service pour les identités externes à emprunter, puis procédez comme suit :

      5. Pour choisir les identités du pool qui peuvent emprunter l'identité du compte de service, effectuez l'une des actions suivantes :

        • Pour n'autoriser que les identités spécifiques du pool d'identités de charge de travail à emprunter l'identité du compte de service, sélectionnez Uniquement les identités correspondant au filtre.

        • Dans la liste Nom de l'attribut, sélectionnez l'attribut sur lequel vous souhaitez filtrer les données.

        • Dans le champ Valeur d'attribut, saisissez la valeur attendue de l'attribut. Par exemple, si vous utilisez un mappage d'attribut google.subject=assertion.sub, définissez le nom de l'attribut sur subject et la valeur d'attribut sur la valeur de la revendication sub dans les jetons émis par votre fournisseur d'identité externe.

      6. Pour enregistrer la configuration, cliquez sur Enregistrer, puis sur Ignorer.

    gcloud

    Pour utiliser gcloud CLI afin d'accorder le rôle Utilisateur Workload Identity (roles/iam.workloadIdentityUser) aux identités externes qui répondent à certains critères, exécutez la commande suivante.

    Par sujet

    gcloud storage buckets add-iam-policy-binding SERVICE_ACCOUNT_EMAIL \
        --role=roles/storage.objectViewer \
        --member="principal://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/subject/SUBJECT"

    Par groupe

    gcloud storage buckets add-iam-policy-binding SERVICE_ACCOUNT_EMAIL \
        --role=roles/storage.objectViewer \
        --member="principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/group/GROUP"

    Par attribut

    gcloud storage buckets add-iam-policy-binding SERVICE_ACCOUNT_EMAIL \
        --role=roles/storage.objectViewer \
        --member="principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/attribute.ATTRIBUTE_NAME/ATTRIBUTE_VALUE"

    Remplacez les éléments suivants :

    • SERVICE_ACCOUNT_EMAIL : adresse e-mail du compte de service.
    • PROJECT_NUMBER : numéro du projet contenant le pool d'identités de charge de travail
    • POOL_ID : ID du pool d'identités de charge de travail.
    • SUBJECT : valeur attendue pour l'attribut que vous avez mappé sur google.subject.
    • GROUP : valeur attendue pour l'attribut que vous avez mappé sur google.groups.
    • ATTRIBUTE_NAME : nom d'un attribut personnalisé dans votre mappage d'attributs
    • ATTRIBUTE_VALUE : valeur de l'attribut personnalisé dans votre mappage d'attributs

Créer une configuration d'identifiants

Vous pouvez autoriser les Bibliothèques clientes Google Cloud et des outils tels que gcloud CLI et Terraform à utiliser des identifiants Active Directory pour s'authentifier auprès de Google Cloud à l'aide de Workload Authenticator pour Windows.

Workload Identity pour Windows est un outil Open Source qui sert de plug-in pour les bibliothèques clientes Cloud et des outils tels que gcloud CLI :

  1. Lorsque l'outil ou la bibliothèque a besoin de nouveaux identifiants, il lance l'authentificateur de charge de travail en arrière-plan.
  2. Workload Authenticator utilise OIDC, SAML ou WS-Trust pour obtenir un nouveau jeton ou une assertion SAML auprès d'AD FS et le renvoyer à l'outil ou à la bibliothèque.
  3. L'outil ou la bibliothèque utilise ensuite les échanges du jeton ou de l'assertion SAML avec des identifiants Google Cloud éphémères à l'aide de la fédération d'identité de charge de travail.

Pour utiliser Workload Authenticator pour Windows, vous devez créer un fichier de configuration des identifiants. Ce fichier définit les éléments suivants :

  • Où trouver l'exécutable Workload Authenticator pour Windows (wwauth.exe) et les paramètres avec lesquels l'exécuter
  • Quel pool d'identités de charge de travail et quel fournisseur utiliser
  • À quel compte de service emprunter l'identité

Pour créer un fichier de configuration d'identifiants, procédez comme suit sur le serveur Windows qui exécute votre charge de travail :

  1. Effectuez un clic droit sur le bouton Start (Démarrer) (ou appuyez sur Win+X) et cliquez sur Windows PowerShell.
  2. Téléchargez Workload Authenticator pour Windows et enregistrez-le dans un emplacement accessible par votre charge de travail :

    (New-Object Net.WebClient).DownloadFile(
      "https://github.com/GoogleCloudPlatform/iam-windows-authenticator/releases/latest/download/wwauth.exe",
      "${env:ProgramData}\wwauth.exe")
    

    Si vous créez un fichier de configuration des identifiants à l'aide de Workload Authenticator pour Windows, le fichier contient le chemin d'accès à son exécutable. Si vous supprimez ou déplacez ultérieurement l'exécutable, les charges de travail ne pourront plus rechercher ni utiliser le fichier exécutable.

  3. Lancez wwauth.exe :

    & ${env:ProgramData}\wwauth.exe
    

    Une boîte de dialogue de configuration s'ouvre :

    Workload Authenticator

  4. Sélectionnez l'onglet AD FS et saisissez les paramètres suivants :

    • URI d'émetteur du serveur AD FS : URI public de votre serveur ou ferme AD FS.

      https://ADFS_DOMAIN/adfs/
      

      Remplacez ADFS_DOMAIN par le nom de domaine public de votre serveur ou de votre batterie de serveurs AD FS.

    Les paramètres suivants dépendent du protocole que vous souhaitez utiliser :

    OIDC

    • Protocole : AdfsOidc
    • ID du tiers de confiance : conservez la valeur par défaut.
    • ID client : identifiant client de l'application serveur dans AD FS.

    SAML

    • Protocole : AdfsSamlPost
    • URL du service ACS : https://sts.googleapis.com/v1/token.
    • Requêtes de signature à l'aide d'un certificat : désactivée

    WS-Trust

    • Protocole : AdfsWsTrust
  5. Sélectionnez l'onglet Workload IdentityIdentité de la charge de travail, puis saisissez les paramètres suivants :

    • Numéro du projet : numéro du projet contenant le pool d'identités de charge de travail
    • ID du pool : ID du pool d'identités de charge de travail
    • ID du fournisseur : ID du fournisseur du pool d'identités de charge de travail
    • Emprunter l'identité du compte de service : activé si vous utilisez l'emprunt d'identité d'un compte de service.
    • Adresse e-mail : adresse e-mail du compte de service, si vous utilisez l'emprunt d'identité du compte de service.
  6. Sélectionnez l'onglet AD FS et vérifiez que le champ ID de partie de confiance contient désormais l'URL de votre fournisseur de pool d'identités de charge de travail.

  7. Cliquez sur Appliquer et choisissez un emplacement pour enregistrer le fichier de configuration des identifiants.

    Contrairement à une clé de compte de service, un fichier de configuration des identifiants ne contient aucun secret et ne nécessite pas de rester confidentiel. Pour en savoir plus sur le fichier de configuration des identifiants, consultez la page https://google.aip.dev/auth/4117.

Vous êtes maintenant prêt à tester votre configuration :

  1. Sélectionnez un utilisateur Active Directory à tester. Il peut s'agir de l'utilisateur Active Directory de la charge de travail ou de l'utilisateur actuellement connecté.

  2. Pour tester la configuration avec votre utilisateur actuel, cliquez sur Test.

    Pour effectuer un test avec un autre utilisateur, sélectionnez Test > Tester la configuration en tant qu'utilisateur et saisissez les identifiants de l'utilisateur.

    L'outil tente maintenant de s'authentifier auprès de Google Cloud en procédant comme suit :

    1. Acquérez un jeton OIDC ou une assertion SAML auprès d'AD FS.
    2. Obtenez un jeton Google Security Token Service.
    3. Prenez le contrôle du compte de service, si vous utilisez l'emprunt d'identité de compte de service.

    Si l'authentification réussit, le message Test réussi s'affiche :

    Résultat du test

Utiliser la configuration des identifiants pour accéder à Google Cloud

Pour permettre aux outils et aux bibliothèques clientes d'utiliser votre configuration d'identifiants, procédez comme suit sur Windows Server qui exécute votre charge de travail :

  1. Effectuez un clic droit sur le bouton Démarrer, puis cliquez sur Exécuter.
  2. Saisissez sysdm.cpl et cliquez sur OK.
  3. Sous l'onglet Avancé, cliquez sur Variables d'environnement.
  4. Dans la section Variables système, ajoutez deux nouvelles variables :

    Nom Valeur
    GOOGLE_APPLICATION_CREDENTIALS Chemin d'accès au fichier de configuration des identifiants
    GOOGLE_EXTERNAL_ACCOUNT_ALLOW_EXECUTABLES 1
  5. Cliquez sur OK.

  6. Utilisez une bibliothèque cliente ou un outil compatible avec la fédération d'identité de charge de travail et capable de trouver automatiquement les identifiants :

    C++

    Les bibliothèques clientes Google Cloud pour C++ sont compatibles avec la fédération d'identité de charge de travail depuis la version v2.6.0. Pour utiliser la fédération d'identité de charge de travail, vous devez créer les bibliothèques clientes avec la version 1.36.0 ou ultérieure de gRPC.

    Go

    Les bibliothèques clientes pour Go sont compatibles avec la fédération d'identité si elles utilisent la version 0.0.0-20210218202405-ba52d332ba99 ou une version ultérieure du module golang.org/x/oauth2.

    Pour vérifier quelle version de ce module est utilisée par votre bibliothèque cliente, exécutez les commandes suivantes :

    cd $GOPATH/src/cloud.google.com/go
    go list -m golang.org/x/oauth2
    

    Java

    Les bibliothèques clientes pour Java sont compatibles avec la fédération d'identité si elles utilisent la version 0.24.0 ou une version ultérieure de l'artefact com.google.auth:google-auth-library-oauth2-http.

    Pour vérifier la version de cet artefact utilisée par votre bibliothèque cliente, exécutez la commande Maven suivante dans le répertoire de votre application :

    mvn dependency:list -DincludeArtifactIds=google-auth-library-oauth2-http
    

    Node.js

    Les bibliothèques clientes pour Node.js sont compatibles avec la fédération d'identité de charge de travail si elles utilisent la version 7.0.2 ou ultérieure du package google-auth-library.

    Pour vérifier la version de ce package utilisée par votre bibliothèque cliente, exécutez la commande suivante dans le répertoire de votre application :

    npm list google-auth-library
    

    Lorsque vous créez un objet GoogleAuth, vous pouvez spécifier un ID de projet ou autoriser GoogleAuth à le trouver automatiquement. Pour trouver automatiquement l'ID du projet, le compte de service dans le fichier de configuration doit disposer du rôle de visiteur (roles/browser) ou d'un rôle avec des autorisations équivalentes sur votre projet. Pour en savoir plus, consultez la section README du package google-auth-library.

    Python

    Les bibliothèques clientes pour Python sont compatibles avec la fédération d'identité si elles utilisent la version 1.27.0 ou ultérieure du package google-auth.

    Pour vérifier la version de ce package utilisée par votre bibliothèque cliente, exécutez la commande suivante dans l'environnement dans lequel le package est installé :

    pip show google-auth
    

    Pour spécifier un ID de projet pour le client d'authentification, vous pouvez définir la variable d'environnement GOOGLE_CLOUD_PROJECT ou autoriser le client à trouver automatiquement l'ID du projet. Pour trouver automatiquement l'ID du projet, le compte de service dans le fichier de configuration doit disposer du rôle de visiteur (roles/browser) ou d'un rôle avec des autorisations équivalentes sur votre projet. Pour en savoir plus, consultez le guide de l'utilisateur du package google-auth.

    gcloud

    Pour vous authentifier à l'aide de la fédération d'identité de charge de travail, utilisez la commande gcloud auth login :

    gcloud auth login --cred-file=FILEPATH.json
    

    Remplacez FILEPATH par le chemin d'accès au fichier de configuration des identifiants.

    La fédération d'identité de charge de travail dans gcloud CLI est disponible dans les versions 363.0.0 et ultérieures de gcloud CLI.

    Terraform

    Le fournisseur Google Cloud est compatible avec la fédération d'identité de charge de travail si vous utilisez la version 3.61.0 ou ultérieure :

    terraform {
      required_providers {
        google = {
          source  = "hashicorp/google"
          version = "~> 3.61.0"
        }
      }
    }
    

    gsutil

    Pour vous authentifier à l'aide de la fédération d'identité de charge de travail, appliquez l'une des méthodes suivantes :

    Lorsque vous utilisez gsutil conjointement avec gcloud, connectez-vous comme d'habitude :

    gcloud auth login --cred-file=FILEPATH.json
    

    Si vous utilisez gsutil en tant qu'application de ligne de commande autonome, modifiez le fichier .boto pour inclure la section suivante :

    [Credentials]
    gs_external_account_file = FILEPATH
    

    Dans les deux cas, remplacez FILEPATH par le chemin d'accès au fichier de configuration des identifiants.

    La fédération d'identité de charge de travail dans gsutil est compatible avec les versions 379.0.0 et ultérieures de gcloud CLI.

    bq

    Pour vous authentifier à l'aide de la fédération d'identité de charge de travail, utilisez la commande gcloud auth login, comme suit :

    gcloud auth login --cred-file=FILEPATH.json
    

    Remplacez FILEPATH par le chemin d'accès au fichier de configuration des identifiants.

    La fédération d'identité de charge de travail dans bq est disponible dans les versions 390.0.0 et ultérieures de gcloud CLI.

Étapes suivantes