Google Cloud Search Query API mengharuskan panggilan diizinkan oleh pengguna domain berlisensi. Karena akun layanan bukan pengguna domain berlisensi, akun layanan tidak dapat memanggil Query API secara default. Untuk mengizinkan akun layanan melakukan panggilan Query API, administrator domain dapat menggunakan delegasi otoritas tingkat domain untuk memberikan akses akun layanan ke data pengguna domain Anda. Akun layanan dengan otoritas yang didelegasikan dapat meniru identitas pengguna mana pun yang memiliki akses ke Cloud Search.
Buat akun layanan dan kredensial
Jika Anda tidak memiliki kredensial akun layanan, lihat Membuat kredensial akun layanan.
Mendelegasikan otoritas tingkat domain ke akun layanan Anda
Untuk mengakses data pengguna di domain Google Workspace, administrator super untuk domain tersebut harus memberikan akses ke akun layanan Anda. Untuk mengetahui informasi selengkapnya, lihat Mengontrol akses API Google Workspace dengan delegasi tingkat domain.
Untuk mendelegasikan otoritas tingkat domain ke akun layanan:
- Di konsol Admin domain Anda, buka Menu utama > Keamanan > Kontrol data dan akses > Kontrol API.
- Di panel Delegasi tingkat domain, pilih Kelola Delegasi Tingkat Domain.
- Klik Tambahkan baru.
- Di kolom Client ID, masukkan client ID untuk akun layanan Anda.
- Di kolom Cakupan OAuth, masukkan daftar cakupan yang diperlukan yang dipisahkan dengan koma. Gunakan
https://www.googleapis.com/auth/cloud_search.queryuntuk aplikasi penelusuran. - Klik Otorisasi.
Akun layanan Anda kini memiliki akses tingkat domain ke Cloud Search Query API dan dapat meniru identitas pengguna mana pun di domain Anda dalam cakupan ini. Anda kini dapat membuat instance objek layanan Cloud Search API yang sah atas nama pengguna domain Anda.
Buat instance objek layanan Cloud Search API
Bagian ini menunjukkan cara membuat instance dan memberi otorisasi pada objek layanan Cloud Search API menggunakan OAuth 2.0 dan kredensial akun layanan Anda. Contoh ini membaca informasi dari file kunci pribadi JSON akun layanan.
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)