Configura la API de Grupos

En esta página, se explica cómo configurar la API de Grupos de Cloud Identity.

Antes de comenzar

Habilita la API de Cloud Identity.

Habilita la API

Instala las bibliotecas cliente

Para instalar las bibliotecas cliente, ejecuta el siguiente comando:

Python

Para obtener más información sobre la configuración del entorno de desarrollo de Python, consulta la Guía de configuración del entorno de desarrollo de Python.

pip install --upgrade google-api-python-client google-auth \
  google-auth-oauthlib google-auth-httplib2

Autentica con la API de Grupos

Puedes realizar autenticaciones con la API de Grupos como usuario final, como administrador de grupo de cuentas de servicio sin delegación de todo el dominio o como una cuenta de servicio con delegación de todo el dominio. En las siguientes secciones, se describe cada método.

Autenticarse como usuario final

Si no eres administrador o estás compilando una app en nombre de usuarios que no son administradores, consulta Usa OAuth 2.0 para aplicaciones de servidor web. y, luego, consulta la sección Cómo crear instancias de un cliente.

Autentica como una cuenta de servicio sin delegación de todo el dominio

Si usas una cuenta de servicio y deseas usarla para administrar grupos como administrador de grupo, completa los siguientes pasos. Este método de autenticación debe usarse cuando quieras que las acciones de la cuenta de servicio se registren en los registros de auditoría como la cuenta de servicio.

Asigna una función de administrador a la cuenta de servicio

Primero, debes asignar la función de administrador del grupo de Google Workspace (administrador de grupo) a la cuenta de servicio a la que deseas delegar mediante las funciones de SDK de administrador y API de asignaciones de funciones. Este paso le otorga a la cuenta de servicio acceso a los grupos del dominio, pero no a otro recurso.

Consulta la guía de administración de funciones para obtener información general sobre la administración de funciones mediante la API del SDK de Admin. Sigue los pasos a continuación a fin de asignar la función de administrador de grupo para tu cuenta de servicio.

  1. En la consola de Google Cloud, ve a la página Cuentas de servicio:

    Ir a Cuentas de servicio

  2. Haz clic en el nombre de la cuenta de servicio que quieres usar con la API de Grupos.

  3. Copia el ID único de la cuenta de servicio.

  4. Llama a la API de Funciones del SDK de Admin para identificar el roleId del administrador de grupo. Puedes usar el Explorador de API en la documentación del SDK de Admin para hacerlo.

  5. Llama a la API de Tarea de función con el siguiente cuerpo de solicitud:

    {
      "assignedTo": "SERVICE_ACCOUNT_UNIQUE_ID"
      "roleId": "ROLE_ID"
      "scopeType": "CUSTOMER"
      "kind": "admin#directory#roleAssignment"
    }
    

Autentica y autoriza la cuenta de servicio

Ahora tienes una cuenta de servicio con la función de administrador de grupo. El segundo paso es completar el proceso de autenticación de OAuth para la cuenta de servicio.

  • Si estás desarrollando una app en Google Cloud y la cuenta de servicio es un propietario del proyecto, puedes usar las credenciales predeterminadas de la aplicación, lo que puede simplificar el proceso. Consulta Autentica como cuenta de servicio para obtener más información.

  • Si la cuenta de servicio no es el propietario del proyecto, sigue las instrucciones a continuación.

En cualquier caso, el alcance aplicable para la API Grupos de Cloud Identity es https://www.googleapis.com/auth/cloud-identity.groups.

  1. Genera un token de acceso con la credencial que acabas de crear.

    Java

    GoogleCredential credential = new GoogleCredential.Builder()
        .setTransport(httpTransport)
        .setJsonFactory(JSON_FACTORY)
        .setServiceAccountId(emailAddress)
        .setServiceAccountPrivateKeyFromP12File(new File("MyProject.p12"))
        .setServiceAccountScopes(ImmutableList.of("https://www.googleapis.com/auth/cloud-identity.groups"))
        .build();
    

    Mantén el token de acceso que se genera.

Código completo para generar un token de acceso para una cuenta de servicio

Java

GenerateServiceAccountOauth2Token.java

package com.google.tools;

import com.google.api.client.googleapis.auth.oauth2.GoogleCredential;
import com.google.api.client.http.HttpTransport;
import com.google.api.client.http.javanet.NetHttpTransport;
import com.google.api.client.json.JsonFactory;
import com.google.api.client.json.gson.GsonFactory;
import com.google.common.collect.ImmutableList;
import java.io.FileInputStream;

/** Command line tool to generate Oauth2 token for a given service account
/** without domain wide delegation. */
public final class GenerateServiceAccountOauth2Token {

