Делегирование полномочий Google Workspace на уровне домена.

Для работы API запросов Google Cloud Search требуется авторизация вызовов лицензированным пользователем домена. Поскольку учетные записи служб не являются лицензированными пользователями домена, они по умолчанию не могут вызывать API запросов. Чтобы разрешить учетной записи службы выполнять вызовы API запросов, администратор домена может использовать делегирование полномочий в масштабе всего домена , чтобы предоставить учетной записи службы доступ к пользовательским данным вашего домена. Учетная запись службы с делегированными полномочиями может выдавать себя за любого пользователя, имеющего доступ к Cloud Search.

Создайте учетную запись службы и учетные данные.

Если у вас нет учетных данных сервисной учетной записи, см. раздел «Создание учетных данных сервисной учетной записи» .

Предоставьте вашей служебной учетной записи полномочия, действующие в масштабе всего домена.

Для доступа к пользовательским данным в домене Google Workspace суперадминистратор домена должен предоставить доступ вашей учетной записи службы. Дополнительную информацию см. в разделе «Управление доступом к API Google Workspace с помощью делегирования на уровне домена» .

Для делегирования полномочий в масштабах всего домена учетной записи службы:

  1. В консоли администратора вашего домена перейдите в главное > Безопасность > Контроль доступа и данных > Управление API .
  2. В панели «Делегирование на уровне домена» выберите «Управление делегированием на уровне домена» .
  3. Нажмите «Добавить новый» .
  4. В поле «Идентификатор клиента» введите идентификатор клиента для вашей учетной записи службы.
  5. В поле «Области действия OAuth» введите список необходимых областей действия, разделенных запятыми. Для поисковых приложений используйте https://www.googleapis.com/auth/cloud_search.query .
  6. Нажмите «Авторизовать» .

Теперь ваша учетная запись службы имеет доступ к API запросов Cloud Search в масштабе всего домена и может выдавать себя за любого пользователя в вашем домене в рамках этой области действия. Теперь вы можете создавать авторизованные объекты службы Cloud Search API от имени пользователей вашего домена.

Создайте экземпляр объекта сервиса Cloud Search API.

В этом разделе показано, как создать экземпляр и авторизовать объект службы Cloud Search API с использованием OAuth 2.0 и учетных данных вашей учетной записи службы. В этих примерах информация считывается из файла закрытого ключа JSON учетной записи службы.

Java

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)