外部 ID をマッピングする

通常、企業は ID プロバイダ(IDP)を使用して ID(ユーザーとユーザー グループ)を管理します。ただし、企業が社内で構築したカスタム アプリケーションでは、顧客がそのアプリケーション内でローカルに定義された新しいユーザー グループを作成できる場合があります。このようなアプリケーション固有のユーザー グループやセカンダリ ユーザー ID は、外部 ID と呼ばれます。

ID マッピングを設定する理由

Google がアクセス制御を正しく適用できるようにするには、IDP ID を、Gemini Enterprise で使用する予定のカスタム アプリケーションから取得した外部 ID にマッピングします。

アプリの結果にアクセス制御を適用するために、Google は IDP を信頼できる情報源として使用し、ユーザーがアクセスできるデータを決定します。企業は、従業員が 1 つの企業認証情報を使用してすべての企業リソースにログインしてアクセスできるように、IDP を他の SaaS ソリューションに接続することがよくあります。

カスタム アプリケーションなど、アプリに接続する予定のアプリケーションを通じて外部 ID が定義されている場合、IDP はアクセス制御の唯一の信頼できる情報源ではありません。

たとえば、Example Organization 内に 「JaneDoe」というユーザーが存在し、ドメインが「example.com」であるとします。IDP の ID は「JaneDoe@example.com」として定義されます。同じユーザーがカスタム アプリケーション内で「JDoe」という別の ID を持っています。この場合、IDP はこの ID を認識していない可能性があります。そのため、Gemini Enterprise は IDP を介してカスタム アプリケーション ID に関する情報を受け取りません。

Gemini Enterprise では、ID マッピングはマッピングを作成してインポートする ID マッピング ストアに保存されます。カスタム コネクタを使用する場合は、ID マッピング ストアをカスタム コネクタのデータストアにバインドし、外部 ID に関する情報でデータストアの ACL メタデータを更新できます。

始める前に

ID マッピングを設定する前に、 Google Cloud プロジェクトに ID プロバイダを接続します。

ID マッピング エントリを準備する

インポートする ID マッピング エントリを準備します。ID マッピングは、次の例のようにフォーマットする必要があります。

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

たとえば、次のグラフはユーザー グループのメンバーシップの例を表しています。ここで、Ext は外部グループを表します。このグラフは、外部グループと IDP ユーザーおよびグループの関係の例を示しています。

IDP ユーザーとグループに対する外部 ID の関係。

このユーザー グループ メンバーシップのグラフには、次のマッピングが含まれます。

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

外部 ID に子 ID があるネストされた ID メンバーシップは、フラット化する必要があります。

Google はコネクタが外部 ID のプライマリ ID を送信することを前提としています。たとえば、名前はカスタム アプリケーション内のグループの存続期間中に変更される可能性があるため、グループ名ではなくグループ ID をインポートします。

ID マッピングを設定する

次の手順に沿って、Gemini Enterprise で IDP と外部 ID 間の ID マッピングを設定します。次の手順では、ID マッピング ストアを作成し、準備した ID マッピングをインポートします。カスタム コネクタを使用する場合は、ID マッピング ストアにバインドされた新しいデータストアも作成します。

ID マッピング ストアを作成する

最初のステップは、ID マッピング ストアを設定することです。これは、すべての ID マッピングが保存される親リソースです。

ID マッピング ストアを作成すると、Gemini Enterprise プロジェクトに接続した IDP から IDP 構成が自動的に取得されます。

  1. ID マッピング ストアを作成するには、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"
    }'
    

    次のように置き換えます。

    • PROJECT_ID: 実際のプロジェクトの ID。
    • IDENTITY_MAPPING_STORE_ID: ID マッピング ストアの一意の ID。例: test-id-mapping-store

ID マッピングをインポートする

ID マッピング ストアを作成したら、準備した ID マッピング エントリをインポートします。

  1. ID マッピングをインポートするには、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}'
    

    次のように置き換えます。

    • PROJECT_ID: 実際のプロジェクトの ID。
    • IDENTITY_MAPPING_STORE_ID: ID マッピング ストアの一意の ID。
    • IDENTITY_MAPPINGS_JSON: JSON 形式の準備済みの ID マッピング
  2. 次に、カスタム コネクタを構築して外部 ID を使用する場合は、カスタム データストアを ID マッピング ストアにバインドするに進みます。それ以外の場合は、ACL メタデータを更新するに進みます。

カスタム データストアを ID マッピング ストアにバインドする

この手順は、カスタム コネクタを構築する場合にのみ必要です。カスタム コネクタを構築しない場合は、この手順をスキップします。

カスタム コネクタの場合、外部 ID をドキュメントに関連付ける前に、ID マッピング ストアをデータストアにバインドする必要があります。このフィールドの設定は、データストアの作成時にのみ許可されます。

  1. データストアを ID マッピング ストアにバインドするには、Datastores.create メソッドを使用してデータストアの作成時に identity_mapping_store を指定します。

    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"
    }'
    

    次のように置き換えます。

    • PROJECT_ID: 実際のプロジェクトの ID。
    • DATA_STORE_ID: 作成するデータストアの ID。この ID に使用できるのは、小文字、数字、アンダースコア、ハイフンのみです。
    • IDENTITY_MAPPING_STORE_NAME: ID マッピング ストアの完全なリソース名。例: projects/exampleproject/locations/global/identityMappingStores/test-id-mapping-store。データストアの作成後にこの名前を更新することはできません。

