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

Google Cloud Search Query API에서는 라이선스가 부여된 도메인 사용자가 호출을 승인해야 합니다. 서비스 계정은 라이선스가 부여된 도메인 사용자가 아니므로 기본적으로 Query API를 호출할 수 없습니다. 서비스 계정에서 Query API 호출을 할 수 있도록 도메인 관리자는 도메인 전체 권한 위임을 사용하여 서비스 계정에 도메인의 사용자 데이터에 대한 액세스 권한을 부여할 수 있습니다. 위임된 권한이 있는 서비스 계정은 Cloud Search 액세스 권한이 있는 모든 사용자를 가장할 수 있습니다.

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

서비스 계정 사용자 인증 정보가 없는 경우 서비스 계정 사용자 인증 정보 만들기를 참고하세요.

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

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

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

  1. 도메인의 관리 콘솔에서 기본 메뉴 > 보안 > 액세스 및 데이터 컨트롤 > API 컨트롤로 이동합니다.
  2. 도메인 전체 위임 창에서 도메인 전체 위임 관리를 선택합니다.
  3. 새로 추가를 클릭합니다.
  4. 클라이언트 ID 필드에 서비스 계정의 클라이언트 ID를 입력합니다.
  5. OAuth 범위 필드에 필요한 범위를 쉼표로 구분된 목록으로 입력합니다. 검색 애플리케이션에는 https://www.googleapis.com/auth/cloud_search.query을 사용합니다.
  6. 승인을 클릭합니다.

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

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

이 섹션에서는 OAuth 2.0과 서비스 계정 사용자 인증 정보를 사용하여 Cloud Search API 서비스 객체를 인스턴스화하고 승인하는 방법을 보여줍니다. 이 예에서는 서비스 계정의 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.
 *
 * @param userEmail The email of the user to impersonate.
 * @return CloudSearch service object.
 */
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();

  return new CloudSearch.Builder(httpTransport, jsonFactory, creds).build();
}

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 Cloud Search service object.

    Args:
        user_email: The email of the user to impersonate.
    Returns:
        Cloud Search Query API service object.
    """
    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)