Configurer la fédération des identités des employés avec PingOne AIC

Ce document explique comment configurer la fédération des identités des employés avec PingOne Advanced Identity Cloud (AIC) en tant que fournisseur d'identité (IdP) et comment gérer l'accès àGoogle Cloud. Une fois que vous avez configuré le fournisseur d'identité PingOne AIC, les utilisateurs fédérés peuvent accéder aux services Google Cloud qui sont compatibles avec la fédération d'identité des employés à l'aide du protocole SAML 2.0.

Avant de commencer

  1. Assurez-vous de configurer une organisation Google Cloud .
  2. Installez la Google Cloud CLI. Une fois que la Google Cloud CLI est installée, initialisez-la en exécutant la commande suivante :

    gcloud init

    Si vous utilisez un fournisseur d'identité (IdP) externe, vous devez d'abord vous connecter à la gcloud CLI avec votre identité fédérée.

  3. Créer un IdP hébergé

    1. Dans Consoles natives > Gestion des accès, accédez à Domaines > REALM_NAME > Tableau de bord, puis cliquez sur Applications SAML.
    2. Cliquez sur Ajouter un fournisseur d'entités> Hébergé.
    3. Saisissez un ID d'entité. Notez cette valeur pour une utilisation ultérieure.

      1. Vérifiez que la valeur de l'URL de base du fournisseur d'entités est correcte. Advanced Identity Cloud utilise cette valeur pour tous les points de terminaison associés à SAML 2.0.
      2. Dans la section Alias de métadonnées, indiquez une valeur compatible avec les URL dans la propriété Alias de métadonnées du fournisseur d'identité. Cet alias doit être unique dans le cercle de confiance.
      3. Cliquez sur Créer.
      4. Dans l'onglet Assertion Processing (Traitement des assertions), dans la section Attribute Mapper (Mappeur d'attributs), mappez les noms d'attributs SAML aux noms d'attributs locaux. Les noms des attributs SAML sont ceux utilisés dans une assertion.
      5. Cliquez sur Ajouter ou Mettre à jour pour chaque mappage.
      6. Cliquez sur Enregistrer les modifications.

    Utiliser des attributs

    Cette section explique comment utiliser les attributs de l'assertion SAML.

    Dans les exemples suivants, les attributs de l'assertion SAML sont mappés sur des attributs locaux :

    Attribut SAML Attribut "Local"
    IDPEmail mail
    FirstName givenName
    groups groups

    Configurez les attributs requis dans la section de mappage des attributs. Vous mapperez ces attributs lorsque vous créerez le fournisseur de pools d'identités des employés plus loin dans ce guide.

    Exporter les métadonnées du fournisseur

    Vous pouvez accéder aux métadonnées SAML 2.0 de votre fournisseur hébergé de l'une des manières suivantes :

    • Sur REST

      Exécutez la commande suivante :

      curl --output METADATA_XML \
          "https://TENANT_ENV_FQDN/am/ExportSamlMetadata?entityid=ENTITY_ID&realm=/REALM"
      
    • Dans un navigateur

      Ouvrez l'URL des métadonnées de l'environnement de votre locataire dans un navigateur pour télécharger le fichier XML : https://TENANT_ENV_FQDN/am/ExportSamlMetadata?entityid=ENTITY_ID&realm=/REALM

    1. Enregistrez le fichier XML sur votre ordinateur local.

    Importer Google en tant que fournisseur de services distant

    1. Préparez le fichier XML de métadonnées du fournisseur de services Google Cloud . Utilisez le modèle suivant en remplaçant les valeurs d'espace réservé :

      <?xml version="1.0" encoding="UTF-8"?>
      <md:EntityDescriptor xmlns:md="urn:oasis:names:tc:SAML:2.0:metadata" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" entityID="https://iam.googleapis.com/locations/global/workforcePools/WORKFORCE_POOL_ID/providers/WORKFORCE_PROVIDER_ID">
         <md:SPSSODescriptor AuthnRequestsSigned="false" WantAssertionsSigned="true" protocolSupportEnumeration="urn:oasis:names:tc:SAML:2.0:protocol">
            <md:NameIDFormat>urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified</md:NameIDFormat>
            <md:NameIDFormat>urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress</md:NameIDFormat>
            <md:AssertionConsumerService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" Location="https://auth.cloud.google/signin-callback/locations/global/workforcePools/WORKFORCE_POOL_ID/providers/WORKFORCE_PROVIDER_ID" index="0" isDefault="true"/>
         </md:SPSSODescriptor>
      </md:EntityDescriptor>
      
    2. Importez les métadonnées de l'une des manières suivantes :

      • Dans la console

        1. Dans la console d'administration PingOne AIC, accédez à SAML Applications (Applications SAML).
        2. Cliquez sur Ajouter un fournisseur d'entités > Distant.
        3. Importez le fichier XML de métadonnées du fournisseur de services Google Cloud que vous venez de créer.
        4. Cliquez sur Créer.
      • Sur REST

        1. Convertissez les métadonnées XML en chaîne encodée en base64url.
        2. Obtenez un jeton d'accès.
        3. Exécutez la commande suivante :

          curl --request POST \
              --header 'authorization: Bearer ACCESS_TOKEN' \
              --header 'Content-Type: application/json' \
              --header 'Accept-API-Version: resource=1.0' \
              --data-raw '{"standardMetadata": "BASE64URL_ENCODED_METADATA"}' \
              'https://TENANT_ENV_FQDN/am/json/realms/root/realms/alpha/realm-config/saml2/remote?_action=importEntity'
          

    Créer un cercle de confiance

    1. Accédez à Realms > REALM_NAME > Applications > Fédération > Cercles de confiance.
    2. Cliquez sur Ajouter un cercle de confiance.
    3. Saisissez un nom, puis cliquez sur Créer.
    4. Sur la page Cercle de confiance, dans la propriété Fournisseurs d'entités, sélectionnez votre IdP hébergé et le SP distant Google Cloud .
    5. Cliquez sur Enregistrer les modifications.

    Créer le fournisseur de pools d'identités de personnel PingOne AIC

    Cette section explique comment créer un fournisseur de pools d'identités de personnel pour permettre aux utilisateurs de votre fournisseur d'identité d'accéder à Google Cloud. Vous pouvez configurer le fournisseur pour qu'il utilise le protocole SAML.

    Créer un fournisseur de pools d'identités de personnel SAML

    1. Pour créer un fournisseur de pools d'identités de personnel SAML, assurez-vous que les métadonnées de votre fournisseur d'identité incluent au moins l'ID d'entité SAML, l'URL d'authentification unique et une clé publique de signature. Pour ce faire, procédez comme suit :

      gcloud

      1. Enregistrez les métadonnées SAML de votre application PingOne AIC.

      2. Pour créer le fournisseur de pools d'identités de personnel SAML, exécutez la commande suivante :

        gcloud iam workforce-pools providers create-saml WORKFORCE_PROVIDER_ID \
            --workforce-pool="WORKFORCE_POOL_ID" \
            --display-name="DISPLAY_NAME" \
            --description="DESCRIPTION" \
            --idp-metadata-path="XML_METADATA_PATH" \
            --attribute-mapping="ATTRIBUTE_MAPPING" \
            --attribute-condition="ATTRIBUTE_CONDITION" \
            --location=global
        

        Remplacez les éléments suivants :

        • WORKFORCE_PROVIDER_ID : ID de fournisseur.
        • WORKFORCE_POOL_ID : ID du pool d'identités de personnel
        • DISPLAY_NAME : nom à afficher.
        • DESCRIPTION : une description.
        • XML_METADATA_PATH : chemin d'accès au fichier de métadonnées au format XML que vous avez exporté depuis PingOne AIC.
        • ATTRIBUTE_MAPPING : mappage d'attributs. Par exemple : google.subject=assertion.subject,google.groups=assertion.attributes.groups,attribute.department=assertion.attributes.department[0].
        • ATTRIBUTE_CONDITION : condition d'attribut facultative. Par exemple, pour limiter l'attribut ipaddr à une certaine plage d'adresses IP, vous pouvez définir la condition assertion.ipaddr.startsWith('98.11.12.').

        Pour en savoir plus, consultez Mappage d'attributs.

        Cette commande attribue les éléments subject, groups et department dans l'assertion SAML aux attributs google.subject, google.groups et attribute.department, respectivement. La condition d'attribut garantit également que seuls les utilisateurs compris dans une plage d'adresses IP donnée peuvent se connecter via ce fournisseur de personnel.

      Console

      Pour configurer le fournisseur SAML à l'aide de la console Google Cloud , procédez comme suit :

      1. Dans la console Google Cloud , accédez à la page Pools d'identités de personnel : Accéder aux pools d'identités de personnel
      2. Dans le tableau Pools d'identités de personnel, sélectionnez le pool pour lequel vous souhaitez créer le fournisseur.
      3. Dans la section Fournisseurs, cliquez sur  Ajouter un fournisseur.
      4. Dans la liste Sélectionner un fournisseur, sélectionnez Fournisseur d'identité générique.
      5. Dans Sélectionner un protocole d'authentification, sélectionnez SAML.
      6. Dans la section Créer un fournisseur, procédez comme suit :
        1. Dans Nom, saisissez un nom pour le fournisseur.
        2. Facultatif : Dans le champ Description, saisissez une description du fournisseur.
        3. Dans Fichier de métadonnées IdP (XML), sélectionnez le fichier XML de métadonnées que vous avez exporté depuis PingOne AIC.
        4. Assurez-vous que l'option fournisseur activé est activée.
        5. Cliquez sur Continuer.
      7. Dans la section Partager les informations sur votre fournisseur, cliquez sur Continuer.
      8. Dans la section Configurer le fournisseur, procédez comme suit :

        1. Dans Mappage des attributs, saisissez une expression CEL pour google.subject (par exemple, assertion.subject).
        2. Facultatif : Pour définir d'autres mappages, cliquez sur Ajouter un mappage et saisissez d'autres mappages. Par exemple :

          google.subject=assertion.subject,
          google.groups=assertion.attributes['https://example.com/aliases'],
          attribute.costcenter=assertion.attributes.costcenter[0]
          
        3. Facultatif : Pour ajouter une condition d'attribut, cliquez sur Ajouter une condition, puis saisissez une expression CEL représentant une condition d'attribut. Par exemple, pour limiter l'attribut ipaddr à une certaine plage d'adresses IP, vous pouvez définir la condition assertion.attributes.ipaddr.startsWith('98.11.12.'). Cet exemple de condition garantit que seuls les utilisateurs dont l'adresse IP commence par 98.11.12. peuvent se connecter en utilisant ce fournisseur de personnel.

      9. Pour activer la journalisation d'audit détaillée, dans Journalisation détaillée, cliquez sur le bouton Activer la journalisation d'audit des valeurs d'attribut.

      10. Pour créer le fournisseur, cliquez sur Envoyer.

    Gérer l'accès aux ressources Google Cloud

    Cette section explique comment gérer l'accès aux ressources Google Cloud pour les utilisateurs PingOne AIC.

    L'exemple de projet utilisé dans ce guide peut être différent de celui que vous avez utilisé pour configurer la fédération des identités des employés.

    Vous pouvez gérer les rôles pour des identités uniques, un groupe d'identités ou un pool entier. Pour en savoir plus, consultez la page Représenter les utilisateurs de pools d'identités de personnel dans les stratégies IAM.

    Utiliser des attributs de service mappés

    Pour accorder le rôle Administrateur de l'espace de stockage (roles/storage.admin) à toutes les identités d'un service spécifique pour le projet TEST_PROJECT_ID, exécutez la commande suivante :

    gcloud projects add-iam-policy-binding TEST_PROJECT_ID \
        --role="roles/storage.admin" \
        --member="principalSet://iam.googleapis.com/locations/global/workforcePools/WORKFORCE_POOL_ID/attribute.department/DEPARTMENT_VALUE"
    

    Remplacez les éléments suivants :

    • TEST_PROJECT_ID : ID du projet.
    • WORKFORCE_POOL_ID : ID du pool d'identités de personnel
    • DEPARTMENT_VALUE : valeur attribute.department mappée.

    Utiliser des groupes mappés

    Pour attribuer le rôle Administrateur de l'espace de stockage (roles/storage.admin) à toutes les identités du groupe GROUP_ID pour le projet TEST_PROJECT_ID, exécutez la commande suivante :

    gcloud projects add-iam-policy-binding TEST_PROJECT_ID \
        --role="roles/storage.admin" \
        --member="principalSet://iam.googleapis.com/locations/global/workforcePools/WORKFORCE_POOL_ID/group/GROUP_ID"
    

    Remplacez les éléments suivants :

    • TEST_PROJECT_ID : ID du projet.
    • WORKFORCE_POOL_ID : ID du pool d'identités de personnel
    • GROUP_ID : groupe de la revendication google.groups mappée.

    Se connecter et tester l'accès

    Dans cette section, vous vous connectez en tant qu'utilisateur de pool d'identités de personnel et testez votre accès.

    Se connecter

    Connexion à la console (fédéré)

    Pour vous connecter à la console de fédération des identités des employés Google Cloud , également appelée console (fédérée), procédez comme suit :

    1. Accédez à la page de connexion de la console (fédéré).

      Accéder à la console (fédéré)

    2. Saisissez le nom du fournisseur, en respectant le format suivant :
      locations/global/workforcePools/WORKFORCE_POOL_ID/providers/WORKFORCE_PROVIDER_ID
    3. Lorsque vous y êtes invité, saisissez vos identifiants PingOne AIC.

    Connexion à Google Cloud CLI depuis un navigateur

    Pour vous connecter à gcloud CLI à l'aide d'un flux de connexion basé sur un navigateur :

    Pour créer le fichier de configuration de connexion, exécutez la commande suivante. Vous pouvez éventuellement définir par défaut l'activation du fichier pour gcloud CLI en ajoutant l'option --activate. Vous pouvez ensuite exécuter gcloud auth login sans spécifier le chemin d'accès au fichier de configuration à chaque fois.

    gcloud iam workforce-pools create-login-config \
        locations/global/workforcePools/WORKFORCE_POOL_ID/providers/PROVIDER_ID \
        --output-file=LOGIN_CONFIG_FILE_PATH

    Remplacez les éléments suivants :

    • WORKFORCE_POOL_ID : ID du pool de personnel
    • PROVIDER_ID : ID du fournisseur
    • LOGIN_CONFIG_FILE_PATH : chemin d'accès à un fichier de configuration que vous spécifiez, par exemple login.json

    Le fichier contient les points de terminaison utilisés par gcloud CLI pour activer le flux d'authentification via le navigateur et définir l'audience sur le fournisseur d'identité configuré dans le fournisseur de pool d'identités de personnel. Votre fichier ne contient aucune information confidentielle.

    La sortie ressemble à ceci :

    {
      "type": "external_account_authorized_user_login_config",
      "audience": "//iam.googleapis.com/locations/global/workforcePools/WORKFORCE_POOL_ID/providers/WORKFORCE_PROVIDER_ID",
      "auth_url": "https://auth.cloud.google/authorize",
      "token_url": "https://sts.googleapis.com/v1/oauthtoken",
      "token_info_url": "https://sts.googleapis.com/v1/introspect"
    }

    Pour empêcher gcloud auth login d'utiliser automatiquement ce fichier de configuration, vous pouvez le désactiver en exécutant gcloud config unset auth/login_config_file.

    Pour vous authentifier à l'aide de l'authentification de connexion basée sur le navigateur, vous pouvez utiliser l'une des méthodes suivantes :

    • Si vous avez utilisé l'option --activate lors de la création du fichier de configuration ou si vous avez activé le fichier de configuration avec la commande gcloud config set auth/login_config_file, gcloud CLI va utiliser automatiquement votre fichier de configuration :

      gcloud auth login
    • Pour vous connecter en spécifiant l'emplacement du fichier de configuration, exécutez la commande suivante :

      gcloud auth login --login-config=LOGIN_CONFIG_FILE_PATH
    • Pour utiliser une variable d'environnement afin de spécifier l'emplacement du fichier de configuration, définissez CLOUDSDK_AUTH_LOGIN_CONFIG_FILE sur le chemin d'accès de la configuration.

    Pour arrêter d'utiliser le fichier de configuration de connexion, procédez comme suit :

    • Si vous avez utilisé l'option --activate lors de la création du fichier de configuration ou si vous avez activé le fichier de configuration avec la commande gcloud config set auth/login_config_file, vous devez exécuter la commande suivante pour le désactiver :

      gcloud config unset auth/login_config_file
    • Si elle est définie, effacez la variable d'environnement CLOUDSDK_AUTH_LOGIN_CONFIG_FILE.

    Connexion à gcloud CLI sans interface graphique

    Pour vous connecter à PingOne AIC avec gcloud CLI à l'aide du protocole SAML, procédez comme suit :

    1. Connectez un utilisateur à votre application PingOne AIC et obtenez la réponse SAML.
    2. Enregistrez la réponse SAML renvoyée par PingOne AIC dans un emplacement sécurisé sur votre ordinateur local. Stockez le chemin d'accès dans une variable d'environnement, par exemple SAML_ASSERTION_PATH=/tmp/saml_assertion.xml.
    3. Générez un fichier de configuration :

      gcloud iam workforce-pools create-cred-config \
          locations/global/workforcePools/WORKFORCE_POOL_ID/providers/WORKFORCE_PROVIDER_ID \
          --subject-token-type=urn:ietf:params:oauth:token-type:saml2 \
          --credential-source-file=SAML_ASSERTION_PATH \
          --workforce-pool-user-project=PROJECT_ID \
          --output-file=config.json
      

      Remplacez les éléments suivants :

      • SAML_ASSERTION_PATH : chemin d'accès du fichier d'assertion SAML.
      • PROJECT_ID : ID du projet.
    4. Le fichier de configuration généré se présente comme suit :

      {
        "type": "external_account",
        "audience": "//iam.googleapis.com/locations/global/workforcePools/WORKFORCE_POOL_ID/providers/WORKFORCE_PROVIDER_ID",
        "subject_token_type": "urn:ietf:params:oauth:token-type:saml2",
        "token_url": "https://sts.googleapis.com/v1/token",
        "credential_source": {
          "file": "SAML_ASSERTION_PATH"
        },
        "workforce_pool_user_project": "PROJECT_ID"
      }
      
    5. Pour vous connecter à gcloud CLI à l'aide de l'échange de jetons, exécutez la commande suivante :

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

      gcloud échange ensuite de manière transparente vos identifiants PingOne AIC contre des jetons d'accès Google Cloud temporaires, ce qui vous permet d'effectuer d'autres appels gcloud vers Google Cloud. Le résultat ressemble à ce qui suit :

      Authenticated with external account user credentials for: [principal://iam.googleapis.com/locations/global/workforcePools/WORKFORCE_POOL_ID/subject/USER_ID].

    6. Pour répertorier les comptes avec identifiants et le compte actif, exécutez la commande suivante :

      gcloud auth list
      

    Tester l'accès

    Vous pouvez accéder aux services Google Cloud compatibles avec la fédération des identités des employés auxquels vous avez accès. Plus tôt dans ce guide, vous avez accordé le rôle Administrateur de l'espace de stockage à toutes les identités d'un service ou d'un groupe spécifique pour le projet TEST_PROJECT_ID. Vous pouvez tester l'accès en répertoriant les buckets Cloud Storage.

    Connexion à la console (fédéré)

    Pour vérifier votre accès dans la console (fédérée), procédez comme suit :

    1. Accédez à la page Cloud Storage.
    2. Vérifiez que vous pouvez voir la liste des buckets existants pour le projet TEST_PROJECT_ID.

    CLI gcloud

    Pour répertorier les buckets et les objets Cloud Storage du projet auquel vous avez accès, exécutez la commande suivante :

    gcloud alpha storage ls --project="TEST_PROJECT_ID"
    

    Le compte principal doit disposer de l'autorisation serviceusage.services.use sur le projet défini dans la session gcloud CLI : PROJECT_ID.

    Étapes suivantes