Delegare l'autorità a livello di dominio in Google Workspace

L'API Cloud Search Query richiede che le chiamate API vengano autorizzate tramite OAuth credenziali appartenenti a un utente con licenza nel tuo dominio. Per impostazione predefinita, utilizzati per accedere alle API di indicizzazione e configurazione, non possono da utilizzare per le chiamate API di query perché non sono utenti del dominio con Cloud Search o licenze Google Workspace. Se vuoi utilizzare un account di servizio quando dopo aver autenticato le chiamate API delle query, un amministratore di dominio può concedere l'accesso ai dati utente a livello di dominio, noto come delega dell'autorità a livello di dominio. Un account di servizio con delega può impersonare qualsiasi utente, inclusi gli utenti con accesso a Cloud Search.

Crea l'account di servizio e le credenziali

Se non hai ancora le credenziali dell'account di servizio, consulta Crea le credenziali dell'account di servizio.

Delega l'autorità a livello di dominio al tuo account di servizio

Per accedere ai dati utente su un dominio Google Workspace, è necessario l'account di servizio che che hai creato deve ottenere l'accesso al dominio da parte di un super amministratore. Per ulteriori informazioni sulla delega a livello di dominio, vedi Controlla l'accesso all'API Google Workspace con la delega a livello di dominio.

Per delegare l'autorità a livello di dominio a un account di servizio:

  1. Dalla Console di amministrazione del tuo dominio, vai a Menu principale > Sicurezza > Accesso e controllo dei dati > Controlli API.
  2. Nel riquadro Delega a livello di dominio, seleziona Gestisci a livello di dominio. Delega.

  3. Fai clic su Aggiungi nuovo.

  4. Nel campo ID client, inserisci l'ID cliente ottenuto per creare un account di servizio.

  5. Nel campo Ambiti OAuth, inserisci un elenco di ambiti delimitato da virgole richiesto per la tua applicazione. Utilizza l'ambito https://www.googleapis.com/auth/cloud_search.query per le applicazioni di ricerca utilizzando l'API Query.

  6. Fai clic su Autorizza.

Il tuo account di servizio ora dispone dell'accesso a livello di dominio all'API Cloud Search Query, e può impersonare qualsiasi utente del tuo dominio in questo ambito. Sei pronto a creare un'istanza di un oggetto di servizio API Cloud Search autorizzato per conto del tuo gli utenti del dominio.

Creare un'istanza per un oggetto di servizio dell'API Cloud Search

Questa sezione mostra come creare un'istanza di un oggetto di servizio dell'API Cloud Search e quindi autorizzarlo a effettuare richieste API utilizzando OAuth 2.0 e credenziali per eseguire la delega a livello di dominio Google Workspace. Gli esempi legge le informazioni dell'account di servizio dal file della chiave privata in formato 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)