Mapper des identités externes

Les entreprises gèrent généralement les identités (utilisateurs et groupes d'utilisateurs) à l'aide d'un fournisseur d'identité (IdP). Toutefois, les applications personnalisées qu'une entreprise a développées en interne peuvent permettre aux clients de créer des groupes d'utilisateurs définis localement dans cette application. Ces groupes d'utilisateurs ou ID utilisateur secondaires spécifiques à une application sont appelés identités externes.

Pourquoi configurer le mappage d'identité ?

Pour vous assurer que Google peut appliquer correctement le contrôle des accès, mappez vos identités IdP à toutes les identités externes des applications personnalisées que vous prévoyez d'utiliser avec Gemini Enterprise.

Pour appliquer le contrôle des accès aux résultats des applications, Google utilise l'IdP comme source de référence pour déterminer les données auxquelles vos utilisateurs ont accès. Les entreprises connectent souvent leur IdP à d'autres solutions SaaS afin qu'un employé puisse utiliser un seul ensemble d'identifiants d'entreprise pour se connecter et accéder à toutes les ressources de l'entreprise.

Si vous avez défini des identités externes via des applications que vous prévoyez de connecter à votre application (par exemple, des applications personnalisées), votre IdP n'est pas la seule source fiable pour le contrôle des accès.

Par exemple, supposons que "JaneDoe" existe dans l'organisation "Example Organization", avec le domaine "example.com". L'ID dans l'IdP est défini comme "JaneDoe@example.com". Le même utilisateur possède un ID distinct dans une application personnalisée ("JDoe"). Il est possible que le FdI ne connaisse pas cet ID. Par conséquent, Gemini Enterprise ne reçoit pas d'informations sur les ID d'application personnalisés via l'IdP.

Dans Gemini Enterprise, les mappages d'identité sont stockés dans un magasin de mappages d'identité que vous créez et dans lequel vous importez les mappages. Si vous prévoyez d'utiliser un connecteur personnalisé, vous pouvez associer le magasin de mappage d'identité au data store du connecteur personnalisé, puis mettre à jour les métadonnées ACL de votre data store avec des informations sur vos identités externes.

Avant de commencer

Avant de configurer le mappage des identités, connectez votre fournisseur d'identité à votre projet Google Cloud .

Préparer les entrées de mappage d'identité

Préparez les entrées de mappage d'identité pour l'importation. Les mappages d'identité doivent être mis en forme comme dans l'exemple suivant :

{
  "identity_mapping_entries": [
    {
      "external_identity": "u1",
      "user_id": "user1@example.com"
    },
    {
      "external_identity": "u2",
      "user_id": "user2@example.com"
    },
    {
      "external_identity": "gABC",
      "group_id": "groupABC@example.com"
    }
  ]
}

Par exemple, le graphique suivant représente un exemple d'appartenance à un groupe d'utilisateurs, où Ext représente les groupes externes. Ce graphique montre un exemple de relation entre des groupes externes et des utilisateurs et groupes IdP.

Relation entre les identités externes et les utilisateurs et groupes du fournisseur d'identité.

Le graphique d'appartenance à un groupe d'utilisateurs aurait le mappage suivant :

{
  "identity_mapping_entries": [
    {
      "external_identity": "Ext1",
      "user_id": "IDPUser1@example.com"
    },
    {
      "external_identity": "Ext2",
      "user_id": "IDPUser1@example.com"
    },
    {
      "external_identity": "Ext2",
      "user_id": "IDPUser2@example.com"
    },
    {
      "external_identity": "Ext3",
      "user_id": "IDPUser2@example.com"
    },
    {
      "external_identity": "Ext3",
      "group_id": "IDPGroup1@example.com"
    },
    {
      "external_identity": "Ext3",
      "group_id": "IDPGroup2@example.com"
    }
  ]
}

Les appartenances à des identités imbriquées, où les identités externes ont des identités enfants, doivent être aplaties.

Google suppose que le connecteur envoie un ID principal pour une identité externe. Par exemple, importez l'ID du groupe au lieu de son nom, car le nom peut être modifié au cours de la durée de vie du groupe dans l'application personnalisée.

Configurer le mappage d'identité

Suivez les procédures ci-dessous pour configurer le mappage des identités dans Gemini Enterprise entre votre fournisseur d'identité et vos identités externes. Dans les étapes suivantes, vous allez créer un magasin de mappage d'identité et importer les mappages d'identité que vous avez préparés. Si vous prévoyez d'utiliser un connecteur personnalisé, vous devez également créer un datastore lié au magasin de mappage des identités.

Créer un magasin de mappage d'identité

La première étape consiste à configurer un magasin de mappage d'identité. Il s'agit de la ressource parente dans laquelle tous les mappages d'identité sont stockés.

Lorsque vous créez le magasin de mappage des identités, il récupère automatiquement la configuration de l'IdP à partir de l'IdP que vous avez associé à votre projet Gemini Enterprise.

  1. Pour créer un magasin de mappage des identités, exécutez la commande suivante à l'aide de la méthode identityMappingStores.create :

    curl -X POST \
    -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
    -H "Content-Type: application/json" \
    -H "X-Goog-User-Project: PROJECT_ID" \
    "https://discoveryengine.googleapis.com/v1/projects/PROJECT_ID/locations/global/identityMappingStores?identityMappingStoreId=IDENTITY_MAPPING_STORE_ID" \
    -d '{
      "name": "projects/PROJECT_ID/locations/global/identityMappingStores/IDENTITY_MAPPING_STORE_ID"
    }'
    

    Remplacez les éléments suivants :

    • PROJECT_ID : par l'ID du projet.
    • IDENTITY_MAPPING_STORE_ID : ID unique du magasin de mappage des identités. Par exemple : test-id-mapping-store.

