Google Workspace 도메인 전체 권한 위임 수행

Cloud Search Query API를 사용하려면 OAuth를 사용하여 API 호출을 승인해야 합니다. 사용자 인증 정보를 제공합니다. 기본적으로 서비스는 색인 생성 및 구성 API에 액세스하는 데 사용되는 계정은 Cloud Search를 사용하는 도메인 사용자가 아니므로 쿼리 API 호출에 사용됩니다. 또는 Google Workspace 라이선스입니다. 서비스 계정을 사용하려는 경우 쿼리 API 호출을 인증하기 위해 도메인 관리자는 해당 계정에 사용자 데이터에 대한 도메인 전체 액세스 도메인 전체 권한 위임. 위임된 서비스가 있는 서비스 계정 기관은 Cloud Search에 액세스할 수 있는 사용자를 포함한 모든 사용자를 가장할 수 있습니다.

서비스 계정 및 사용자 인증 정보 생성

아직 서비스 계정 사용자 인증 정보가 없는 경우 다음을 참조하세요. 서비스 계정 사용자 인증 정보를 만듭니다.

서비스 계정에 도메인 전체 권한 위임

Google Workspace 도메인의 사용자 데이터에 액세스하려면 최고 관리자로부터 도메인에 대한 액세스 권한을 부여해야 합니다. 도메인 전체 위임에 대한 자세한 내용은 다음을 참고하세요. 도메인 전체 위임으로 Google Workspace API 액세스 관리하기

서비스 계정에 도메인 전체 권한을 위임하려면 다음 안내를 따르세요.

  1. 도메인의 관리 콘솔에서 다음으로 이동합니다. 기본 메뉴 > 보안 > 액세스 및 데이터 관리 > API 관리.
  2. 도메인 전체 위임 창에서 도메인 전체 관리를 선택합니다. 위임.

  3. 새로 추가를 클릭합니다.

  4. 클라이언트 ID 입력란에 서비스 계정 생성 단계를 완료합니다.

  5. OAuth 범위 입력란에 쉼표로 구분된 범위 목록을 입력합니다. 필수 입력 항목입니다. 범위 사용 https://www.googleapis.com/auth/cloud_search.query: 검색 애플리케이션 쿼리 API를 사용합니다

  6. 승인을 클릭합니다.

이제 서비스 계정에 Cloud Search Query API에 대한 도메인 전체 액세스 권한이 부여됩니다. 이 범위에 있는 도메인의 모든 사용자를 가장할 수 있습니다. 준비 완료 사용자를 대신하여 승인된 Cloud Search API 서비스 객체를 인스턴스화하고 관리됩니다.

Cloud Search API 서비스 객체 인스턴스화

이 섹션에서는 Cloud Search API 서비스 객체를 인스턴스화한 다음 OAuth 2.0 및 서비스 계정의 사용자 인증 정보를 사용하여 Google Workspace 도메인 전체 위임을 수행합니다. 예시 JSON 형식의 비공개 키 파일에서 서비스 계정 정보를 읽습니다.

자바

import java.util.Collections;
import java.io.FileInputStream;
import com.google.api.client.googleapis.auth.oauth2.GoogleCredential;
import com.google.api.client.http.HttpTransport;
import com.google.api.client.json.JsonFactory;
import com.google.api.services.cloudsearch.v1.CloudSearch;
import com.google.api.services.cloudsearch.v1.CloudSearchScopes;
...

/** Path to the Service Account's Private Key file */
private static final String SERVICE_ACCOUNT_FILE_PATH = "/path/to/key.json";

/**
 * Build and return a Cloud Search service object authorized with the service
 * account that acts on behalf of the given user.
 *
 * @param userEmail The email of the user to impersonate. Needs permissions to access Cloud Search.
 * @return CloudSearch service object that is ready to make requests.
 */
public static CloudSearch getCloudSearchAPIService(String userEmail)
    throws FileNotFoundException, IOException {

  FileInputStream credsFile = new FileInputStream(SERVICE_ACCOUNT_FILE_PATH);

  GoogleCredential init = GoogleCredential.fromStream(credsFile);

  HttpTransport httpTransport = init.getTransport();
  JsonFactory jsonFactory = init.getJsonFactory();

  GoogleCredential creds = new GoogleCredential.Builder()
      .setTransport(httpTransport)
      .setJsonFactory(jsonFactory)
      .setServiceAccountId(init.getServiceAccountId())
      .setServiceAccountPrivateKey(init.getServiceAccountPrivateKey())
      .setServiceAccountScopes(Collections.singleton(CloudSearchScopes.CLOUD_SEARCH_QUERY))
      .setServiceAccountUser(userEmail)
      .build();

  CloudSearch service = new CloudSearch.Builder(httpTransport, jsonFactory, creds).build();

  return service;
}

Python

from google.oauth2 import service_account
from googleapiclient.discovery import build

# Path to the Service Account's Private Key file
SERVICE_ACCOUNT_FILE_PATH = "/path/to/key.json"

def create_query_api_service(user_email):
    """Build and return a CloudSearch service object authorized with the service
    account that acts on behalf of the given user.

    Args:
        user_email: The email of the user to impersonate. Needs permissions to access Cloud Search.
    Returns:
        Cloud Search Query API service object that is ready to make requests.
    """
    credentials = service_account.Credentials.from_service_account_file(
        SERVICE_ACCOUNT_FILE_PATH,
        scopes=['https://www.googleapis.com/auth/cloud_search.query'])

    delegated_credentials = credentials.with_subject(user_email)

    return build("cloudsearch", "v1", credentials=delegated_credentials)