כדי להשתמש ב-Google Cloud Search Query API, צריך להפעיל קריאות שמאושרות על ידי משתמש בדומיין עם רישיון. כברירת מחדל, חשבונות שירות לא יכולים להפעיל את Query API כי הם לא משתמשים בדומיין עם רישיון. כדי לאפשר לחשבון שירות לבצע קריאות ל-Query API, מנהל דומיין יכול להשתמש בהענקת גישה ברמת הדומיין כדי להעניק לחשבון השירות גישה לנתוני המשתמשים בדומיין. חשבון שירות עם הרשאת גישה שהועברה יכול להתחזות לכל משתמש שיש לו גישה ל-Cloud Search.
יצירה של חשבון שירות ופרטי כניסה
אם אין לכם פרטי כניסה לחשבון שירות, אפשר לקרוא את המאמר יצירת פרטי כניסה לחשבון שירות.
הענקת הרשאה ברמת הדומיין לחשבון השירות
כדי לגשת לנתוני משתמשים בדומיין Google Workspace, סופר-אדמין בדומיין צריך להעניק גישה לחשבון השירות שלכם. מידע נוסף זמין במאמר בנושא שליטה בהרשאות הגישה ל-API של Google Workspace באמצעות הענקת גישה ברמת הדומיין.
כדי להעניק לחשבון שירות הרשאה ברמת הדומיין:
- במסוף Admin של הדומיין, נכנסים אל תפריט ראשי > אבטחה > שליטה בגישה ובנתונים > אמצעי בקרה לממשקי API.
- בחלונית Domain wide delegation (הענקת גישה ברמת הדומיין), בוחרים באפשרות Manage Domain Wide Delegation (ניהול של הענקת גישה ברמת הדומיין).
- לוחצים על הוספת חדש.
- בשדה Client ID (מזהה הלקוח), מזינים את מזהה הלקוח של חשבון השירות.
- בשדה OAuth Scopes (היקפי הרשאות OAuth), מזינים רשימה מופרדת בפסיקים של היקפי ההרשאות הנדרשים. שימוש ב-
https://www.googleapis.com/auth/cloud_search.queryלחיפוש אפליקציות. - לוחצים על Authorize.
לחשבון השירות יש עכשיו גישה ברמת הדומיין ל-Cloud Search Query API, והוא יכול להתחזות לכל משתמש בדומיין במסגרת ההיקף הזה. עכשיו אפשר ליצור מופע של אובייקט שירות של Cloud Search API עם הרשאה בשם המשתמשים בדומיין.
יצירת מופע של אובייקט שירות Cloud Search API
בקטע הזה מוסבר איך ליצור מופע של אובייקט שירות של Cloud Search API ולאשר אותו באמצעות OAuth 2.0 ופרטי הכניסה של חשבון השירות. בדוגמאות האלה המידע נקרא מקובץ ה-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.
*
* @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)