ACL メタデータを追加する

ドキュメントの AclInfo オブジェクトに ACL メタデータを含めます。

ユーザーが検索リクエストを送信し、ACL メタデータに外部 ID が含まれるドキュメントが取得されると、それらの外部 ID が評価されます。ユーザーの ID(groupID または userID)がドキュメントに関連付けられている外部 ID(externalEntityId)にマッピングされている場合、ユーザーはそのドキュメントにアクセスできます。

たとえば、Jira 用のカスタム コネクタを作成したとします。特定の Jira の課題には、特定の IDP ユーザー、特定の IDP グループ、管理者ロールがアクセスできます。検索結果でその課題にアクセスできるようにするには、ID マッピング ストアを作成し、IDP ユーザーとグループを Jira 固有の外部 ID にマッピングします。ID マッピング ストアを Jira データストアにバインドします。次に、これらのドキュメントにアクセスできる IDP ユーザー、IDP グループ、外部 ID で構成された aclInfo を使用して、Jira データストアにドキュメントを作成します。

外部 ID に関する情報で ACL メタデータを更新するには、次の形式を使用して外部 ID と関連するユーザー ID およびグループ ID を指定します。

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

        ]
      }
    ]
  }
}

ACL メタデータの更新について詳しくは、アクセス制御でデータソースを構成するをご覧ください。

ID マッピングを管理する

ID ストア内の ID マッピングを一覧表示できます。また、インライン ソースで定義するかフィルタ条件を使用して定義することで、ID ストアを削除することもできます。

ID マッピングで使用できる管理タスクは次のとおりです。

ID マッピングを一覧表示する

  1. ID マッピングを一覧表示するには、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"
    

    次のように置き換えます。

    • PROJECT_ID: 実際のプロジェクトの ID。
    • PAGE_SIZE: 返される ID マッピング ストアの最大数。指定されていない場合のデフォルトは 100 です。最大許容値は 1,000 です。1,000 を超える値は 1,000 に強制変換されます。
    • PAGE_TOKEN: 前回の ListIdentityMappingStores 呼び出しから受け取ったページトークン。後続のページを取得するにはこれを指定します。

インライン ソースを使用して削除する

削除する ID の JSON ファイルを指定することで、ID マッピング ストアから特定のエントリを削除できます。

  1. インライン ソースを使用して ID マッピングを削除するには、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}'
    

    次のように置き換えます。

    • PROJECT_ID: 実際のプロジェクトの ID。
    • IDENTITY_MAPPING_STORE_ID: ID マッピング ストアの一意の ID。
    • IDENTITY_MAPPING_STORE_NAME: ID マッピング ストアの名前。
    • IDENTITY_MAPPINGS_JSON: 削除する ID マッピング。

フィルタ条件を使用して削除する

更新時間、外部 ID、またはすべてのエントリでエントリをフィルタして、ID マッピング ストアから特定のエントリを削除できます。

  1. フィルタ条件を使用して ID マッピングを削除するには、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"}'
    

    次のように置き換えます。

    • PROJECT_ID: 実際のプロジェクトの ID。
    • IDENTITY_MAPPING_STORE_ID: ID マッピング ストアの一意の ID。
    • IDENTITY_MAPPING_STORE_NAME: ID マッピング ストアの名前。
    • FILTER_CONDITION: 次のいずれかのフィルタタイプ。
      • 更新日時。例: update_time > "2012-04-23T18:25:43.511Z" AND update_time < "2012-04-23T18:30:43.511Z">
      • 外部 ID。例: external_id = "id1"
      • すべての ID マッピング。例: *

ID マッピング ストアを管理する

ID マッピング ストアの取得、削除、一覧表示、完全な削除を行うことができます。

ID マッピング ストアを取得する

  1. ID マッピング ストアを取得するには、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"
    

    次のように置き換えます。

    • PROJECT_ID: 実際のプロジェクトの ID。
    • IDENTITY_MAPPING_STORE_ID: ID マッピング ストアの一意の ID。
    • IDENTITY_MAPPING_STORE_NAME: ID マッピング ストアの名前。

ID マッピング ストアを一覧表示する

  1. ID マッピング ストアを一覧表示するには、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"
    

    次のように置き換えます。

    • PROJECT_ID: 実際のプロジェクトの ID。
    • PAGE_SIZE: 返される ID マッピング ストアの最大数。指定されていない場合のデフォルトは 100 です。最大許容値は 1,000 です。1,000 を超える値は 1,000 に強制変換されます。
    • PAGE_TOKEN: 前回の ListIdentityMappingStores 呼び出しから受け取ったページトークン。後続のページを取得するにはこれを指定します。

ID マッピング ストアを削除する

ID マッピング ストアを削除するには、そのストアがデータストアにバインドされておらず、ID マッピング ストアに ID マッピングが存在していない必要があります。

  1. ID マッピング ストアを削除するには、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"
    

    次のように置き換えます。

    • PROJECT_ID: 実際のプロジェクトの ID。
    • IDENTITY_MAPPING_STORE_ID: ID マッピング ストアの一意の ID。
    • IDENTITY_MAPPING_STORE_NAME: ID マッピング ストアの名前。