Importer des mappages d'identité

Après avoir créé le magasin de mappages d'identité, importez les entrées de mappages d'identité que vous avez préparées.

  1. Pour importer vos mappages d'identité, exécutez la commande suivante à l'aide de la méthode importIdentityMappings :

    curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" -H "x-goog-user-project: PROJECT_ID" \
    "https://discoveryengine.googleapis.com/v1/projects/PROJECT_ID/locations/global/identityMappingStores/IDENTITY_MAPPING_STORE_ID:importIdentityMappings" \
    -d '{"inline_source" : IDENTITY_MAPPINGS_JSON}'
    

    Remplacez les éléments suivants :

    • PROJECT_ID : par l'ID du projet.
    • IDENTITY_MAPPING_STORE_ID : ID unique du magasin de mappage des identités.
    • IDENTITY_MAPPINGS_JSON : mappages d'identité préparés au format JSON.
  2. Ensuite, si vous prévoyez de créer un connecteur personnalisé et d'utiliser des identités externes, accédez à Associer des data stores personnalisés au magasin de mappage d'identité. Sinon, passez à Mettre à jour les métadonnées des LCA.

Associer des data stores personnalisés au data store de mappage des identités

Cette procédure n'est nécessaire que si vous créez un connecteur personnalisé. Si vous ne créez pas de connecteur personnalisé, ignorez cette étape.

Pour les connecteurs personnalisés, le magasin de mappage d'identité doit être lié au magasin de données avant qu'une identité externe puisse être associée à ses documents. La définition de ce champ n'est autorisée que lors de la création du data store.

  1. Pour associer un data store au magasin de mappage des identités, spécifiez identity_mapping_store lors de la création du data store à l'aide de la méthode Datastores.create.

    curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json"  \
    -H "X-Goog-User-Project: PROJECT_ID" \
    "https://discoveryengine.googleapis.com/v1/projects/PROJECT_ID/locations/global/collections/default_collection/dataStores?dataStoreId=DATA_STORE_ID \
    -d '{
        ...
        "identity_mapping_store": "IDENTITY_MAPPING_STORE_NAME"
    }'
    

    Remplacez les éléments suivants :

    • PROJECT_ID : par l'ID du projet.
    • DATA_STORE_ID : ID du data store que vous souhaitez créer. Cet ID ne peut contenir que des lettres minuscules, des chiffres, des traits de soulignement et des traits d'union.
    • IDENTITY_MAPPING_STORE_NAME : nom complet de la ressource du magasin de mappage des identités. Par exemple : projects/exampleproject/locations/global/identityMappingStores/test-id-mapping-store. Une fois le data store créé, vous ne pourrez plus modifier ce nom.

