Configurer SCIM dans Okta

Ce document explique comment configurer un locataire SCIM dans un pool d'identités des employés. Pour en savoir plus sur SCIM, consultez Provisionnement SCIM pour la fédération des identités des employés.

Chaque pool d'identités de personnel n'est compatible qu'avec un seul locataire SCIM. Pour configurer un nouveau locataire SCIM dans un pool qui en possède déjà un, vous devez d'abord supprimer définitivement le locataire existant.

L'option --claim-mapping d'un locataire SCIM ne peut contenir que des expressions CEL (Common Expression Language) spécifiques. Pour connaître les expressions acceptées, consultez Mappage de revendication.

Assurez-vous que votre IdP fournit des valeurs uniques et non vides pour les attributs mappés à google.subject et google.group. La synchronisation des valeurs en double échoue avec une erreur HTTP 409 Conflict, et les valeurs nulles ou vides échouent avec une erreur HTTP 400 Bad Request. Pour en savoir plus, consultez Compatibilité avec SCIM.

Pour configurer le système de gestion des identités interdomaines (SCIM), procédez comme suit :

  1. Configurer un locataire et un jeton SCIM dans Google Cloud
  2. Configurer SCIM dans Okta
  3. Mettre à jour le fournisseur pour activer SCIM
  4. Vérifier la synchronisation SCIM

Configurer un locataire et un jeton SCIM dans Google Cloud

Pour configurer un locataire SCIM dans Google Cloud, procédez comme suit :

  1. Créer un locataire SCIM.

        gcloud iam workforce-pools providers scim-tenants create SCIM_TENANT_ID \
            --workforce-pool="WORKFORCE_POOL_ID" \
            --provider="PROVIDER_ID" \
            --display-name="SCIM_TENANT_DISPLAY_NAME" \
            --description="SCIM_TENANT_DESCRIPTION" \
            --claim-mapping="CLAIM_MAPPING" \
            --location="global"
        

    Remplacez les éléments suivants :

    • SCIM_TENANT_ID : ID de votre locataire SCIM.
    • WORKFORCE_POOL_ID : ID du pool d'employés que vous avez créé précédemment dans ce document.
    • PROVIDER_ID : ID du fournisseur de pool d'identités de personnel que vous avez créé précédemment dans ce document.
    • SCIM_TENANT_DISPLAY_NAME : nom à afficher pour votre locataire SCIM.
    • SCIM_TENANT_DESCRIPTION : description de votre locataire SCIM.
    • CLAIM_MAPPING : liste de mappages d'attributs séparés par une virgule. Pour obtenir la liste complète des attributs de mappage, consultez Mappage de revendication. Le mappage suivant est recommandé pour Gemini Enterprise :
      google.subject=user.emails[0].value.lowerAscii(),google.group=group.displayName

      L'attribut google.subject que vous mappez dans le locataire SCIM doit faire référence de manière unique aux mêmes identités que celles mappées dans l'attribut google.subject du fournisseur de pool d'identités de personnel à l'aide de l'option --attribute-mapping. Une fois le locataire SCIM créé, vous ne pouvez plus modifier le mappage de revendication. Pour le remplacer, vous pouvez supprimer définitivement le locataire SCIM et en créer un autre immédiatement. Pour en savoir plus sur les points à prendre en compte lors de l'utilisation de SCIM, consultez Compatibilité avec SCIM.

  2. Une fois la commande terminée, procédez comme suit :

    1. Dans le champ baseUri du résultat, enregistrez l'URI complet, au format https://iamscim.googleapis.com/v1alpha1/tenants/SCIM_TENANT_UID. Vous devez fournir cet URI à votre IdP.
    2. De plus, à partir de l'URI, n'enregistrez que SCIM_TENANT_UID. Vous aurez besoin de cet UID pour définir une stratégie d'autorisation IAM sur le locataire SCIM plus loin dans ce document.
  3. Créez un jeton SCIM :

        gcloud iam workforce-pools providers scim-tenants tokens create SCIM_TOKEN_ID \
            --display-name DISPLAY_NAME \
            --scim-tenant SCIM_TENANT_ID \
            --workforce-pool WORKFORCE_POOL_ID \
            --provider PROVIDER_ID \
            --location global
        

    Remplacez les éléments suivants :

    • SCIM_TOKEN_ID : ID du jeton SCIM
    • DISPLAY_NAME : nom à afficher du jeton SCIM
    • WORKFORCE_POOL_ID : ID du pool d'employés
    • SCIM_TENANT_ID : ID du locataire SCIM
    • PROVIDER_ID : ID du fournisseur de pools d'identités de personnel
  4. Une fois la commande gcloud iam workforce-pools providers scim-tenants tokens create terminée, procédez comme suit :

    1. Dans le résultat, enregistrez la valeur de SCIM_TOKEN dans le champ securityToken. Vous devez fournir ce jeton de sécurité à votre IdP. Le jeton de sécurité ne s'affiche que dans ce résultat. S'il est perdu, vous devez créer un jeton SCIM.

    2. Pour vérifier si SCIM_TOKEN est rejeté par votre règle d'administration, exécutez la commande suivante :

      curl -v -H "Authorization: Bearer SCIM_TOKEN"  https://iamscim.googleapis.com/v1alpha1/tenants/SCIM_TENANT_UID/Users

      Si la commande échoue avec une erreur liée aux autorisations, exécutez gcloud organizations add-iam-policy-binding, comme décrit dans une étape ultérieure. Si la commande réussit, vous pouvez ignorer cette étape.

  5. Définissez une stratégie d'autorisation IAM sur le locataire et le jeton SCIM. Si la commande curl d'une étape précédente a échoué avec une erreur liée aux autorisations, vous devez exécuter la commande suivante :

        gcloud organizations add-iam-policy-binding ORGANIZATION_ID \
            --member=serviceAccount:SERVICE_AGENT_EMAIL \
            --role roles/iam.scimSyncer
        

    Remplacez les éléments suivants :

    • ORGANIZATION_ID : ID de l'organisation.
    • SERVICE_AGENT_EMAIL : adresse e-mail de l'agent de service. L'adresse e-mail est au format suivant : o-ORGANIZATION_ID-SCIM_TENANT_UID@gcp-sa-iamscim.iam.gserviceaccount.com. SCIM_TENANT_UID est renvoyé lorsque vous créez le locataire SCIM.

