Delegación de autoridad de Google Workspace en todo el dominio

La API de consulta de Google Cloud Search requiere que las llamadas estén autorizadas por un usuario de dominio con licencia. Debido a que las cuentas de servicio no son usuarios de dominio con licencia, no pueden llamar a la API de consulta de forma predeterminada. Para permitir que una cuenta de servicio realice llamadas a la API de consulta, un administrador de dominio puede usar la delegación de autoridad en todo el dominio para otorgar a la cuenta de servicio acceso a los datos del usuario de tu dominio. Una cuenta de servicio con autoridad delegada puede tomar la identidad de cualquier usuario con acceso a Cloud Search.

Crea la cuenta de servicio y las credenciales

Si no tienes credenciales de cuenta de servicio, consulta Cómo crear credenciales de cuenta de servicio.

Delega autoridad en todo el dominio a tu cuenta de servicio

Para acceder a los datos del usuario en un dominio de Google Workspace, un administrador avanzado del dominio debe otorgar acceso a tu cuenta de servicio. Para obtener más información, consulta Cómo controlar el acceso a la API de Google Workspace con la delegación de todo el dominio.

Para delegar autoridad en todo el dominio a una cuenta de servicio, haz lo siguiente:

  1. En la Consola del administrador de tu dominio, ve a Menú principal > Seguridad > Control de acceso y datos > Controles de API.
  2. En el panel Delegación de todo el dominio, selecciona Administrar la delegación de todo el dominio.
  3. Haz clic en Agregar nueva.
  4. En el campo ID de cliente, ingresa el ID de cliente de tu cuenta de servicio.
  5. En el campo Permisos de OAuth, ingresa una lista separada por comas de los permisos requeridos. Usa https://www.googleapis.com/auth/cloud_search.query para las aplicaciones de búsqueda.
  6. Haz clic en Autorizar.

Tu cuenta de servicio ahora tiene acceso en todo el dominio de la API de consulta de Cloud Search y puede tomar la identidad de cualquier usuario del dominio en este alcance. Ahora puedes crear una instancia de un objeto de servicio de la API de Cloud Search autorizado en nombre de los usuarios de tu dominio.

Crea una instancia de un objeto de servicio de la API de Cloud Search

En esta sección, se muestra cómo crear una instancia de un objeto de servicio de la API de Cloud Search y autorizarlo con OAuth 2.0 y las credenciales de tu cuenta de servicio. En estos ejemplos, se lee información del archivo de claves privadas JSON de la cuenta de servicio.

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)