האצלת סמכויות ברמת הדומיין ב-Google Workspace

כדי להשתמש ב-Cloud Search Query API, הקריאות ל-API יהיו מאושרות באמצעות פרטי כניסה של OAuth השייכים למשתמש מורשה בדומיין שלך. כברירת מחדל, אי אפשר להשתמש בחשבונות שירות שמשמשים לגישה לממשקי ה-API להוספה לאינדקס ולהגדרה, כי הם לא משתמשי הדומיין עם רישיונות ל-Cloud Search או ל-Google Workspace. אם אתם רוצים להשתמש בחשבון שירות לאימות של קריאות ל-API של שאילתות, מנהל דומיין יכול להעניק לחשבון גישה לנתוני משתמשים ברמת הדומיין – שנקראה הענקת הרשאה ברמת הדומיין. חשבון שירות עם הרשאה הוענקה יכול להתחזות לכל משתמש, כולל משתמשים שיש להם גישה ל-Cloud Search.

יצירת חשבון השירות ופרטי הכניסה

אם עדיין אין לכם פרטי כניסה לחשבון שירות, קראו את המאמר יצירת פרטי כניסה לחשבון שירות.

הענקת הרשאות גישה ברמת הדומיין לחשבון השירות

כדי לגשת לנתוני משתמשים בדומיין של Google Workspace, סופר-אדמין בדומיין צריך לתת לחשבון השירות שיצרתם גישה. למידע נוסף על הענקת גישה ברמת הדומיין, תוכלו לקרוא את המאמר שליטה בגישה ל-Google Workspace API באמצעות הענקת גישה ברמת הדומיין.

כדי להעניק לחשבון שירות הרשאה ברמת הדומיין:

  1. ממסוף Admin של הדומיין, נכנסים לתפריט הראשי > אבטחה > שליטה בגישה ובנתונים > בקרות API.
  2. בחלונית Domain Wide הענקת גישה, בוחרים באפשרות Manage Domain Wide Delegation.

  3. לוחצים על חדש.

  4. בשדה Client ID, מזינים את מזהה הלקוח שקיבלתם מהשלבים ליצירת חשבון השירות שלמעלה.

  5. בשדה OAuth Scopes, מזינים רשימה מופרדת בפסיקים של היקפי ההרשאות שנדרשים לאפליקציה. משתמשים בהיקף https://www.googleapis.com/auth/cloud_search.query לאפליקציות חיפוש באמצעות Query API.

  6. לוחצים על Authorize.

לחשבון השירות שלך יש עכשיו גישה ברמת הדומיין ל-Cloud Search Query API, והוא יכול להתחזות לכל משתמש בדומיין שלך בהיקף הזה. אתם מוכנים להגדיר אובייקט שירות מורשה של Cloud Search API בשם משתמשי הדומיין.

יצירת אובייקט שירות של Cloud Search API

בקטע הזה מוסבר איך ליצור אובייקט שירות של Cloud Search API, ואז לאשר לו לשלוח בקשות API באמצעות OAuth 2.0 ואת פרטי הכניסה של חשבון השירות שלכם כדי להעניק גישה ברמת הדומיין ב-Google Workspace. בדוגמאות קוראים את פרטי חשבון השירות מקובץ המפתח הפרטי בפורמט 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 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)