Lorsque vous provisionnez des groupes dans votre IdP, assurez-vous que le nom à afficher de chaque groupe, tel qu'il est indiqué dans le champ displayName, est unique au sein d'un locataire SCIM. Pour en savoir plus sur les groupes et SCIM dans Microsoft Entra ID, consultez Groupes.

Configurer SCIM dans Okta

Pour configurer SCIM dans Okta, procédez comme suit dans votre application Okta existante :

  1. Connectez-vous à la console d'administration Okta.
  2. Accédez à Applications > Applications.
  3. Sélectionnez ou créez votre application :

    • Si vous souhaitez sélectionner une application existante, procédez comme suit :

      1. Cliquez sur le nom de l'application que vous avez créée à l'aide du modèle de fédération des identités des employés Google Cloud.
      2. Dans l'onglet Général, procédez comme suit :

        1. Dans le volet Paramètres de l'application, cliquez sur Modifier.
        2. Dans le champ Locataire, saisissez l'ID de locataire obtenu à partir de la gcloud CLI.
        3. Cliquez sur OK.
    • Si vous souhaitez créer une application, procédez comme suit :

      1. Cliquez sur Parcourir le catalogue d'applications.
      2. Dans le champ Rechercher, saisissez Google Cloud Workforce Identity Federation, puis sélectionnez l'intégration Google Cloud Workforce Identity Federation dans les résultats.
      3. Cliquez sur Ajouter une intégration.

        1. Dans le champ Application, saisissez le nom de votre application.
        2. Dans le champ Locataire, saisissez l'ID de locataire obtenu à partir de la gcloud CLI.
        3. Cliquez sur OK.
  4. Dans l'onglet Provisioning, procédez comme suit :

    1. Dans le volet Intégration, cliquez sur Modifier.

      1. Dans le champ Jeton d'API, saisissez le jeton SCIM que vous avez obtenu auprès de Google Cloud.
      2. Pour confirmer la validité du jeton d'API, cliquez sur Tester les identifiants.
      3. Sélectionnez Importer des groupes.
      4. Cliquez sur Enregistrer.
    2. Dans le volet Vers l'application, cliquez sur Modifier.

      1. Sélectionnez Créer des utilisateurs, Mettre à jour les attributs utilisateur et Désactiver des utilisateurs.
      2. Cliquez sur Enregistrer.

