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

La API de Google Cloud Search Query requiere que las llamadas estén autorizadas por un usuario del dominio con licencia. Como las cuentas de servicio no son usuarios de dominio con licencia, no pueden llamar a la API de Query de forma predeterminada. Para permitir que una cuenta de servicio realice llamadas a la API de Query, 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 Crea 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 Controla el acceso a las APIs 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 aplicaciones de búsqueda.
  6. Haz clic en Autorizar.

Tu cuenta de servicio ahora tiene acceso en todo el dominio a la API de Cloud Search Query y puede tomar la identidad de cualquier usuario de tu dominio dentro de 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. Estos ejemplos leen 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)