האצלת סמכויות ברמת הדומיין ב-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. בחלונית הענקת גישה ברמת הדומיין, בוחרים באפשרות ניהול ברמת הדומיין הענקת גישה.

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

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

  5. בשדה היקפי הרשאות 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)