Mettre à jour le fournisseur pour activer SCIM

Pour activer SCIM pour un fournisseur, définissez l'option --scim-usage en fonction de votre cible de produit :

Activer SCIM pour les groupes (Gemini Enterprise)

OIDC

      gcloud iam workforce-pools providers update-oidc PROVIDER_ID \
          --workforce-pool=WORKFORCE_POOL_ID \
          --location=global \
          --scim-usage=enabled-for-groups
    

Remplacez les éléments suivants :

  • PROVIDER_ID : ID du fournisseur de pools d'identités de personnel
  • WORKFORCE_POOL_ID : ID du pool d'employés

SAML

      gcloud iam workforce-pools providers update-saml PROVIDER_ID \
          --workforce-pool=WORKFORCE_POOL_ID \
          --location=global \
          --scim-usage=enabled-for-groups
    

Remplacez les éléments suivants :

  • PROVIDER_ID : ID du fournisseur de pools d'identités de personnel
  • WORKFORCE_POOL_ID : ID du pool d'employés

Activer SCIM pour les utilisateurs et les groupes (Looker) (preview)

OIDC

      gcloud iam workforce-pools providers update-oidc PROVIDER_ID \
          --workforce-pool=WORKFORCE_POOL_ID \
          --location=global \
          --scim-usage=enabled-for-users-groups
    

Remplacez les éléments suivants :

  • PROVIDER_ID : ID du fournisseur de pools d'identités de personnel
  • WORKFORCE_POOL_ID : ID du pool d'employés

SAML

      gcloud iam workforce-pools providers update-saml PROVIDER_ID \
          --workforce-pool=WORKFORCE_POOL_ID \
          --location=global \
          --scim-usage=enabled-for-users-groups
    

Remplacez les éléments suivants :

  • PROVIDER_ID : ID du fournisseur de pools d'identités de personnel
  • WORKFORCE_POOL_ID : ID du pool d'employés

Pour vérifier la synchronisation SCIM, consultez Vérifier la synchronisation SCIM.

Mappage de revendication

Lorsque vous configurez SCIM, vous définissez des mappages de revendications (--claim-mapping) dans le locataire SCIM pour mapper les attributs d'utilisateur et de groupe SCIM aux attributs Google.

Attributs Google Cloud compatibles pour le mappage de revendications

Le tableau suivant liste les attributs Google Cloud que vous pouvez mapper dans votre locataire SCIM (--claim-mapping) à l'aide du langage CEL (Common Expression Language) :

AttributGoogle Cloud Exigence Description Expressions et limites acceptées
google.subject Obligatoire

Identifiant unique de l'utilisateur qui s'authentifie.

L'attribut IdP sous-jacent utilisé pour renseigner google.subject doit être identique dans le mappage du fournisseur (--attribute-mapping) et dans le locataire SCIM (--claim-mapping). Si ces mappages ne sont pas cohérents, les utilisateurs pourront peut-être se connecter, mais ne seront pas reconnus comme membres des groupes provisionnés par SCIM.

Limité aux expressions de base suivantes (ou avec .lowerAscii()) :
  • user.externalId
  • user.userName
  • user.emails[0].value

Longueur maximale : 127 octets.

Remarque : Ce mappage est immuable une fois le locataire SCIM créé. Pour le modifier, vous devez supprimer définitivement le locataire SCIM et le recréer.

google.group Obligatoire pour les groupes SCIM Identifiant unique de l'appartenance à un groupe synchronisée à l'aide de SCIM. Limité aux expressions de base suivantes (ou avec .lowerAscii()) :
  • group.externalId
  • group.displayName

Remarque : Ce mappage est immuable une fois le locataire SCIM créé. Pour le modifier, vous devez supprimer définitivement le locataire SCIM et le recréer.