  private static final ImmutableList<String> API_SCOPES =
      ImmutableList.of(
          "https://www.googleapis.com/auth/cloud-identity.groups",
          "https://www.googleapis.com/auth/admin.directory.group",
          "https://www.googleapis.com/auth/admin.directory.group.member",
          "https://www.googleapis.com/auth/apps.groups.settings");

  public static void main(final String[] args) throws Exception {
    String accessToken = getTokenFromJsonKey();
    System.out.println("Token: " + accessToken);
  }

  private static String getTokenFromJsonKey() throws Exception {
    GoogleCredential credential =
        GoogleCredential.fromStream(
            new FileInputStream(
                "<path for json file>"),
            new NetHttpTransport(),
            GsonFactory.getDefaultInstance());
    System.out.println("ServiceAccountId=" + credential.getServiceAccountId());

    HttpTransport httpTransport = new NetHttpTransport();
    JsonFactory jsonFactory = GsonFactory.getDefaultInstance();
    GoogleCredential.Builder builder =
        new GoogleCredential.Builder()
            .setServiceAccountPrivateKey(credential.getServiceAccountPrivateKey())
            .setServiceAccountPrivateKeyId(credential.getServiceAccountPrivateKeyId())
            .setServiceAccountId(credential.getServiceAccountId())
            .setTransport(httpTransport)
            .setJsonFactory(jsonFactory)
            .setServiceAccountScopes(API_SCOPES)
            .setClock(credential.getClock());
    credential = builder.build();
    if (!credential.refreshToken()) {
      throw new Exception("Failed to fetch access token.");
    }
    return credential.getAccessToken();
  }
}

Regla de compilación

java_binary(
  name = "generate_oauth2_token",
  srcs = ["GenerateServiceAccountOauth2Token.java"],
  main_class = "com.google.tools.GenerateServiceAccountOauth2Token",
  deps = [
      "//java/com/google/api/client/googleapis/auth/oauth2",
      "//java/com/google/api/client/googleapis/javanet",
      "//java/com/google/api/client/http",
      "//java/com/google/api/client/http/javanet",
      "//java/com/google/common/base",
      "//java/com/google/common/collect",
      "//third_party/java/google_http_java_client:gson",
      "//third_party/java/google_http_java_client:json",
  ],
)

Prueba la cuenta de servicio

  1. Prueba cualquier llamada a la API de Grupos con las credenciales de la cuenta de servicio: crea un grupo, agrega usuarios, actualiza la configuración de los grupos, etcétera.

  2. Consulta los registros de auditoría en la sección Informes de la Consola del administrador de Google. Deberías ver la cuenta de servicio como el actor para los cambios relacionados con el grupo. Consulta Registra eventos para obtener más información.

    De forma alternativa, puedes usar las API para acceder a los registros de auditoría. Para verificar con el Explorador de API de informes, asegúrate de usar tus credenciales OAuth de administrador.

Autentica como una cuenta de servicio con delegación de todo el dominio

Si eres un administrador que gestiona grupos de identidad, o si deseas proporcionar una cuenta con privilegios de dominio para poder gestionar Grupos de Google en nombre de administradores, debes autenticarte como cuenta de servicio.

Para obtener detalles sobre cómo configurar la delegación de todo el dominio, consulta Cómo controlar el acceso a la API con la delegación de todo el dominio.

Para autenticar como cuenta de servicio, consulta cómo usar OAuth 2.0 para aplicaciones de servidor a servidor. Cuando inicialices la credencial en el código, especifica la dirección de correo electrónico en la que actúa la cuenta de servicio mediante un llamado a with_subject() en la credencial. Por ejemplo:

Python

credentials = service_account.Credentials.from_service_account_file(
  SERVICE_ACCOUNT_FILE, scopes=SCOPES).with_subject(delegated_email)

Crea una instancia de un cliente

En el siguiente ejemplo, se muestra cómo crear una instancia de un cliente mediante las credenciales de la cuenta de servicio. Si quieres autenticarte como usuario final, reemplaza el objeto credential de la cuenta de servicio por la credential que obtuviste antes en Usa OAuth 2.0 para aplicaciones de servidor web.

Python

from google.oauth2 import service_account
import googleapiclient.discovery

SCOPES = ['https://www.googleapis.com/auth/cloud-identity.groups']
SERVICE_ACCOUNT_FILE = '/path/to/service-account-file.json'

def create_service():
  credentials = service_account.Credentials.from_service_account_file(
    SERVICE_ACCOUNT_FILE, scopes=SCOPES)
  delegated_credentials = credentials.with_subject('user@example.org')

  service_name = 'cloudidentity'
  api_version = 'v1'
  service = googleapiclient.discovery.build(
    service_name,
    api_version,
    credentials=delegated_credentials)

  return service

Ahora puedes comenzar a realizar llamadas a la API de Grupos.