Google Cloud Search Query API'nin çağrıların lisanslı bir alan kullanıcısı tarafından yetkilendirilmesini gerektirir. Hizmet hesapları lisanslı alan kullanıcıları olmadığından varsayılan olarak Query API'yi çağıramaz. Bir hizmet hesabının Query API çağrıları yapabilmesi için alan yöneticisi, alan genelinde yetki verme özelliğini kullanarak hizmet hesabına alanınızın kullanıcı verilerine erişim izni verebilir. Yetki verilmiş bir hizmet hesabı, Cloud Search'e erişimi olan herhangi bir kullanıcının kimliğine bürünebilir.
Hizmet hesabını ve kimlik bilgilerini oluşturma
Hizmet hesabı kimlik bilgileriniz yoksa Hizmet hesabı kimlik bilgileri oluşturma başlıklı makaleyi inceleyin.
Hizmet hesabınıza alan genelinde yetki verme
Bir Google Workspace alanındaki kullanıcı verilerine erişmek için alanın süper yöneticisinin hizmet hesabınıza erişim izni vermesi gerekir. Daha fazla bilgi için Alan genelinde yetkiyle Google Workspace API erişimini kontrol etme başlıklı makaleyi inceleyin.
Bir hizmet hesabına alan genelinde yetki vermek için:
- Alanınızın Yönetici Konsolu'nda Ana menü > Güvenlik > Erişim ve veri denetimi > API denetimleri'ne gidin.
- Alan genelinde yetki bölmesinde Alan Genelinde Yetkiyi Yönetme'yi seçin.
- Yeni ekle'yi tıklayın.
- İstemci Kimliği alanına hizmet hesabınızın istemci kimliğini girin.
- OAuth Kapsamları alanına, gerekli kapsamların virgülle ayrılmış listesini girin. Arama uygulamaları için
https://www.googleapis.com/auth/cloud_search.querysimgesini kullanın. - Yetkilendir'i tıklayın.
Hizmet hesabınız artık Cloud Search Query API'ye alan genelinde erişebilir ve bu kapsamda alanınızdaki herhangi bir kullanıcının kimliğine bürünebilir. Artık alanınızdaki kullanıcılar adına yetkili bir Cloud Search API hizmet nesnesi oluşturabilirsiniz.
Cloud Search API hizmet nesnesi oluşturma
Bu bölümde, OAuth 2.0 ve hizmet hesabı kimlik bilgilerinizi kullanarak bir Cloud Search API hizmet nesnesinin nasıl oluşturulacağı ve yetkilendirileceği gösterilmektedir. Bu örnekler, hizmet hesabının JSON özel anahtar dosyasındaki bilgileri okur.
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)