L'API Google Cloud Search Query exige que les appels soient autorisés par un utilisateur du domaine disposant d'une licence. Étant donné que les comptes de service ne sont pas des utilisateurs du domaine sous licence, ils ne peuvent pas appeler l'API Query par défaut. Pour permettre à un compte de service d'effectuer des appels à l'API Query, un administrateur de domaine peut utiliser la délégation de l'autorité au niveau du domaine pour accorder au compte de service l'accès aux données utilisateur de votre domaine. Un compte de service avec délégation d'autorité peut usurper 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 aux API Google Workspace avec 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 Champs d'application OAuth, saisissez la liste des champs d'application 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 désormais instancier un objet de service API Cloud Search autorisé au nom des utilisateurs de votre domaine.
Instancier un objet de service de l'API Cloud Search
Cette section explique comment instancier et autoriser un objet de service de l'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)