Asignar identidades externas

Las empresas suelen gestionar las identidades (usuarios y grupos de usuarios) mediante un proveedor de identidades (IDP). Sin embargo, las aplicaciones personalizadas que una empresa ha creado internamente pueden permitir que los clientes creen nuevos grupos de usuarios definidos localmente en esa aplicación. Estos grupos de usuarios específicos de la aplicación o IDs de usuario secundarios se denominan identidades externas.

¿Por qué configurar el mapeado de identidades?

Para asegurarte de que Google pueda aplicar el control de acceso correctamente, asigna tus identidades de proveedor de identidades a las identidades externas de las aplicaciones personalizadas que quieras usar con Gemini Enterprise.

Para aplicar el control de acceso a los resultados de la aplicación, Google usa el proveedor de identidades como fuente de información fiable para determinar a qué datos tienen acceso tus usuarios. Las empresas suelen conectar su proveedor de identidades a otras soluciones SaaS para que los empleados puedan usar un único conjunto de credenciales corporativas para iniciar sesión y acceder a todos los recursos de la empresa.

Si has definido identidades externas a través de aplicaciones que tienes previsto conectar a tu aplicación (por ejemplo, aplicaciones personalizadas), tu IdP no será la única fuente fiable para el control de acceso.

Por ejemplo, supongamos que "JaneDoe" pertenece a la organización Example, cuyo dominio es "example.com". El ID del proveedor de identidades es "JaneDoe@example.com". El mismo usuario tiene un ID independiente en una aplicación personalizada como "JDoe". Es posible que el IdP no conozca este ID. Por este motivo, Gemini Enterprise no recibe información sobre los IDs de aplicaciones personalizadas a través del proveedor de identidades.

En Gemini Enterprise, los mapeos de identidades se almacenan en un almacén de mapeos de identidades que creas e importas. Si tienes previsto usar un conector personalizado, puedes vincular el almacén de asignación de identidades al almacén de datos del conector personalizado y, a continuación, actualizar los metadatos de la lista de control de acceso del almacén de datos con información sobre tus identidades externas.

Antes de empezar

Antes de configurar la asignación de identidades, conecta tu proveedor de identidades a tu proyecto de Google Cloud .

Preparar entradas de mapeado de identidades

Prepara las entradas del mapeado de identidades para importarlas. Los mapeados de identidades deben tener el formato del siguiente ejemplo:

{
  "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"
    }
  ]
}

Por ejemplo, el siguiente gráfico representa un ejemplo de pertenencia a un grupo de usuarios, donde Ext representa grupos externos. En este gráfico se muestra un ejemplo de relación entre grupos externos y usuarios y grupos de IdP.

Relación de identidad externa con usuarios y grupos de IdP.

Este gráfico de pertenencia a grupos de usuarios tendría la siguiente asignación:

{
  "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"
    }
  ]
}

Las pertenencias a identidades anidadas, en las que las identidades externas tienen identidades secundarias, deben acoplarse.

Google da por hecho que el conector envía un ID principal de una identidad externa. Por ejemplo, importa el ID del grupo en lugar del nombre, ya que el nombre podría cambiar durante la vida útil del grupo en la aplicación personalizada.

Configurar el mapeado de identidades

Sigue los procedimientos que se indican a continuación para configurar la asignación de identidades en Gemini Enterprise entre tu proveedor de identidades y tus identidades externas. En los siguientes pasos, creará un almacén de mapeado de identidades e importará los mapeados de identidades que haya preparado. Si tienes previsto usar un conector personalizado, también crearás un nuevo almacén de datos que esté vinculado al almacén de asignación de identidades.

Crear un almacén de mapeado de identidades

El primer paso es configurar un almacén de mapeo de identidades. Es el recurso principal en el que se almacenan todos los mapeos de identidades.