google.display_name Facultatif Attribut qui définit le nom de l'utilisateur connecté dans la console Google Cloud . Il ne peut pas être utilisé dans les stratégies d'autorisation IAM. Mappe vers un attribut de chaîne (tel que user.displayName ou user.name.formatted). Longueur maximale : 100 octets.
google.profile_photo Facultatif URL de la vignette de la photo de l'utilisateur, qui est visible en tant que photo de profil dans la console Google Cloud . Il ne peut pas être utilisé dans les stratégies d'autorisation IAM. Doit correspondre à une chaîne d'URL valide (par exemple, user.photos.filter(p, p.type == 'thumbnail')[0].value ou user.photos[0].value).
google.email Facultatif Attribut utilisé pour mapper les adresses e-mail du fournisseur d'identité aux produits intégrés à l'aide de l'intégration du client OAuth de la fédération des identités des employés. Il ne peut pas être utilisé dans les stratégies d'autorisation IAM. Mappe vers un attribut d'adresse e-mail (tel que user.emails.filter(e, e.type == 'work')[0].value ou user.emails[0].value).
google.posix_username Facultatif Chaîne de nom d'utilisateur unique compatible avec POSIX utilisée pour SSH dans le navigateur et OS Login avec la fédération des identités des employés. Cet attribut ne peut pas être utilisé dans les stratégies d'autorisation IAM. La longueur ne doit pas dépasser 32 caractères.
attribute.KEY Facultatif

Attributs personnalisés de votre IdP que vous pouvez utiliser pour définir votre stratégie d'autorisation dans une stratégie d'autorisation IAM. Remplacez KEY par le nom d'attribut que vous souhaitez utiliser.

Par exemple, vous pouvez définir un attribut personnalisé tel que costcenter = "1234" et y faire référence à l'aide de principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workforcePools/WORKFORCE_POOL_ID/attribute.costcenter/1234. Accorder l'accès à cet identifiant de principal permet d'accorder l'accès à toutes les identités configurées dans l'IdP avec ce centre de coûts.

Jusqu'à 50 règles de mappage d'attributs personnalisés. Taille maximale par règle : 256 caractères.

Exemples de mappages pour la cohérence des sujets

Comme décrit dans Attributs compatibles pour le mappage de revendications, l'attribut IdP sous-jacent utilisé pour renseigner google.subject doit être identique dans le mappage du fournisseur (--attribute-mapping) et le locataire SCIM (--claim-mapping). Le tableau suivant présente des exemples de référence pour Okta :

Attribut Google Mappage du fournisseur de pool d'identités de personnel Mappage de locataire SCIM
google.subject assertion.sub user.externalId
google.subject assertion.subject user.userName
google.subject assertion.subject.lowerAscii() user.userName.lowerAscii()
google.subject assertion.preferred_username user.userName
google.subject assertion.preferred_username.lowerAscii() user.userName.lowerAscii()
google.subject assertion.email user.emails[0].value
google.subject assertion.email.lowerAscii() user.emails[0].value.lowerAscii()

Vérifier la synchronisation SCIM

Après avoir configuré SCIM, vous pouvez utiliser curl pour interroger le point de terminaison du service IAM SCIM (iamscim.googleapis.com) et vérifier que les utilisateurs et les groupes sont synchronisés avec Google Cloud. Ces commandes nécessitent un jeton SCIM valide et l'UID de votre locataire SCIM. Le service iamscim.googleapis.com implémente le protocole SCIM 2.0 (RFC 7644). Pour en savoir plus sur les points de terminaison compatibles, les filtres de requête et les limites, consultez Points de terminaison compatibles et non compatibles et Limites des fonctionnalités du protocole.

Vérifier la synchronisation des utilisateurs

Pour vérifier qu'un utilisateur a bien été synchronisé, recherchez son userName à l'aide du filtre suivant :

curl -H "Authorization: Bearer SCIM_TOKEN" \
  "https://iamscim.googleapis.com/v1alpha1/tenants/SCIM_TENANT_UID/Users?filter=userName%20eq%20%22USER_NAME%22"

Exemple de réponse :