Ajouter des métadonnées de LCA

Incluez les métadonnées des LCA dans l'objet AclInfo de vos documents.

Lorsqu'un utilisateur envoie une requête de recherche et que des documents dont les métadonnées de LCA incluent des identités externes sont récupérés, ces identités externes sont évaluées. Si l'identité de l'utilisateur (groupID ou userID) est mappée à une identité externe (externalEntityId) associée à un document, l'utilisateur a accès à ce document.

Par exemple, supposons que vous ayez créé un connecteur personnalisé pour Jira. Un problème Jira donné est accessible par certains utilisateurs et groupes IdP, ainsi que par un rôle d'administrateur. Pour que ce problème soit accessible à ces personnes dans les résultats de recherche, vous pouvez créer un magasin de mappage d'identité et mapper les utilisateurs et les groupes IdP à des identités externes spécifiques à Jira. Associez le magasin de mappage d'identité à votre data store Jira. Créez ensuite des documents dans vos datastores Jira avec aclInfo configuré avec les utilisateurs et groupes IdP, ainsi que les identités externes qui doivent avoir accès à ces documents.

Pour mettre à jour les métadonnées de votre LCA avec des informations sur vos identités externes, utilisez le format suivant pour spécifier les identités externes, ainsi que les ID utilisateur et de groupe associés.

{
  "aclInfo": {
    "readers": [
      {
        "principals": [
          {
            "groupId": "group_1"
          },
          {
            "userId": "user_1"
          },
          {
            "externalEntityId": "external_id1"
          }

        ]
      }
    ]
  }
}

Pour en savoir plus sur la mise à jour des métadonnées des LCA, consultez Configurer une source de données avec contrôle des accès.

Gérer les mappages d'identité

Vous pouvez lister les mappages d'identité dans un magasin d'identités ou purger un magasin d'identités en les définissant via une source intégrée ou en utilisant une condition de filtre.

Voici les tâches de gestion disponibles pour le mappage d'identité :

Lister les mappages d'identité

  1. Pour lister les mappages d'identité, exécutez la commande suivante à l'aide de la méthode listIdentityMappings :

    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H  "Content-Type: application/json" \
    -H "x-goog-user-project: PROJECT_ID" \
    "https://discoveryengine.googleapis.com/v1/projects/PROJECT_ID/locations/global/identityMappingStores/IDENTITY_MAPPING_STORE_ID:listIdentityMappings?page_size=PAGE_SIZE&page_token=PAGE_TOKEN"
    

    Remplacez les éléments suivants :

    • PROJECT_ID : par l'ID du projet.
    • PAGE_SIZE : nombre maximal de magasins de mappage d'identité à renvoyer. Si aucune valeur n'est spécifiée, la valeur par défaut est 100. La valeur maximale autorisée est de 1 000. Les valeurs supérieures à 1 000 sont réduites à 1 000.
    • PAGE_TOKEN : jeton de page reçu d'un appel ListIdentityMappingStores précédent. Fournissez-le pour récupérer la page suivante.

Purger à l'aide d'une source intégrée

Vous pouvez supprimer des entrées spécifiques d'un magasin de mappage d'identité en fournissant un fichier JSON indiquant les identités à supprimer.

  1. Pour supprimer les mappages d'identité à l'aide d'une source intégrée, exécutez la commande suivante à l'aide de la méthode purgeIdentityMappings :

    curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    -H "x-goog-user-project: PROJECT_ID" \
    "https://discoveryengine.googleapis.com/v1/projects/PROJECT_ID/locations/global/identityMappingStores/IDENTITY_MAPPING_STORE_ID:purgeIdentityMappings" \
    -d '{"inline_source" : IDENTITY_MAPPINGS_JSON}'
    

    Remplacez les éléments suivants :

    • PROJECT_ID : par l'ID du projet.
    • IDENTITY_MAPPING_STORE_ID : ID unique du magasin de mappage des identités.
    • IDENTITY_MAPPING_STORE_NAME : nom du magasin de mappage des identités.
    • IDENTITY_MAPPINGS_JSON : mappages d'identité à supprimer.