Cuando creas el almacén de asignación de identidades, se obtiene automáticamente la configuración del proveedor de identidades del proveedor que has conectado a tu proyecto de Gemini Enterprise.

  1. Para crear un almacén de mapeo de identidades, ejecuta el siguiente comando con el método 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"
    }'
    

    Haz los cambios siguientes:

    • PROJECT_ID: el ID de tu proyecto.
    • IDENTITY_MAPPING_STORE_ID: el ID único de la tienda de mapeado de identidades. Por ejemplo, test-id-mapping-store.

Importar mapeados de identidades

Después de crear el almacén de mapeados de identidades, importa las entradas de mapeados de identidades que hayas preparado.

  1. Para importar tus asignaciones de identidades, ejecuta el siguiente comando con el método 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}'
    

    Haz los cambios siguientes:

    • PROJECT_ID: el ID de tu proyecto.
    • IDENTITY_MAPPING_STORE_ID: el ID único de la tienda de mapeado de identidades.
    • IDENTITY_MAPPINGS_JSON: las asignaciones de identidades preparadas en formato JSON.
  2. A continuación, si tienes previsto crear un conector personalizado y usar identidades externas, consulta el artículo Asociar almacenes de datos personalizados al almacén de asignación de identidades. De lo contrario, vaya a Actualizar metadatos de LCA.

Vincular almacenes de datos personalizados al almacén de mapeo de identidades

Este procedimiento solo es necesario si creas un conector personalizado. Si no vas a crear un conector personalizado, sáltate este paso.

En el caso de los conectores personalizados, el almacén de asignación de identidades debe estar vinculado al almacén de datos para que se pueda asociar una identidad externa a sus documentos. Este campo solo se puede definir durante la creación del almacén de datos.

  1. Para vincular un almacén de datos al almacén de asignación de identidades, especifica identity_mapping_store durante la creación del almacén de datos mediante el método 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"
    }'
    

    Haz los cambios siguientes:

    • PROJECT_ID: el ID de tu proyecto.
    • DATA_STORE_ID: el ID del almacén de datos que quieres crear. Este ID solo puede contener letras minúsculas, dígitos, guiones bajos y guiones.
    • IDENTITY_MAPPING_STORE_NAME: el nombre completo del recurso del almacén de asignaciones de identidades. Por ejemplo, projects/exampleproject/locations/global/identityMappingStores/test-id-mapping-store. Una vez creado el almacén de datos, no se puede cambiar el nombre.

Añadir metadatos de LCA

Incluya metadatos de LCA en el objeto AclInfo de sus documentos.

Cuando un usuario envía una solicitud de búsqueda y se obtienen documentos cuyos metadatos de ACL incluyen identidades externas, se evalúan esas identidades externas. Si la identidad del usuario (groupID o userID) se asigna a una identidad externa (externalEntityId) asociada a un documento, el usuario obtiene acceso a ese documento.

Por ejemplo, supongamos que has creado un conector personalizado para Jira. Se puede acceder a un problema de Jira determinado a través de ciertos usuarios de IdP, ciertos grupos de IdP y un rol de administrador. Para que esas personas puedan acceder al problema en los resultados de búsqueda, puedes crear un almacén de asignación de identidades y asignar usuarios y grupos del proveedor de identidades a identidades externas específicas de Jira. Vincula el almacén de mapeo de identidades a tu almacén de datos de Jira. A continuación, crea documentos en tus almacenes de datos de Jira con aclInfo configurado con los usuarios, los grupos y las identidades externas del proveedor de identidades que deberían tener acceso a esos documentos.

Para actualizar los metadatos de tu LCA con información sobre tus identidades externas, usa el siguiente formato para especificar las identidades externas y los IDs de usuario y de grupo asociados.

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

        ]
      }
    ]
  }
}

Para obtener más información sobre cómo actualizar los metadatos de las listas de control de acceso, consulta Configurar una fuente de datos con control de acceso.

Gestionar mapeados de identidades

Puede enumerar las asignaciones de identidad de un almacén de identidades o purgar un almacén de identidades definiéndolas mediante una fuente insertada o usando una condición de filtro.

Las tareas de gestión disponibles para la asignación de identidades son las siguientes:

Listar mapeados de identidades

  1. Para enumerar las asignaciones de identidades, ejecuta el siguiente comando con el método 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"
    

    Haz los cambios siguientes:

    • PROJECT_ID: el ID de tu proyecto.
    • PAGE_SIZE: número máximo de almacenes de mapeado de identidades que se devolverán. Si no se especifica, el valor predeterminado es 100. El valor máximo permitido es 1000. Los valores superiores a 1000 se convertirán a 1000.
    • PAGE_TOKEN: token de página recibido de una llamada ListIdentityMappingStores anterior. Proporciona este elemento para obtener la siguiente página.

Purgar usando una fuente insertada

Puedes eliminar entradas específicas de un almacén de mapeado de identidades proporcionando un archivo JSON con las identidades que quieras eliminar.

  1. Para purgar las asignaciones de identidad mediante una fuente insertada, ejecuta el siguiente comando con el método 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}'
    

    Haz los cambios siguientes:

    • PROJECT_ID: el ID de tu proyecto.
    • IDENTITY_MAPPING_STORE_ID: el ID único de la tienda de mapeado de identidades.
    • IDENTITY_MAPPING_STORE_NAME: el nombre del almacén de mapeado de identidades.
    • IDENTITY_MAPPINGS_JSON: los mapeados de identidades que se van a purgar.

Purgar con una condición de filtro

Puede purgar entradas específicas de un almacén de asignaciones de identidades filtrando las entradas por hora de actualización, identidad externa o todas las entradas.

  1. Para purgar las asignaciones de identidad mediante una condición de filtro, ejecuta el siguiente comando con el método 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"}'
    

    Haz los cambios siguientes:

    • PROJECT_ID: el ID de tu proyecto.
    • IDENTITY_MAPPING_STORE_ID: el ID único de la tienda de mapeado de identidades.
    • IDENTITY_MAPPING_STORE_NAME: el nombre del almacén de mapeado de identidades.
    • FILTER_CONDITION: uno de los siguientes tipos de filtro:
      • Hora de actualización. Por ejemplo, update_time > "2012-04-23T18:25:43.511Z" AND update_time < "2012-04-23T18:30:43.511Z">
      • Identidad externa. Por ejemplo, external_id = "id1"
      • Todos los mapeados de identidades. Por ejemplo, *

Gestionar almacenes de mapeado de identidades

Puede obtener, eliminar, listar y purgar almacenes de mapeo de identidades.

Obtener el almacén de mapeado de identidades

  1. Para obtener un almacén de asignaciones de identidades, ejecuta el siguiente comando con el método 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"
    

    Haz los cambios siguientes:

    • PROJECT_ID: el ID de tu proyecto.
    • IDENTITY_MAPPING_STORE_ID: el ID único de la tienda de mapeado de identidades.
    • IDENTITY_MAPPING_STORE_NAME: el nombre del almacén de mapeado de identidades.

Listar almacenes de mapeado de identidades

  1. Para enumerar los almacenes de asignación de identidades, ejecuta el siguiente comando con el método 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"
    

    Haz los cambios siguientes:

    • PROJECT_ID: el ID de tu proyecto.
    • PAGE_SIZE: número máximo de almacenes de mapeado de identidades que se devolverán. Si no se especifica, el valor predeterminado es 100. El valor máximo permitido es 1000. Los valores superiores a 1000 se convertirán a 1000.
    • PAGE_TOKEN: token de página recibido de una llamada ListIdentityMappingStores anterior. Proporciona este elemento para obtener la siguiente página.

Eliminar almacenes de mapeo de identidades

Para eliminar un almacén de mapeado de identidades, no debe estar vinculado a ningún almacén de datos y no puede contener mapeados de identidades.

  1. Para eliminar un almacén de asignaciones de identidades, ejecuta el siguiente comando con el método 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"
    

    Haz los cambios siguientes:

    • PROJECT_ID: el ID de tu proyecto.
    • IDENTITY_MAPPING_STORE_ID: el ID único de la tienda de mapeado de identidades.
    • IDENTITY_MAPPING_STORE_NAME: el nombre del almacén de mapeado de identidades.