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

L'API Google Cloud Search Query richiede che le chiamate siano autorizzate da un utente del dominio con licenza. Poiché i service account non sono utenti del dominio con licenza, non possono chiamare l'API Query per impostazione predefinita. Per consentire a un service account di effettuare chiamate all'API Query, un amministratore di dominio può utilizzare la delega dell'autorità a livello di dominio per concedere al service account l'accesso ai dati utente del tuo dominio. Un service account con autorità delegata può rappresentare qualsiasi utente con accesso a Cloud Search.

Crea il service account e le credenziali

Se non hai le credenziali del service account, consulta Creare le credenziali del service account.

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

Per accedere ai dati utente su un dominio Google Workspace, un super amministratore del dominio deve concedere l'accesso al tuo service account. Per saperne di più, vedi Controllare l'accesso all'API Google Workspace con la delega a livello di dominio.

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

  1. Nella 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 delega a livello di dominio.
  3. Fai clic su Aggiungi nuova.
  4. Nel campo ID client, inserisci l'ID client del tuo service account.
  5. Nel campo Ambiti OAuth, inserisci un elenco separato da virgole degli ambiti richiesti. Utilizza https://www.googleapis.com/auth/cloud_search.query per le applicazioni di ricerca.
  6. Fai clic su Autorizza.

Il tuo service account ora ha accesso a livello di dominio all'API Cloud Search Query e può rappresentare qualsiasi utente del tuo dominio in questo ambito. Ora puoi creare un oggetto servizio API Cloud Search autorizzato per conto degli utenti del tuo dominio.

Crea un'istanza di un oggetto servizio API Cloud Search

Questa sezione mostra come creare un'istanza e autorizzare un oggetto servizio API Cloud Search utilizzando OAuth 2.0 e le credenziali del tuo account di servizio. Questi esempi leggono le informazioni dal file JSON della chiave privata del service account.

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)