Supprimer définitivement des données à l'aide d'une condition de filtre

Vous pouvez supprimer des entrées spécifiques d'un magasin de mappage d'identité en filtrant les entrées par heure de mise à jour, identité externe ou toutes les entrées.

  1. Pour supprimer les mappages d'identité à l'aide d'une condition de filtre, exécutez la commande suivante à l'aide de la méthode purgeIdentityMappings :

    curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    -H "x-goog-user-project: PROJECT_ID" \
    "https://discoveryengine.googleapis.com/v1/projects/PROJECT_ID/locations/global/identityMappingStores/IDENTITY_MAPPING_STORE_ID:purgeIdentityMappings" \
    -d '{"identity_mapping_store":"IDENTITY_MAPPING_STORE_NAME", "filter": "FILTER_CONDITION"}'
    

    Remplacez les éléments suivants :

    • PROJECT_ID : par l'ID du projet.
    • IDENTITY_MAPPING_STORE_ID : ID unique du magasin de mappage des identités.
    • IDENTITY_MAPPING_STORE_NAME : nom du magasin de mappage des identités.
    • FILTER_CONDITION : l'un des types de filtres suivants :
      • Modifier l'heure. Par exemple : update_time > "2012-04-23T18:25:43.511Z" AND update_time < "2012-04-23T18:30:43.511Z">
      • Identité externe. Par exemple : external_id = "id1"
      • Tous les mappages d'identité. Par exemple : *

Gérer les magasins de mappage d'identité

Vous pouvez obtenir, supprimer, lister et vider les magasins de mappage d'identité.

Obtenir le store de mappage d'identité

  1. Pour obtenir un magasin de mappage d'identité, exécutez la commande suivante à l'aide de la méthode identityMappingStores.get :

    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    -H "X-Goog-User-Project: PROJECT_ID" \
    "https://discoveryengine.googleapis.com/v1/projects/PROJECT_ID/locations/global/identityMappingStores/IDENTITY_MAPPING_STORE_ID"
    

    Remplacez les éléments suivants :

    • PROJECT_ID : par l'ID du projet.
    • IDENTITY_MAPPING_STORE_ID : ID unique du magasin de mappage des identités.
    • IDENTITY_MAPPING_STORE_NAME : nom du magasin de mappage des identités.

Lister les magasins de mappage d'identité

  1. Pour lister les magasins de mappage d'identité, exécutez la commande suivante à l'aide de la méthode identityMappingStores.list :

    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H  "Content-Type: application/json" \
    -H "x-goog-user-project: PROJECT_ID" \
    "https://discoveryengine.googleapis.com/v1/projects/PROJECT_ID/locations/global/identityMappingStores?page_size=PAGE_SIZE&page_token=PAGE_TOKEN"
    

    Remplacez les éléments suivants :

    • PROJECT_ID : par l'ID du projet.
    • PAGE_SIZE : nombre maximal de magasins de mappage d'identité à renvoyer. Si aucune valeur n'est spécifiée, la valeur par défaut est 100. La valeur maximale autorisée est de 1 000. Les valeurs supérieures à 1 000 sont réduites à 1 000.
    • PAGE_TOKEN : jeton de page reçu d'un appel ListIdentityMappingStores précédent. Fournissez-le pour récupérer la page suivante.

Supprimer des magasins de mappages d'identité

Pour supprimer un magasin de mappages d'identité, il ne doit pas être lié à un data store et ne doit contenir aucun mappage d'identité.

  1. Pour supprimer un magasin de mappage d'identité, exécutez la commande suivante à l'aide de la méthode identityMappingStores.delete :

    curl -X DELETE \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    -H "X-Goog-User-Project: PROJECT_ID" \
    "https://discoveryengine.googleapis.com/v1/projects/PROJECT_ID/locations/global/identityMappingStores/IDENTITY_MAPPING_STORE_ID"
    

    Remplacez les éléments suivants :

    • PROJECT_ID : par l'ID du projet.
    • IDENTITY_MAPPING_STORE_ID : ID unique du magasin de mappage des identités.
    • IDENTITY_MAPPING_STORE_NAME : nom du magasin de mappage des identités.