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

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

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

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

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

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

כדי להאציל לחשבון שירות סמכות ברמת הדומיין:

  1. ממסוף Admin של הדומיין, נכנסים אל התפריט הראשי > אבטחה > שליטה בגישה ובנתונים > בקרות API.
  2. בחלונית Domainwide assign (הענקת גישה ברמת הדומיין), בוחרים באפשרות 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)