L'API Google Cloud Search Query nécessite que les appels soient autorisés par un utilisateur de domaine sous licence. Comme les comptes de service ne sont pas des utilisateurs de domaine sous licence, ils ne peuvent pas appeler l'API Query par défaut. Pour permettre à un compte de service d'effectuer des appels d'API Query, un administrateur de domaine peut utiliser la délégation d'autorité au niveau du domaine afin d'accorder au compte de service l'accès aux données utilisateur de votre domaine. Un compte de service disposant d'une autorité déléguée peut emprunter l'identité de n'importe quel utilisateur ayant accès à Cloud Search.
Créer le compte de service et les identifiants
Si vous ne disposez pas d'identifiants de compte de service, consultez Créer des identifiants de compte de service.
Déléguer l'autorité au niveau du domaine à votre compte de service
Pour accéder aux données utilisateur d'un domaine Google Workspace, un super-administrateur du domaine doit accorder l'accès à votre compte de service. Pour en savoir plus, consultez Contrôler l'accès à l'API Google Workspace à l'aide de la délégation au niveau du domaine.
Pour déléguer l'autorité au niveau du domaine à un compte de service :
- Dans la console d'administration de votre domaine, accédez à Menu principal > Sécurité > Contrôle des accès et des données > Commandes des API.
- Dans le volet Délégation au niveau du domaine, sélectionnez Gérer la délégation au niveau du domaine.
- Cliquez sur Ajouter.
- Dans le champ ID client, saisissez l'ID client de votre compte de service.
- Dans le champ Niveaux d'accès OAuth , saisissez une liste de niveaux d'accès requis, séparés par une virgule. Utilisez
https://www.googleapis.com/auth/cloud_search.querypour les applications de recherche. - Cliquez sur Autoriser.
Votre compte de service dispose désormais d'un accès au niveau du domaine à l'API Cloud Search Query et peut emprunter l'identité de n'importe quel utilisateur de votre domaine dans ce champ d'application. Vous pouvez maintenant instancier un objet de service d'API Cloud Search autorisé au nom des utilisateurs de votre domaine.
Instancier un objet de service d'API Cloud Search
Cette section explique comment instancier et autoriser un objet de service d'API Cloud Search à l'aide d'OAuth 2.0 et des identifiants de votre compte de service. Ces exemples lisent les informations du fichier JSON de clé privée du compte de service.
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)