일반적으로 기업은 ID 공급업체 (IDP)를 사용하여 ID (사용자 및 사용자 그룹)를 관리합니다. 하지만 기업에서 자체적으로 빌드한 맞춤 애플리케이션을 사용하면 고객이 해당 애플리케이션 내에서 로컬로 정의된 새 사용자 그룹을 만들 수 있습니다. 이러한 애플리케이션별 사용자 그룹 또는 보조 사용자 ID를 외부 ID라고 합니다.
ID 매핑을 설정해야 하는 이유
Google에서 액세스 제어를 올바르게 적용할 수 있도록 IDP ID를 Gemini Enterprise에서 사용할 맞춤 애플리케이션의 외부 ID에 매핑합니다.
앱 결과에 액세스 제어를 적용하기 위해 Google은 IDP를 신뢰할 수 있는 소스로 사용하여 사용자가 액세스할 수 있는 데이터를 확인합니다. 기업은 직원이 단일 회사 사용자 인증 정보를 사용하여 모든 회사 리소스에 로그인하고 액세스할 수 있도록 IDP를 다른 SaaS 솔루션에 연결하는 경우가 많습니다.
맞춤 애플리케이션과 같이 앱에 연결할 애플리케이션을 통해 정의된 외부 ID가 있는 경우 IDP가 액세스 제어의 유일한 정보 소스가 아닙니다.
예를 들어 도메인이 'example.com'인 Example Organization에 'JaneDoe'가 있다고 가정해 보겠습니다. IDP의 ID는 'JaneDoe@example.com'으로 정의되어 있습니다. 동일한 사용자가 맞춤 애플리케이션 내에서 별도의 ID('JDoe')를 가지고 있습니다. 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 사용자 및 그룹 간의 관계를 보여주는 예입니다.
이 사용자-그룹 멤버십 그래프에는 다음 매핑이 있습니다.
{
"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 구성이 자동으로 가져옵니다.
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 매핑 항목을 가져옵니다.
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 매핑입니다.
다음으로 맞춤 커넥터를 빌드하고 외부 ID를 사용하려는 경우 맞춤 데이터 스토어를 ID 매핑 스토어에 바인딩으로 이동합니다. 그렇지 않으면 ACL 메타데이터 업데이트로 건너뜁니다.
맞춤 데이터 스토어를 ID 매핑 스토어에 바인딩
이 절차는 맞춤 커넥터를 빌드하는 경우에만 필요합니다. 맞춤 커넥터를 빌드하지 않는 경우 이 단계를 건너뜁니다.
맞춤 커넥터의 경우 외부 ID를 문서와 연결하기 전에 ID 매핑 저장소를 데이터 저장소에 바인딩해야 합니다. 이 필드는 데이터 스토어 생성 중에만 설정할 수 있습니다.
데이터 스토어를 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용 맞춤 커넥터를 만들었다고 가정해 보겠습니다. 특정 IDP 사용자, 특정 IDP 그룹, 관리자 역할이 지정된 Jira 문제에 액세스할 수 있습니다. 검색 결과에서 해당 문제를 사용자가 액세스할 수 있도록 하려면 ID 매핑 저장소를 만들고 IDP 사용자 및 그룹을 Jira 전용 외부 ID에 매핑하면 됩니다. ID 매핑 스토어를 Jira 데이터 스토어에 바인딩합니다. 그런 다음 해당 문서에 액세스할 수 있는 IDP 사용자, IDP 그룹, 외부 ID로 구성된 aclInfo
를 사용하여 Jira 데이터 스토어에 문서를 만듭니다.
외부 ID에 관한 정보로 ACL 메타데이터를 업데이트하려면 다음 형식을 사용하여 외부 ID와 연결된 사용자 및 그룹 ID를 지정하세요.
{
"aclInfo": {
"readers": [
{
"principals": [
{
"groupId": "group_1"
},
{
"userId": "user_1"
},
{
"externalEntityId": "external_id1"
}
]
}
]
}
}
ACL 메타데이터 업데이트에 대한 자세한 내용은 액세스 제어로 데이터 소스 구성하기를 참고하세요.
ID 매핑 관리
ID 저장소의 ID 매핑을 나열하거나 인라인 소스를 통해 정의하거나 필터 조건을 사용하여 ID 저장소를 삭제할 수 있습니다.
ID 매핑에 사용할 수 있는 관리 작업은 다음과 같습니다.
ID 매핑 나열
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입니다. 허용되는 최댓값은 1000입니다. 1,000보다 큰 값은 1,000으로 변환됩니다.PAGE_TOKEN
: 이전ListIdentityMappingStores
호출에서 수신한 페이지 토큰입니다. 후속 페이지를 검색하려면 이를 입력합니다.
인라인 소스를 사용하여 삭제
삭제할 ID의 JSON 파일을 제공하여 ID 매핑 저장소에서 지정된 항목을 삭제할 수 있습니다.
인라인 소스를 사용하여 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 매핑 저장소에서 지정된 항목을 삭제할 수 있습니다.
필터 조건을 사용하여 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 매핑 스토어 가져오기
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 매핑 스토어 나열
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입니다. 허용되는 최댓값은 1000입니다. 1,000보다 큰 값은 1,000으로 변환됩니다.PAGE_TOKEN
: 이전ListIdentityMappingStores
호출에서 수신한 페이지 토큰입니다. 후속 페이지를 검색하려면 이를 입력합니다.
ID 매핑 저장소 삭제
ID 매핑 저장소를 삭제하려면 데이터 스토어에 바인딩되어 있지 않아야 하며 ID 매핑 저장소에 ID 매핑이 없어야 합니다.
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 매핑 스토어 이름입니다.