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 dominio. Un service account con autorità delegata può rappresentare qualsiasi utente con accesso a Cloud Search.

Creare il service account e le credenziali

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

Delegare l'autorità a livello di dominio al service account

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 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 nuovo.
  4. Nel campo ID client, inserisci l'ID client del tuo service account.
  5. Nel campo Ambiti OAuth, inserisci un elenco di ambiti obbligatori separati da virgole. 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 di servizio API Cloud Search autorizzato per conto degli utenti del tuo dominio.

Creare un oggetto di servizio API Cloud Search

Questa sezione mostra come creare e autorizzare un oggetto di servizio API Cloud Search utilizzando OAuth 2.0 e le credenziali del service account. 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)