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 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

Sugerencia: Si la cuenta de servicio no necesita acceder a todos los grupos, considera convertirla en propietaria de los grupos de interés. No es necesario asignar la función de administrador de grupo en este caso.

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 para desarrolladores, selecciona IAM y administración > Cuentas de servicio y haz clic en la cuenta de servicio que deseas usar con la API de Grupos.

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

  3. 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.

  4. 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.jackson2.JacksonFactory;
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(),
            new JacksonFactory());
    System.out.println("ServiceAccountId=" + credential.getServiceAccountId());

    HttpTransport httpTransport = new NetHttpTransport();
    JacksonFactory jsonFactory = new JacksonFactory();
    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/api/client/json",
      "//java/com/google/api/client/json/jackson2",
      "//java/com/google/common/base",
      "//java/com/google/common/collect",
  ],
)

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 con acceso a grupos de identidad, o si deseas proporcionar una cuenta con privilegios de todo el dominio para que pueda administrar Grupos de Google en nombre de administradores, debes autenticarte como cuenta de servicio y otorgarle los privilegios para todo el dominio.

Sigue los pasos que aparecen a continuación para autenticar la cuenta de servicio y configurar la delegación de todo el dominio.

  1. Autentica como cuenta de servicio. Consulta cómo usar OAuth 2.0 para aplicaciones de servidor a servidor. Luego, sigue los pasos que se indican a continuación para lo siguiente:

  2. Dirígete a la página Cuentas de servicio en Cloud Console.

    Ir a la página Cuentas de servicio

  3. Haz clic en Seleccionar un proyecto, elige uno y haz clic en Abrir.

  4. Selecciona tu cuenta de servicio y, luego, haz clic en Editar.

  5. Haz clic en Mostrar delegación de todo el dominio.

  6. Selecciona Habilitar la delegación de todo el dominio de Google Workspace.

  7. Haga clic en Save.

Luego, 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=credentials)

  return service

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