{
  "schemas": ["urn:ietf:params:scim:api:messages:2.0:ListResponse"],
  "totalResults": 1,
  "Resources": [
    {
      "id": "USER_ID",
      "userName": "USER_NAME",
      ...
    }
  ]
}

Vérifier la synchronisation des groupes

Pour vérifier qu'un groupe a bien été synchronisé, recherchez son displayName à l'aide du filtre suivant :

curl -H "Authorization: Bearer SCIM_TOKEN" \
  "https://iamscim.googleapis.com/v1alpha1/tenants/SCIM_TENANT_UID/Groups?filter=displayName%20eq%20%22GROUP_NAME%22"

Exemple de réponse :

{
  "schemas": ["urn:ietf:params:scim:api:messages:2.0:ListResponse"],
  "totalResults": 1,
  "Resources": [
    {
      "id": "GROUP_ID",
      "displayName": "GROUP_NAME",
      ...
    }
  ]
}

Vérifier l'appartenance à un groupe

Pour vérifier si un utilisateur spécifique est membre d'un groupe, utilisez un filtre qui spécifie à la fois l'ID du groupe et l'ID utilisateur.

curl -H "Authorization: Bearer SCIM_TOKEN" \
  "https://iamscim.googleapis.com/v1alpha1/tenants/SCIM_TENANT_UID/Groups?filter=id%20eq%20%22GROUP_ID%22%20and%20members%20eq%20%22USER_ID%22"

Exemple de réponse si l'utilisateur est membre :

{
  "schemas": ["urn:ietf:params:scim:api:messages:2.0:ListResponse"],
  "totalResults": 1,
  "Resources": [
    {
      "id": "GROUP_ID",
      "displayName": "GROUP_NAME",
      ...
    }
  ]
}

Exemple de réponse si l'utilisateur n'est pas membre :

{
  "schemas": ["urn:ietf:params:scim:api:messages:2.0:ListResponse"],
  "totalResults": 0,
  "Resources": []
}

Remarque : Pour obtenir GROUP_ID et USER_ID, recherchez d'abord le groupe et l'utilisateur à l'aide des filtres displayName et userName. Les ID sont renvoyés dans le champ id de la réponse. Remplacez SCIM_TOKEN, SCIM_TENANT_UID, USER_NAME, GROUP_NAME, GROUP_ID et USER_ID par vos valeurs réelles.

Forcer la suppression d'un locataire SCIM

Pour forcer la suppression d'un locataire SCIM, procédez comme suit :

  1. Si --scim-usage=enabled-for-groups ou --scim-usage=enabled-for-users-groups est défini pour votre fournisseur, désactivez-le dans la configuration du fournisseur :

    OIDC

    gcloud iam workforce-pools providers update-oidc PROVIDER_ID \
        --workforce-pool=WORKFORCE_POOL_ID \
        --location=global \
        --scim-usage=SCIM_USAGE_UNSPECIFIED
    

    Remplacez les éléments suivants :

    • PROVIDER_ID : ID du fournisseur de pools d'identités de personnel
    • WORKFORCE_POOL_ID : ID du pool d'employés

    SAML

    gcloud iam workforce-pools providers update-saml PROVIDER_ID \
        --workforce-pool=WORKFORCE_POOL_ID \
        --location=global \
        --scim-usage=SCIM_USAGE_UNSPECIFIED
    

    Remplacez les éléments suivants :

    • PROVIDER_ID : ID du fournisseur de pools d'identités de personnel
    • WORKFORCE_POOL_ID : ID du pool d'employés

  2. Supprimez le locataire SCIM :
    gcloud iam workforce-pools providers scim-tenants delete SCIM_TENANT_ID \
        --workforce-pool=WORKFORCE_POOL_ID \
        --provider=PROVIDER_ID \
        --hard-delete \
        --location=global
    

    Remplacez les éléments suivants :

    • SCIM_TENANT_ID : ID du locataire SCIM à supprimer
    • WORKFORCE_POOL_ID : ID du pool d'employés
    • PROVIDER_ID : ID du fournisseur de pools d'identités de personnel
    Pour en savoir plus sur SCIM, y compris sur la suppression de locataires SCIM, consultez Compatibilité avec SCIM.

Étapes suivantes