Domainweite Übertragung von Befugnissen in Google Workspace

Für die Google Cloud Search Query API müssen Aufrufe von einem Nutzer mit Lizenz für die Domain autorisiert werden. Da Dienstkonten keine lizenzierten Domainnutzer sind, können sie die Query API standardmäßig nicht aufrufen. Damit ein Dienstkonto Query API-Aufrufe ausführen kann, kann ein Domainadministrator die domainweite Delegierung von Befugnissen verwenden, um dem Dienstkonto Zugriff auf die Nutzerdaten Ihrer Domain zu gewähren. Ein Dienstkonto mit delegierter Berechtigung kann die Identität eines beliebigen Nutzers mit Zugriff auf Cloud Search übernehmen.

Dienstkonto und Anmeldedaten erstellen

Wenn Sie keine Anmeldedaten für das Dienstkonto haben, lesen Sie den Abschnitt Anmeldedaten für Dienstkonto erstellen.

Domainweite Befugnisse an Ihr Dienstkonto delegieren

Wenn Sie auf Nutzerdaten in einer Google Workspace-Domain zugreifen möchten, muss ein Super Admin der Domain Ihrem Dienstkonto Zugriff gewähren. Weitere Informationen finden Sie unter Google Workspace-API-Zugriff mit domainweiter Delegierung verwalten.

So delegieren Sie domainweite Befugnisse an ein Dienstkonto:

  1. Rufen Sie in der Admin-Konsole Ihrer Domain das Hauptmenü  > Sicherheit > Zugriffs- und Datenkontrolle > API-Steuerung auf.
  2. Wählen Sie im Bereich Domainweite Delegierung die Option Domainweite Delegierung verwalten aus.
  3. Klicken Sie auf Neu hinzufügen.
  4. Geben Sie im Feld Client-ID die Client-ID für Ihr Dienstkonto ein.
  5. Geben Sie im Feld OAuth-Bereiche eine durch Kommas getrennte Liste der erforderlichen Bereiche ein. Verwenden Sie https://www.googleapis.com/auth/cloud_search.query für Suchanwendungen.
  6. Klicken Sie auf Autorisieren.

Ihr Dienstkonto hat jetzt domainweiten Zugriff auf die Cloud Search Query API und kann in diesem Bereich die Identität eines beliebigen Nutzers in Ihrer Domain übernehmen. Sie können jetzt ein autorisiertes Cloud Search API-Dienstobjekt im Namen der Nutzer Ihrer Domain instanziieren.

Cloud Search API-Dienstobjekt instanziieren

In diesem Abschnitt wird gezeigt, wie Sie ein Cloud Search API-Dienstobjekt mit OAuth 2.0 und den Anmeldedaten Ihres Dienstkontos instanziieren und autorisieren. In diesen Beispielen werden Informationen aus der JSON-Datei mit dem privaten Schlüssel des Dienstkontos gelesen.

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)