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

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

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

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

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

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

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

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

  3. לוחצים על הוספת חדש.

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

  5. בשדה OAuth Scopes (היקפי הרשאות OAuth), מזינים רשימה של היקפי ההרשאות שנדרשים לאפליקציה, כשהם מופרדים בפסיקים. משתמשים בהיקף 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)