Déléguer les droits au niveau du domaine Google Workspace

L'API Cloud Search Query nécessite que les appels d'API soient autorisés via OAuth. d'identifiants appartenant à un utilisateur disposant d'une licence sur votre domaine. Par défaut, le service utilisés pour accéder aux API d'indexation et de configuration, ne peuvent pas être utilisés pour les appels d'API de requête, car ce ne sont pas des utilisateurs de domaine avec Cloud Search ; ou Google Workspace. Si vous souhaitez utiliser un compte de service authentifiant les appels d'API de requête, un administrateur de domaine peut accorder au compte aux données utilisateur à l'échelle du domaine (c'est ce que l'on appelle délégation d'autorité au niveau du domaine. Un compte de service disposant de droits peut usurper l'identité de n'importe quel utilisateur, y compris ceux ayant accès à Cloud Search.

Créer le compte de service et les identifiants

Si vous ne disposez pas encore d'identifiants de compte de service, consultez Créez 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, le compte de service que vous avez créés doit obtenir l'accès d'un super-administrateur pour le domaine. Pour en savoir plus sur la délégation au niveau du domaine, consultez la section Contrôler l'accès à l'API Google Workspace à l'aide de la délégation au niveau du domaine

Pour déléguer une autorité au niveau du domaine à un compte de service:

  1. 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
  2. Dans le volet Délégation au niveau du domaine, sélectionnez Gérer l'ensemble du domaine. Délégation.

  3. Cliquez sur Ajouter.

  4. Dans le champ ID client, saisissez l'ID client obtenu à l'aide du les étapes de création de compte de service ci-dessus.

  5. Dans le champ Champs d'application OAuth, saisissez la liste des champs d'application, séparés par une virgule. requises pour votre application. Utiliser le champ d'application https://www.googleapis.com/auth/cloud_search.query pour les applications de recherche à l'aide de l'API Query.

  6. 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. Vous êtes prêt à instanciez un objet de service API Cloud Search autorisé au nom de votre les utilisateurs du domaine.

Instancier un objet de service de l'API Cloud Search

Cette section explique comment instancier un objet de service de l'API Cloud Search, puis l'autoriser à envoyer des requêtes API à l'aide d'OAuth 2.0 et du protocole pour effectuer la délégation au niveau du domaine Google Workspace. Exemples lire les informations du compte de service à partir du fichier de clé privée au format 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 authorized with the service
 * account that acts on behalf of the given user.
 *
 * @param userEmail The email of the user to impersonate. Needs permissions to access Cloud Search.
 * @return CloudSearch service object that is ready to make requests.
 */
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();

  CloudSearch service = new CloudSearch.Builder(httpTransport, jsonFactory, creds).build();

  return service;
}

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 CloudSearch service object authorized with the service
    account that acts on behalf of the given user.

    Args:
        user_email: The email of the user to impersonate. Needs permissions to access Cloud Search.
    Returns:
        Cloud Search Query API service object that is ready to make requests.
    """
    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)