Crea credenciales de corta duración para una cuenta de servicio

En esta página, se explica cómo crear credenciales de corta duración para una cuenta de servicio, que puedes usar para actuar en nombre de la cuenta de servicio. Según el tipo de token que crees, el token de corta duración proporciona la identidad (para los tokens de ID) o los permisos (para los tokens de acceso) asociados a la cuenta de servicio.

Si la arquitectura del sistema requiere que uses una serie de llamadas de generación de tokens, puedes usar una cadena de delegación que consta de varias cuentas de servicio. En la mayoría de los casos, el método directo, como se explica en esta página, es suficiente.

Antes de comenzar

Crea un token de acceso de corta duración

La mayoría de las APIs de Google aceptan tokens de acceso para la autenticación. Cuando generas un token de acceso mediante el uso de la identidad de una cuenta de servicio, el token de acceso viene sin un token de actualización, lo que significa que cuando el token caduca, debes repetir el proceso de uso de la identidad para generar uno nuevo.

Para obtener más información, consulta Tokens de acceso.

Para crear un token de acceso de corta duración, completa estas tareas:

Otorga los permisos necesarios

Una solicitud directa involucra dos identidades: el emisor que solicita la credencial y la cuenta de servicio para la que se crea la credencial. La forma en que configuras los permisos depende de si el emisor se autentica como una cuenta de servicio o como una Cuenta de Google.

Si deseas ejecutar un comando de la CLI de gcloud o REST en esta página en un entorno de desarrollo local, el emisor puede estar representado por credenciales de usuario. Para las cargas de trabajo automatizadas, como una aplicación que se ejecuta en Compute Engine, el emisor debe estar representado por una cuenta de servicio.

Cuenta de servicio

Cuando la aplicación que realiza la llamada usa una cuenta de servicio como su identidad, se involucran las siguientes principales:

  • Cuenta de servicio del emisor (CALLER_SA)

    Esta cuenta de servicio representa la aplicación que realiza la llamada, que emite la solicitud para las credenciales de corta duración.

  • Cuenta de servicio con privilegios (PRIV_SA)

    A esta cuenta de servicio se le otorgan los roles de IAM necesarios para el token de corta duración. Esta es la cuenta de servicio para la que se crea el token de corta duración.

Para otorgar permisos CALLER_SA para crear credenciales de corta duración para PRIV_SA, otorgas el rol de creador del token de la cuenta de servicio CALLER_SA (roles/iam.serviceAccountTokenCreator) en PRIV_SA.

Otorga el rol necesario en PRIV_SA:

Consola

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

    Ir a Cuentas de servicio

  2. Selecciona un proyecto.
  3. Haz clic en la dirección de correo electrónico de la cuenta de servicio con privilegios, PRIV_SA.
  4. Haz clic en la pestaña Permisos.
  5. En Principales con acceso a esta cuenta de servicio, haz clic en Otorgar acceso.
  6. Ingresa la dirección de correo electrónico de la cuenta de servicio del emisor, CALLER_SA.

    Por ejemplo, demo@my-project.iam.gserviceaccount.com.

  7. Selecciona el rol de Creador de tokens de cuenta de servicio (roles/iam.serviceAccountTokenCreator).
  8. Haz clic en Guardar para otorgar el rol a la cuenta de servicio.

gcloud

El comando gcloud iam service-accounts add-iam-policy-binding otorga un rol a una cuenta de servicio.

Antes de usar cualquiera de los datos de comando a continuación, realiza los siguientes reemplazos:

  • PRIV_SA: Es la dirección de correo electrónico de la cuenta de servicio con privilegios para la que se genera el token.
  • CALLER_SA: Es la dirección de correo electrónico de la cuenta de servicio que representa a la aplicación que solicita el token de corta duración.

Ejecuta el siguiente comando:

Linux, macOS o Cloud Shell

gcloud iam service-accounts add-iam-policy-binding PRIV_SA \
    --member=serviceAccount:CALLER_SA --role=roles/iam.serviceAccountTokenCreator --format=json

Windows (PowerShell)

gcloud iam service-accounts add-iam-policy-binding PRIV_SA `
    --member=serviceAccount:CALLER_SA --role=roles/iam.serviceAccountTokenCreator --format=json

Windows (cmd.exe)

gcloud iam service-accounts add-iam-policy-binding PRIV_SA ^
    --member=serviceAccount:CALLER_SA --role=roles/iam.serviceAccountTokenCreator --format=json

Deberías recibir una respuesta similar a la que figura a continuación:

Updated IAM policy for serviceAccount [PRIV_SA].
{
  "bindings": [
    {
      "members": [
        "serviceAccount:CALLER_SA"
      ],
      "role": "roles/iam.serviceAccountTokenCreator"
    }
  ],
  "etag": "BwXhCB4eyjY=",
  "version": 1
}

REST

  1. Lee la política de permisos para PRIV_SA:

    El método serviceAccounts.getIamPolicy obtiene la política de permisos de una cuenta de servicio.

    Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:

    • PROJECT_ID: El ID del proyecto de Google Cloud Los ID de proyecto son strings alfanuméricas, como my-project.
    • PRIV_SA: Es la dirección de correo electrónico de la cuenta de servicio con privilegios para la que se crea el token de corta duración.
    • POLICY_VERSION: Es la versión de la política que se mostrará. Las solicitudes deben especificar la versión de política más reciente, que es la versión de política 3. Consulta Especifica una versión de política cuando obtienes una política para obtener más detalles.

    Método HTTP y URL:

    POST https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts/PRIV_SA:getIamPolicy

    Cuerpo JSON de la solicitud:

    {
      "options": {
        "requestedPolicyVersion": POLICY_VERSION
      }
    }
    

    Para enviar tu solicitud, expande una de estas opciones:

    Deberías recibir una respuesta JSON similar a la que se muestra a continuación:

    {
      "version": 1,
      "etag": "BwWKmjvelug=",
      "bindings": [
        {
          "role": "roles/serviceAccountAdmin",
          "members": [
            "user:admin@example.com"
          ]
        }
      ]
    }
    

    Si no otorgaste ningún rol en la cuenta de servicio, la respuesta contendrá solo un valor etag. Incluye ese valor de etag en el siguiente paso.

  2. Modifica la política de permiso para otorgar a CALLER_SA el rol de Creador de tokens de cuenta de servicio (roles/iam.serviceAccountTokenCreator).

    Por ejemplo, para modificar la respuesta de muestra del paso anterior, agrega lo siguiente:

      {
        "version": 1,
        "etag": "BwWKmjvelug=",
        "bindings": [
          {
            "role": "roles/serviceAccountAdmin",
            "members": [
              "user:admin@example.com"
            ]
          },
          {
            "role": "roles/iam.serviceAccountTokenCreator",
            "members": [
              "serviceAccount:CALLER_SA"
            ]
          }
        ]
      }
  3. Escribe la política de permisos actualizada:

    Mediante el método serviceAccounts.setIamPolicy, se configura una política de permisos actualizada para la cuenta de servicio.

    Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:

    • PROJECT_ID: El ID del proyecto de Google Cloud Los ID de proyecto son strings alfanuméricas, como my-project.
    • PRIV_SA: Es la dirección de correo electrónico de la cuenta de servicio con privilegios para la que se crea el token de corta duración.
    • POLICY_VERSION: Es la versión de la política que se mostrará. Las solicitudes deben especificar la versión de política más reciente, que es la versión de política 3. Consulta Especifica una versión de política cuando obtienes una política para obtener más detalles.
    • POLICY: Es una representación JSON de la política que deseas establecer. Para obtener más información sobre el formato de una política, consulta la Referencia de políticas.

      Por ejemplo, para establecer la política de permisos que se muestra en el paso anterior, reemplaza POLICY por lo siguiente, donde CALLER_SA es la cuenta de servicio que crea el token de corta duración:

      {
        "version": 1,
        "etag": "BwWKmjvelug=",
        "bindings": [
          {
            "role": "roles/serviceAccountAdmin",
            "members": [
              "user:admin@example.com"
            ]
          },
          {
            "role": "roles/iam.serviceAccountTokenCreator",
            "members": [
              "serviceAccount:CALLER_SA"
            ]
          }
        ]
      }

    HTTP method and URL:

    POST https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts/PRIV_SA

    Cuerpo JSON de la solicitud:

    {
      "policy": POLICY
    }
    

    Para enviar tu solicitud, expande una de estas opciones:

    La respuesta contiene la política de permisos actualizada:

Credenciales de usuario

Cuando quieras usar Google Cloud CLI para generar tokens de corta duración o desees generar tokens de corta duración desde un entorno de desarrollo local, puedes usar una cuenta de usuario a fin de generar los tokens. A menudo, puedes usar tu propia Cuenta de Google.

Cuando usas una cuenta de usuario para generar tokens de corta duración, se involucran las siguientes identidades:

  • Cuenta de Google del emisor (CALLER_ACCOUNT)

    Esta cuenta de usuario se usa a fin de generar credenciales de corta duración para la cuenta de servicio con privilegios.

  • Cuenta de servicio con privilegios (PRIV_SA)

    A esta cuenta de servicio se le otorgan los roles de IAM necesarios para el token de corta duración. Esta es la cuenta de servicio para la que se crea el token de corta duración.

A fin de habilitar CALLER_ACCOUNT para crear credenciales de corta duración para PRIV_SA, otorga a CALLER_ACCOUNT el rol de Creador de tokens de cuenta de servicio (roles/iam.serviceAccountTokenCreator) en PRIV_SA.

Otorga el rol necesario en PRIV_SA:

Consola

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

    Ir a Cuentas de servicio

  2. Selecciona un proyecto.
  3. Haz clic en la dirección de correo electrónico de la cuenta de servicio con privilegios, PRIV_SA.
  4. Haz clic en la pestaña Permisos.
  5. En Principales con acceso a esta cuenta de servicio, haz clic en Otorgar acceso.
  6. Ingresa la dirección de correo electrónico de la Cuenta de Google del emisor, CALLER_ACCOUNT.

    Por ejemplo, username@google.com.

  7. Selecciona el rol de Creador de tokens de cuenta de servicio (roles/iam.serviceAccountTokenCreator).
  8. Haz clic en Guardar para otorgar el rol a la cuenta de usuario.

gcloud

El comando gcloud iam service-accounts add-iam-policy-binding otorga un rol a una cuenta de servicio.

Antes de usar cualquiera de los datos de comando a continuación, realiza los siguientes reemplazos:

  • PRIV_SA: Es la dirección de correo electrónico de la cuenta de servicio con privilegios para la que se genera el token.
  • CALLER_ACCOUNT: Es la dirección de correo electrónico de la cuenta de usuario que se usa para solicitar el token de corta duración.

Ejecuta el siguiente comando:

Linux, macOS o Cloud Shell

gcloud iam service-accounts add-iam-policy-binding PRIV_SA \
    --member=user:CALLER_ACCOUNT --role=roles/iam.serviceAccountTokenCreator --format=json

Windows (PowerShell)

gcloud iam service-accounts add-iam-policy-binding PRIV_SA `
    --member=user:CALLER_ACCOUNT --role=roles/iam.serviceAccountTokenCreator --format=json

Windows (cmd.exe)

gcloud iam service-accounts add-iam-policy-binding PRIV_SA ^
    --member=user:CALLER_ACCOUNT --role=roles/iam.serviceAccountTokenCreator --format=json

Deberías recibir una respuesta similar a la que figura a continuación:

Updated IAM policy for serviceAccount [PRIV_SA].
{
  "bindings": [
    {
      "members": [
        "user:CALLER_ACCOUNT"
      ],
      "role": "roles/iam.serviceAccountTokenCreator"
    }
  ],
  "etag": "BwX1ZbefjXU=",
  "version": 1
}

REST

  1. Lee la política de permisos para PRIV_SA:

    El método serviceAccounts.getIamPolicy obtiene la política de permisos de una cuenta de servicio.

    Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:

    • PROJECT_ID: El ID del proyecto de Google Cloud Los ID de proyecto son strings alfanuméricas, como my-project.
    • PRIV_SA: Es la dirección de correo electrónico de la cuenta de servicio con privilegios para la que se crea el token de corta duración.
    • POLICY_VERSION: Es la versión de la política que se mostrará. Las solicitudes deben especificar la versión de política más reciente, que es la versión de política 3. Consulta Especifica una versión de política cuando obtienes una política para obtener más detalles.

    Método HTTP y URL:

    POST https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts/PRIV_SA:getIamPolicy

    Cuerpo JSON de la solicitud:

    {
      "options": {
        "requestedPolicyVersion": POLICY_VERSION
      }
    }
    

    Para enviar tu solicitud, expande una de estas opciones:

    Deberías recibir una respuesta JSON similar a la que se muestra a continuación:

    {
      "version": 1,
      "etag": "BwWKmjvelug=",
      "bindings": [
        {
          "role": "roles/serviceAccountAdmin",
          "members": [
            "user:admin@example.com"
          ]
        }
      ]
    }
    

    Si no otorgaste ningún rol en la cuenta de servicio, la respuesta contendrá solo un valor etag. Incluye ese valor de etag en el siguiente paso.

  2. Modifica la política de permiso para otorgar a CALLER_ACCOUNT el rol de Creador de tokens de cuenta de servicio (roles/iam.serviceAccountTokenCreator).

    Por ejemplo, para modificar la respuesta de muestra del paso anterior, agrega lo siguiente:

    {
      "version": 1,
      "etag": "BwWKmjvelug=",
      "bindings": [
        {
          "role": "roles/serviceAccountAdmin",
          "members": [
            "user:admin@example.com"
          ]
        },
        {
          "role": "roles/iam.serviceAccountTokenCreator",
          "members": [
            "user:CALLER_ACCOUNT"
          ]
        }
      ]
    }
  3. Escribe la política de permisos actualizada:

    Mediante el método serviceAccounts.setIamPolicy, se configura una política de permisos actualizada para la cuenta de servicio.

    Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:

    • PROJECT_ID: El ID del proyecto de Google Cloud Los ID de proyecto son strings alfanuméricas, como my-project.
    • PRIV_SA: Es la dirección de correo electrónico de la cuenta de servicio con privilegios para la que se crea el token de corta duración.
    • POLICY_VERSION: Es la versión de la política que se mostrará. Las solicitudes deben especificar la versión de política más reciente, que es la versión de política 3. Consulta Especifica una versión de política cuando obtienes una política para obtener más detalles.
    • POLICY: Es una representación JSON de la política que deseas establecer. Para obtener más información sobre el formato de una política, consulta la Referencia de políticas.

      Por ejemplo, para establecer la política de permisos que se muestra en el paso anterior, reemplaza POLICY por lo siguiente, donde CALLER_ACCOUNT es la cuenta de usuario que crea el token de corta duración:

      {
        "version": 1,
        "etag": "BwWKmjvelug=",
        "bindings": [
          {
            "role": "roles/serviceAccountAdmin",
            "members": [
              "user:admin@example.com"
            ]
          },
          {
            "role": "roles/iam.serviceAccountTokenCreator",
            "members": [
              "user:CALLER_ACCOUNT"
            ]
          }
        ]
      }

    HTTP method and URL:

    POST https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts/PRIV_SA

    Cuerpo JSON de la solicitud:

    {
      "policy": POLICY
    }
    

    Para enviar tu solicitud, expande una de estas opciones:

    La respuesta contiene la política de permisos actualizada:

Genera el token de acceso

Puedes generar un token de acceso de OAuth 2.0 con la CLI de gcloud, la API de REST o las bibliotecas cliente de Cloud y las bibliotecas cliente de la API de Google.

Si usas la API de REST y tu sistema está configurado para permitir la extensión de la vida útil de los tokens, puedes crear un token con una vida útil más larga que la predeterminada. Google Cloud CLI no admite la configuración de una vida útil para el token.

Los siguientes ejemplos están diseñados para usarse en un entorno de desarrollo local; el emisor debe estar representado por una cuenta de usuario, en lugar de una cuenta de servicio.

Si deseas generar un token de acceso de OAuth 2.0 para una cuenta de servicio, haz lo siguiente:

gcloud

  1. Accede a Google Cloud CLI como la Cuenta de Google del emisor.

    gcloud auth login CALLER_ACCOUNT
  2. Genera un token para la cuenta de servicio.

    El comando gcloud auth print-access-token genera un token de acceso de OAuth 2.0 para una cuenta de servicio.

    Antes de usar cualquiera de los datos de comando a continuación, realiza los siguientes reemplazos:

    • PRIV_SA: Es la dirección de correo electrónico de la cuenta de servicio con privilegios para la que se crea el token de corta duración.

    Ejecuta el siguiente comando:

    Linux, macOS o Cloud Shell

    gcloud auth print-access-token --impersonate-service-account=PRIV_SA

    Windows (PowerShell)

    gcloud auth print-access-token --impersonate-service-account=PRIV_SA

    Windows (cmd.exe)

    gcloud auth print-access-token --impersonate-service-account=PRIV_SA

    Deberías recibir una respuesta similar a la que figura a continuación:

    WARNING: This command is using service account impersonation. All API calls will be executed as
    [my-sa@my-project.iam.gserviceaccount.com].
    ya29.c.b0AXv0zTPnzTnDV8F8Aj5Fgy46Yf2v_v8eZIoKq7xGpfbpXuy23aQ1693m3gAuE8AZga7w6kdagN7a9bfdDYbdeoGY0CMHOClsCwIdutL7k_RFC672lOCbUgF5hS8Iu2nCA8hle-11LJXBLmaxFmH08ZTBJLuDrWSNd8cYqGYFunSC1K1qLIPBF18tsa0hxVgKPucI8b1A9L8_MK1JGLGcr0n7-zY77_lmbcdODG3NmIbLOGWOutjJgqSO_YoeCKK2QTUZIp5PG7RkKlXWnmYJA9pEahzNoQrs5sWZctc2bia9af_ITzqqlXC9h1Kj5-me6e8rd734MJvpagqYazRk0gGWpMb03XmMGpgPc_FBp4pnX9rGOzW83SNpcDz8zeFO1Q0Bo3N7CuZougjRce0y8I2_4rtw5ME_nV3wrCWa..................................................................................................................................................................................................................................................................................................
    

REST

Mediante el método serviceAccounts.generateAccessToken de la API de credenciales de la cuenta de servicio, se genera un token de acceso de OAuth 2.0 para una cuenta de servicio.

Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:

  • PRIV_SA: Es la dirección de correo electrónico de la cuenta de servicio con privilegios para la que se crea el token de corta duración.
  • LIFETIME: Es la cantidad de tiempo que transcurre hasta que el token de acceso caduca, expresada en segundos. Por ejemplo, 300s.

    De forma predeterminada, la vida útil máxima del token es de 1 hora (3,600 segundos). Para extender la vida útil máxima de estos tokens a 12 horas (43,200 segundos), agrega la cuenta de servicio a una política de la organización que incluya la restricción de lista constraints/iam.allowServiceAccountCredentialLifetimeExtension.

Método HTTP y URL:

POST https://iamcredentials.googleapis.com/v1/projects/-/serviceAccounts/PRIV_SA:generateAccessToken

Cuerpo JSON de la solicitud:

{
  "scope": [
    "https://www.googleapis.com/auth/cloud-platform"
  ],
  "lifetime": "LIFETIME"
}

Para enviar tu solicitud, expande una de estas opciones:

Si la solicitud generateAccessToken tiene éxito, el cuerpo de la respuesta contendrá un token de acceso de OAuth 2.0 y un tiempo de caducidad. El accessToken se puede usar para autenticar una solicitud en nombre de la cuenta de servicio hasta que se haya alcanzado el expireTime.

{
  "accessToken": "eyJ0eXAi...NiJ9",
  "expireTime": "2020-04-07T15:01:23.045123456Z"
}

Go

Antes de poder usar este código de muestra, debes configurar las credenciales predeterminadas de la aplicación para la Cuenta de Google del emisor al que le otorgaste el rol necesario para actuar en nombre de la cuenta de servicio con privilegios.

import (
	"context"
	"fmt"
	"io"
	"time"

	"golang.org/x/oauth2/google"
	"google.golang.org/api/impersonate"
	"google.golang.org/api/option"
)

// getAccessTokenFromImpersonatedCredentials uses a service account (SA1) to impersonate
// another service account (SA2) and obtain OAuth2 token for the impersonated account.
// To obtain a token for SA2, SA1 should have the "roles/iam.serviceAccountTokenCreator" permission on SA2.
func getAccessTokenFromImpersonatedCredentials(w io.Writer, impersonatedServiceAccount, scope string) error {
	// impersonatedServiceAccount := "name@project.service.gserviceaccount.com"
	// scope := "https://www.googleapis.com/auth/cloud-platform"

	ctx := context.Background()

	// Construct the GoogleCredentials object which obtains the default configuration from your
	// working environment.
	credentials, err := google.FindDefaultCredentials(ctx, scope)
	if err != nil {
		fmt.Fprintf(w, "failed to generate default credentials: %v", err)
		return fmt.Errorf("failed to generate default credentials: %w", err)
	}

	ts, err := impersonate.CredentialsTokenSource(ctx, impersonate.CredentialsConfig{
		TargetPrincipal: impersonatedServiceAccount,
		Scopes:          []string{scope},
		Lifetime:        300 * time.Second,
		// delegates: The chained list of delegates required to grant the final accessToken.
		// For more information, see:
		// https://cloud.google.com/iam/docs/create-short-lived-credentials-direct#sa-credentials-permissions
		// Delegates is NOT USED here.
		Delegates: []string{},
	}, option.WithCredentials(credentials))
	if err != nil {
		fmt.Fprintf(w, "CredentialsTokenSource error: %v", err)
		return fmt.Errorf("CredentialsTokenSource error: %w", err)
	}

	// Get the OAuth2 token.
	// Once you've obtained the OAuth2 token, you can use it to make an authenticated call.
	t, err := ts.Token()
	if err != nil {
		fmt.Fprintf(w, "failed to receive token: %v", err)
		return fmt.Errorf("failed to receive token: %w", err)
	}
	fmt.Fprintf(w, "Generated OAuth2 token with length %d.\n", len(t.AccessToken))

	return nil
}

Java

Antes de poder usar este código de muestra, debes configurar las credenciales predeterminadas de la aplicación para la Cuenta de Google del emisor al que le otorgaste el rol necesario para actuar en nombre de la cuenta de servicio con privilegios.


package com.google.cloud.auth.samples;

import com.google.auth.oauth2.GoogleCredentials;
import com.google.auth.oauth2.ImpersonatedCredentials;
import java.io.IOException;
import java.util.Arrays;
import java.util.List;

public class AccessTokenFromImpersonatedCredentials {

  public static void main(String[] args) throws IOException {
    // TODO(Developer): Replace the below variables before running the code.

    // Provide the scopes that you might need to request access to Google APIs,
    // depending on the level of access you need.
    // This example uses the cloud-wide scope and uses IAM to narrow the permissions.
    // https://cloud.google.com/docs/authentication/external/authorization-gcp
    // For more information, see: https://developers.google.com/identity/protocols/oauth2/scopes
    String scope = "https://www.googleapis.com/auth/cloud-platform";

    // The name of the privilege-bearing service account for whom the credential is created.
    String impersonatedServiceAccount = "name@project.service.gserviceaccount.com";

    getAccessToken(impersonatedServiceAccount, scope);
  }

  // Use a service account (SA1) to impersonate another service account (SA2) and obtain an ID token
  // for the impersonated account.
  // To obtain a token for SA2, SA1 should have the "roles/iam.serviceAccountTokenCreator"
  // permission on SA2.
  public static void getAccessToken(
      String impersonatedServiceAccount, String scope) throws IOException {

    // Construct the GoogleCredentials object which obtains the default configuration from your
    // working environment.
    GoogleCredentials googleCredentials = GoogleCredentials.getApplicationDefault();

    // delegates: The chained list of delegates required to grant the final accessToken.
    // For more information, see:
    // https://cloud.google.com/iam/docs/create-short-lived-credentials-direct#sa-credentials-permissions
    // Delegate is NOT USED here.
    List<String> delegates = null;

    // Create the impersonated credential.
    ImpersonatedCredentials impersonatedCredentials =
        ImpersonatedCredentials.newBuilder()
            .setSourceCredentials(googleCredentials)
            .setTargetPrincipal(impersonatedServiceAccount)
            .setScopes(Arrays.asList(scope))
            .setLifetime(300)
            .setDelegates(delegates)
            .build();

    // Get the OAuth2 token.
    // Once you've obtained the OAuth2 token, you can use it to make an authenticated call.
    impersonatedCredentials.refresh();
    String accessToken = impersonatedCredentials.getAccessToken().getTokenValue();
    System.out.println("Generated access token.");
  }
}

Node.js

Antes de poder usar este código de muestra, debes configurar las credenciales predeterminadas de la aplicación para la Cuenta de Google del emisor al que le otorgaste el rol necesario para actuar en nombre de la cuenta de servicio con privilegios.

/**
 * TODO(developer):
 *  Uncomment and replace these variables before running the sample.
 */
// const impersonatedServiceAccount = 'name@project.service.gserviceaccount.com';
// const scope = 'https://www.googleapis.com/auth/cloud-platform';

const {GoogleAuth, Impersonated} = require('google-auth-library');

async function getAccessTokenFromImpersonatedCredentials() {
  const googleAuth = new GoogleAuth({
    scopes: scope,
  });
  // Construct the GoogleCredentials object which obtains the default configuration from your
  // working environment.
  const {credential} = await googleAuth.getApplicationDefault();

  // delegates: The chained list of delegates required to grant the final accessToken.
  // For more information, see:
  // https://cloud.google.com/iam/docs/create-short-lived-credentials-direct#sa-credentials-permissions
  // Delegate is NOT USED here.
  const delegates = [];

  // Create the impersonated credential.
  const impersonatedCredentials = new Impersonated({
    sourceClient: credential,
    delegates,
    targetPrincipal: impersonatedServiceAccount,
    targetScopes: [scope],
    lifetime: 300,
  });

  // Get the OAuth2 token.
  // Once you've obtained the OAuth2 token, you can use it to make an authenticated call
  // to the target audience.
  const resp = await impersonatedCredentials.getAccessToken();
  // Token is in resp.token.
  console.log('Generated OAuth2 token with length %s', resp.token.length);
}

getAccessTokenFromImpersonatedCredentials();

Python

Antes de poder usar este código de muestra, debes configurar las credenciales predeterminadas de la aplicación para la Cuenta de Google del emisor al que le otorgaste el rol necesario para actuar en nombre de la cuenta de servicio con privilegios.

def accesstoken_from_impersonated_credentials(
    impersonated_service_account: str, scope: str
):
    from google.auth import impersonated_credentials
    import google.auth.transport.requests

    """
      Use a service account (SA1) to impersonate another service account (SA2)
      and obtain an ID token for the impersonated account.
      To obtain a token for SA2, SA1 should have the
      "roles/iam.serviceAccountTokenCreator" permission on SA2.

    Args:
        impersonated_service_account: The name of the privilege-bearing service account for whom the credential is created.
            Examples: name@project.service.gserviceaccount.com

        scope: Provide the scopes that you might need to request to access Google APIs,
            depending on the level of access you need.
            For this example, we use the cloud-wide scope and use IAM to narrow the permissions.
            https://cloud.google.com/docs/authentication#authorization_for_services
            For more information, see: https://developers.google.com/identity/protocols/oauth2/scopes
    """

    # Construct the GoogleCredentials object which obtains the default configuration from your
    # working environment.
    credentials, project_id = google.auth.default()

    # Create the impersonated credential.
    target_credentials = impersonated_credentials.Credentials(
        source_credentials=credentials,
        target_principal=impersonated_service_account,
        # delegates: The chained list of delegates required to grant the final accessToken.
        # For more information, see:
        # https://cloud.google.com/iam/docs/create-short-lived-credentials-direct#sa-credentials-permissions
        # Delegate is NOT USED here.
        delegates=[],
        target_scopes=[scope],
        lifetime=300,
    )

    # Get the OAuth2 token.
    # Once you've obtained the OAuth2 token, use it to make an authenticated call
    # to the target audience.
    request = google.auth.transport.requests.Request()
    target_credentials.refresh(request)
    # The token field is target_credentials.token.
    print("Generated OAuth2 token.")

Crea un token de ID de OpenID Connect (OIDC)

Los tokens de ID siguen la especificación de OpenID Connect (OIDC). Una cantidad limitada de servicios y aplicaciones aceptan los tokens de ID.

Si deseas obtener más información, consulta Tokens de ID y Autenticación para aplicaciones alojadas en Cloud Run o Cloud Functions.

Para crear un token de ID, completa estas tareas:

Otorga los permisos necesarios

Una solicitud directa involucra dos identidades: el emisor que solicita la credencial y la cuenta de servicio para la que se crea la credencial. La forma en que configuras los permisos depende de si el emisor se autentica como una cuenta de servicio o como una Cuenta de Google.

Si deseas ejecutar un comando de la CLI de gcloud o REST en esta página en un entorno de desarrollo local, el emisor puede estar representado por credenciales de usuario. Para las cargas de trabajo automatizadas, como una aplicación que se ejecuta en Compute Engine, el emisor debe estar representado por una cuenta de servicio.

Cuenta de servicio

Cuando la aplicación que realiza la llamada usa una cuenta de servicio como su identidad, se involucran las siguientes principales:

  • Cuenta de servicio del emisor (CALLER_SA)

    Esta cuenta de servicio representa la aplicación que realiza la llamada, que emite la solicitud para las credenciales de corta duración.

  • Cuenta de servicio con privilegios (PRIV_SA)

    A esta cuenta de servicio se le otorgan los roles de IAM necesarios para el token de corta duración. Esta es la cuenta de servicio para la que se crea el token de corta duración.

Para otorgar a CALLER_SA permisos a fin de crear credenciales de corta duración para PRIV_SA, otorga a CALLER_SA el rol de Creador de tokens de identidad de OpenID Connect para cuentas de servicio (roles/iam.serviceAccountOpenIdTokenCreator) en PRIV_SA.

Otorga el rol necesario en PRIV_SA:

Consola

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

    Ir a Cuentas de servicio

  2. Selecciona un proyecto.
  3. Haz clic en la dirección de correo electrónico de la cuenta de servicio con privilegios, PRIV_SA.
  4. Haz clic en la pestaña Permisos.
  5. En Principales con acceso a esta cuenta de servicio, haz clic en Otorgar acceso.
  6. Ingresa la dirección de correo electrónico de la cuenta de servicio del emisor, CALLER_SA.

    Por ejemplo, demo@my-project.iam.gserviceaccount.com.

  7. Selecciona el rol de Creador de tokens de identidad de OpenID Connect para cuentas de servicio (roles/iam.serviceAccountOpenIdTokenCreator).
  8. Haz clic en Guardar para otorgar el rol a la cuenta de servicio.

gcloud

El comando gcloud iam service-accounts add-iam-policy-binding otorga un rol a una cuenta de servicio.

Antes de usar cualquiera de los datos de comando a continuación, realiza los siguientes reemplazos:

  • PRIV_SA: Es la dirección de correo electrónico de la cuenta de servicio con privilegios para la que se genera el token.
  • CALLER_SA: Es la dirección de correo electrónico de la cuenta de servicio que representa a la aplicación que solicita el token de corta duración.

Ejecuta el siguiente comando:

Linux, macOS o Cloud Shell

gcloud iam service-accounts add-iam-policy-binding PRIV_SA \
    --member=serviceAccount:CALLER_SA --role=roles/iam.serviceAccountOpenIdTokenCreator --format=json

Windows (PowerShell)

gcloud iam service-accounts add-iam-policy-binding PRIV_SA `
    --member=serviceAccount:CALLER_SA --role=roles/iam.serviceAccountOpenIdTokenCreator --format=json

Windows (cmd.exe)

gcloud iam service-accounts add-iam-policy-binding PRIV_SA ^
    --member=serviceAccount:CALLER_SA --role=roles/iam.serviceAccountOpenIdTokenCreator --format=json

Deberías recibir una respuesta similar a la que figura a continuación:

Updated IAM policy for serviceAccount [PRIV_SA].
{
  "bindings": [
    {
      "members": [
        "serviceAccount:CALLER_SA"
      ],
      "role": "roles/iam.serviceAccountOpenIdTokenCreator"
    }
  ],
  "etag": "BwXhCB4eyjY=",
  "version": 1
}

REST

  1. Lee la política de permisos para PRIV_SA:

    El método serviceAccounts.getIamPolicy obtiene la política de permisos de una cuenta de servicio.

    Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:

    • PROJECT_ID: El ID del proyecto de Google Cloud Los ID de proyecto son strings alfanuméricas, como my-project.
    • PRIV_SA: Es la dirección de correo electrónico de la cuenta de servicio con privilegios para la que se crea el token de corta duración.
    • POLICY_VERSION: Es la versión de la política que se mostrará. Las solicitudes deben especificar la versión de política más reciente, que es la versión de política 3. Consulta Especifica una versión de política cuando obtienes una política para obtener más detalles.

    Método HTTP y URL:

    POST https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts/PRIV_SA:getIamPolicy

    Cuerpo JSON de la solicitud:

    {
      "options": {
        "requestedPolicyVersion": POLICY_VERSION
      }
    }
    

    Para enviar tu solicitud, expande una de estas opciones:

    Deberías recibir una respuesta JSON similar a la que se muestra a continuación:

    {
      "version": 1,
      "etag": "BwWKmjvelug=",
      "bindings": [
        {
          "role": "roles/serviceAccountAdmin",
          "members": [
            "user:admin@example.com"
          ]
        }
      ]
    }
    

    Si no otorgaste ningún rol en la cuenta de servicio, la respuesta contendrá solo un valor etag. Incluye ese valor de etag en el siguiente paso.

  2. Modifica la política de permisos para otorgar a CALLER_SA el rol de creador de tokens de identidad de OpenID Connect para cuentas de servicio (roles/iam.serviceAccountOpenIdTokenCreator).

    Por ejemplo, para modificar la respuesta de muestra del paso anterior, agrega lo siguiente:

      {
        "version": 1,
        "etag": "BwWKmjvelug=",
        "bindings": [
          {
            "role": "roles/serviceAccountAdmin",
            "members": [
              "user:admin@example.com"
            ]
          },
          {
            "role": "roles/iam.serviceAccountOpenIdTokenCreator",
            "members": [
              "serviceAccount:CALLER_SA"
            ]
          }
        ]
      }
  3. Escribe la política de permisos actualizada:

    Mediante el método serviceAccounts.setIamPolicy, se configura una política de permisos actualizada para la cuenta de servicio.

    Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:

    • PROJECT_ID: El ID del proyecto de Google Cloud Los ID de proyecto son strings alfanuméricas, como my-project.
    • PRIV_SA: Es la dirección de correo electrónico de la cuenta de servicio con privilegios para la que se crea el token de corta duración.
    • POLICY_VERSION: Es la versión de la política que se mostrará. Las solicitudes deben especificar la versión de política más reciente, que es la versión de política 3. Consulta Especifica una versión de política cuando obtienes una política para obtener más detalles.
    • POLICY: Es una representación JSON de la política que deseas establecer. Para obtener más información sobre el formato de una política, consulta la Referencia de políticas.

      Por ejemplo, para establecer la política de permisos que se muestra en el paso anterior, reemplaza POLICY por lo siguiente, donde CALLER_SA es la cuenta de servicio que crea el token de corta duración:

      {
        "version": 1,
        "etag": "BwWKmjvelug=",
        "bindings": [
          {
            "role": "roles/serviceAccountAdmin",
            "members": [
              "user:admin@example.com"
            ]
          },
          {
            "role": "roles/iam.serviceAccountOpenIdTokenCreator",
            "members": [
              "serviceAccount:CALLER_SA"
            ]
          }
        ]
      }

    HTTP method and URL:

    POST https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts/PRIV_SA

    Cuerpo JSON de la solicitud:

    {
      "policy": POLICY
    }
    

    Para enviar tu solicitud, expande una de estas opciones:

    La respuesta contiene la política de permisos actualizada:

Credenciales de usuario

Cuando quieras usar Google Cloud CLI para generar tokens de corta duración o desees generar tokens de corta duración desde un entorno de desarrollo local, puedes usar una cuenta de usuario a fin de generar los tokens. A menudo, puedes usar tu propia Cuenta de Google.

Cuando usas una cuenta de usuario para generar tokens de corta duración, se involucran las siguientes identidades:

  • Cuenta de Google del emisor (CALLER_ACCOUNT)

    Esta cuenta de usuario se usa a fin de generar credenciales de corta duración para la cuenta de servicio con privilegios.

  • Cuenta de servicio con privilegios (PRIV_SA)

    A esta cuenta de servicio se le otorgan los roles de IAM necesarios para el token de corta duración. Esta es la cuenta de servicio para la que se crea el token de corta duración.

A fin de habilitar CALLER_ACCOUNT para crear credenciales de corta duración para PRIV_SA, otorga a CALLER_ACCOUNT el rol de Creador de tokens de identidad de OpenID Connect para cuentas de servicio (roles/iam.serviceAccountOpenIdTokenCreator) en PRIV_SA.

Otorga el rol necesario en PRIV_SA:

Consola

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

    Ir a Cuentas de servicio

  2. Selecciona un proyecto.
  3. Haz clic en la dirección de correo electrónico de la cuenta de servicio con privilegios, PRIV_SA.
  4. Haz clic en la pestaña Permisos.
  5. En Principales con acceso a esta cuenta de servicio, haz clic en Otorgar acceso.
  6. Ingresa la dirección de correo electrónico de la Cuenta de Google del emisor, CALLER_ACCOUNT.

    Por ejemplo, username@google.com.

  7. Selecciona el rol de Creador de tokens de identidad de OpenID Connect para cuentas de servicio (roles/iam.serviceAccountOpenIdTokenCreator).
  8. Haz clic en Guardar para otorgar el rol a la cuenta de usuario.

gcloud

El comando gcloud iam service-accounts add-iam-policy-binding otorga un rol a una cuenta de servicio.

Antes de usar cualquiera de los datos de comando a continuación, realiza los siguientes reemplazos:

  • PRIV_SA: Es la dirección de correo electrónico de la cuenta de servicio con privilegios para la que se genera el token.
  • CALLER_ACCOUNT: Es la dirección de correo electrónico de la cuenta de usuario que se usa para solicitar el token de corta duración.

Ejecuta el siguiente comando:

Linux, macOS o Cloud Shell

gcloud iam service-accounts add-iam-policy-binding PRIV_SA \
    --member=user:CALLER_ACCOUNT --role=roles/iam.serviceAccountOpenIdTokenCreator --format=json

Windows (PowerShell)

gcloud iam service-accounts add-iam-policy-binding PRIV_SA `
    --member=user:CALLER_ACCOUNT --role=roles/iam.serviceAccountOpenIdTokenCreator --format=json

Windows (cmd.exe)

gcloud iam service-accounts add-iam-policy-binding PRIV_SA ^
    --member=user:CALLER_ACCOUNT --role=roles/iam.serviceAccountOpenIdTokenCreator --format=json

Deberías recibir una respuesta similar a la que figura a continuación:

Updated IAM policy for serviceAccount [PRIV_SA].
{
  "bindings": [
    {
      "members": [
        "user:CALLER_ACCOUNT"
      ],
      "role": "roles/iam.serviceAccountOpenIdTokenCreator"
    }
  ],
  "etag": "BwX1ZbefjXU=",
  "version": 1
}

REST

  1. Lee la política de permisos para PRIV_SA:

    El método serviceAccounts.getIamPolicy obtiene la política de permisos de una cuenta de servicio.

    Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:

    • PROJECT_ID: El ID del proyecto de Google Cloud Los ID de proyecto son strings alfanuméricas, como my-project.
    • PRIV_SA: Es la dirección de correo electrónico de la cuenta de servicio con privilegios para la que se crea el token de corta duración.
    • POLICY_VERSION: Es la versión de la política que se mostrará. Las solicitudes deben especificar la versión de política más reciente, que es la versión de política 3. Consulta Especifica una versión de política cuando obtienes una política para obtener más detalles.

    Método HTTP y URL:

    POST https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts/PRIV_SA:getIamPolicy

    Cuerpo JSON de la solicitud:

    {
      "options": {
        "requestedPolicyVersion": POLICY_VERSION
      }
    }
    

    Para enviar tu solicitud, expande una de estas opciones:

    Deberías recibir una respuesta JSON similar a la que se muestra a continuación:

    {
      "version": 1,
      "etag": "BwWKmjvelug=",
      "bindings": [
        {
          "role": "roles/serviceAccountAdmin",
          "members": [
            "user:admin@example.com"
          ]
        }
      ]
    }
    

    Si no otorgaste ningún rol en la cuenta de servicio, la respuesta contendrá solo un valor etag. Incluye ese valor de etag en el siguiente paso.

  2. Modifica la política de permisos para otorgar a CALLER_ACCOUNT el rol de Creador de tokens de identidad de OpenID Connect para cuentas de servicio (roles/iam.serviceAccountOpenIdTokenCreator).

    Por ejemplo, para modificar la respuesta de muestra del paso anterior, agrega lo siguiente:

    {
      "version": 1,
      "etag": "BwWKmjvelug=",
      "bindings": [
        {
          "role": "roles/serviceAccountAdmin",
          "members": [
            "user:admin@example.com"
          ]
        },
        {
          "role": "roles/iam.serviceAccountOpenIdTokenCreator",
          "members": [
            "user:CALLER_ACCOUNT"
          ]
        }
      ]
    }
  3. Escribe la política de permisos actualizada:

    Mediante el método serviceAccounts.setIamPolicy, se configura una política de permisos actualizada para la cuenta de servicio.

    Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:

    • PROJECT_ID: El ID del proyecto de Google Cloud Los ID de proyecto son strings alfanuméricas, como my-project.
    • PRIV_SA: Es la dirección de correo electrónico de la cuenta de servicio con privilegios para la que se crea el token de corta duración.
    • POLICY_VERSION: Es la versión de la política que se mostrará. Las solicitudes deben especificar la versión de política más reciente, que es la versión de política 3. Consulta Especifica una versión de política cuando obtienes una política para obtener más detalles.
    • POLICY: Es una representación JSON de la política que deseas establecer. Para obtener más información sobre el formato de una política, consulta la Referencia de políticas.

      Por ejemplo, para establecer la política de permisos que se muestra en el paso anterior, reemplaza POLICY por lo siguiente, donde CALLER_ACCOUNT es la cuenta de usuario que crea el token de corta duración:

      {
        "version": 1,
        "etag": "BwWKmjvelug=",
        "bindings": [
          {
            "role": "roles/serviceAccountAdmin",
            "members": [
              "user:admin@example.com"
            ]
          },
          {
            "role": "roles/iam.serviceAccountOpenIdTokenCreator",
            "members": [
              "user:CALLER_ACCOUNT"
            ]
          }
        ]
      }

    HTTP method and URL:

    POST https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts/PRIV_SA

    Cuerpo JSON de la solicitud:

    {
      "policy": POLICY
    }
    

    Para enviar tu solicitud, expande una de estas opciones:

    La respuesta contiene la política de permisos actualizada:

Genera el token de ID

Puedes generar un token de ID de OpenID Connect (OIDC) mediante la CLI de gcloud, la API de REST o las bibliotecas cliente de Cloud y las bibliotecas cliente de la API de Google.

Los siguientes ejemplos están diseñados para usarse en un entorno de desarrollo local; el emisor debe estar representado por una cuenta de usuario, en lugar de una cuenta de servicio.

Los tokens de ID de OIDC son válidos durante 1 hora (3,600 segundos).

Genera un token de ID de OIDC firmado por Google para una cuenta de servicio:

gcloud

  1. Accede a Google Cloud CLI como la Cuenta de Google del emisor.

    gcloud auth login CALLER_ACCOUNT
  2. Genera un token para la cuenta de servicio.

    El comando gcloud auth print-identity-token genera un token de ID de OIDC para una cuenta de servicio.

    Antes de usar cualquiera de los datos de comando a continuación, realiza los siguientes reemplazos:

    • PRIV_SA: Es la dirección de correo electrónico de la cuenta de servicio con privilegios para la que se crea el token de corta duración.
    • AUDIENCE_NAME: El público del token, generalmente la URL de la aplicación o el servicio a los que se quiere acceder con el token
      • Ejecuta el siguiente comando:

        Linux, macOS o Cloud Shell

        gcloud auth print-identity-token --impersonate-service-account=PRIV_SA --audiences="AUDIENCE_NAME"

        Windows (PowerShell)

        gcloud auth print-identity-token --impersonate-service-account=PRIV_SA --audiences="AUDIENCE_NAME"

        Windows (cmd.exe)

        gcloud auth print-identity-token --impersonate-service-account=PRIV_SA --audiences="AUDIENCE_NAME"

        Deberías recibir una respuesta similar a la que figura a continuación:

        WARNING: This command is using service account impersonation. All API calls will be executed as
        [my-sa@my-project.iam.gserviceaccount.com].
        eyJhbGciOiJSUzI1NiIsImtpZDNhMDg4ZDRmZmMjJkYTVmZTM5MDZjY2MiLCJ0eXAiOiJKV1QifQ.eyJhdWQiOiJ3d3cuZXhhbXBsJhenAiOiIxMTYzwNDYyMDk0ODIiLCJleHAiOjE2NTQ4ODU0MzEsImlhdCI6MTY1NDg4MTgzMSwiaXN6Ly9hY2NvdW50cy5nb29nbGUuY29tIiwic3ViIMDQ2MjA5NDgyIn0.F7mu8IHj5VQdu7ItFrnYAKyGd7YqXuOP_rFLc98q8BaFBycAF1zAQnSnwqnSUXba0UK9PDT_-IOry68qLwBObz4XlX9lk0ehpN0O0W9FcFToKLB6wefXXPd4h7xtuPe5KzmpSOqj2Qqv34HriGw00Nqd-oGSgNY_lZ4wGEf4rT4oQa_kEcrY57Q2G6pwd769BhgeFwoLi5aK_Cv2kvf_zfMszC-xlkP9zwWQ8XinJBwe-qcQBa4NTgrbueNtXsEjccBS366zmw
        

REST

El método serviceAccounts.generateIdToken de la API de Service Account Credentials genera un token de ID de OIDC para una cuenta de servicio.

Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:

  • PRIV_SA: Es la dirección de correo electrónico de la cuenta de servicio con privilegios para la que se crea el token de corta duración.
  • AUDIENCE_NAME: El público del token, generalmente la URL de la aplicación o el servicio a los que se quiere acceder con el token

Método HTTP y URL:

POST https://iamcredentials.googleapis.com/v1/projects/-/serviceAccounts/PRIV_SA:generateIdToken

Cuerpo JSON de la solicitud:

{
  "audience": "AUDIENCE_NAME",
  "includeEmail": "true"
}

Para enviar tu solicitud, expande una de estas opciones:

Si la solicitud generateId tuvo éxito, el cuerpo de la respuesta contendrá un token de ID válido por 1 hora. Se puede usar el token para autenticar una solicitud en nombre de la cuenta de servicio.

{
  "token": "eyJ0eXAi...NiJ9"
}

Crea un token web JSON (JWT) autofirmado

Los tokens web JSON (JWT) autofirmados son útiles en varias situaciones:

  • Autentica en una API implementada con API Gateway.
  • Autenticación de una llamada a una API de Google como se describe en la Guía de autenticación de Google
  • Comunicación segura entre tus propias aplicaciones. En esta situación, una aplicación puede firmar un token que otra aplicación puede verificar con fines de autenticación.
  • Tratar una cuenta de servicio como un proveedor de identidad mediante la firma de un JWT que contiene reclamaciones arbitrarias sobre un usuario, una cuenta o un dispositivo

Para crear un JWT, completa estas tareas:

Otorga los permisos necesarios

Una solicitud directa involucra dos identidades: el emisor que solicita la credencial y la cuenta de servicio para la que se crea la credencial. La forma en que configuras los permisos depende de si el emisor se autentica como una cuenta de servicio o como una Cuenta de Google.

Si deseas ejecutar un comando de la CLI de gcloud o REST en esta página en un entorno de desarrollo local, el emisor puede estar representado por credenciales de usuario. Para las cargas de trabajo automatizadas, como una aplicación que se ejecuta en Compute Engine, el emisor debe estar representado por una cuenta de servicio.

Cuenta de servicio

Cuando la aplicación que realiza la llamada usa una cuenta de servicio como su identidad, se involucran las siguientes principales:

  • Cuenta de servicio del emisor (CALLER_SA)

    Esta cuenta de servicio representa la aplicación que realiza la llamada, que emite la solicitud para las credenciales de corta duración.

  • Cuenta de servicio con privilegios (PRIV_SA)

    A esta cuenta de servicio se le otorgan los roles de IAM necesarios para el token de corta duración. Esta es la cuenta de servicio para la que se crea el token de corta duración.

Para otorgar permisos CALLER_SA para crear credenciales de corta duración para PRIV_SA, otorgas el rol de creador del token de la cuenta de servicio CALLER_SA (roles/iam.serviceAccountTokenCreator) en PRIV_SA.

Otorga el rol necesario en PRIV_SA:

Consola

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

    Ir a Cuentas de servicio

  2. Selecciona un proyecto.
  3. Haz clic en la dirección de correo electrónico de la cuenta de servicio con privilegios, PRIV_SA.
  4. Haz clic en la pestaña Permisos.
  5. En Principales con acceso a esta cuenta de servicio, haz clic en Otorgar acceso.
  6. Ingresa la dirección de correo electrónico de la cuenta de servicio del emisor, CALLER_SA.

    Por ejemplo, demo@my-project.iam.gserviceaccount.com.

  7. Selecciona el rol de Creador de tokens de cuenta de servicio (roles/iam.serviceAccountTokenCreator).
  8. Haz clic en Guardar para otorgar el rol a la cuenta de servicio.

gcloud

El comando gcloud iam service-accounts add-iam-policy-binding otorga un rol a una cuenta de servicio.

Antes de usar cualquiera de los datos de comando a continuación, realiza los siguientes reemplazos:

  • PRIV_SA: Es la dirección de correo electrónico de la cuenta de servicio con privilegios para la que se genera el token.
  • CALLER_SA: Es la dirección de correo electrónico de la cuenta de servicio que representa a la aplicación que solicita el token de corta duración.

Ejecuta el siguiente comando:

Linux, macOS o Cloud Shell

gcloud iam service-accounts add-iam-policy-binding PRIV_SA \
    --member=serviceAccount:CALLER_SA --role=roles/iam.serviceAccountTokenCreator --format=json

Windows (PowerShell)

gcloud iam service-accounts add-iam-policy-binding PRIV_SA `
    --member=serviceAccount:CALLER_SA --role=roles/iam.serviceAccountTokenCreator --format=json

Windows (cmd.exe)

gcloud iam service-accounts add-iam-policy-binding PRIV_SA ^
    --member=serviceAccount:CALLER_SA --role=roles/iam.serviceAccountTokenCreator --format=json

Deberías recibir una respuesta similar a la que figura a continuación:

Updated IAM policy for serviceAccount [PRIV_SA].
{
  "bindings": [
    {
      "members": [
        "serviceAccount:CALLER_SA"
      ],
      "role": "roles/iam.serviceAccountTokenCreator"
    }
  ],
  "etag": "BwXhCB4eyjY=",
  "version": 1
}

REST

  1. Lee la política de permisos para PRIV_SA:

    El método serviceAccounts.getIamPolicy obtiene la política de permisos de una cuenta de servicio.

    Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:

    • PROJECT_ID: El ID del proyecto de Google Cloud Los ID de proyecto son strings alfanuméricas, como my-project.
    • PRIV_SA: Es la dirección de correo electrónico de la cuenta de servicio con privilegios para la que se crea el token de corta duración.
    • POLICY_VERSION: Es la versión de la política que se mostrará. Las solicitudes deben especificar la versión de política más reciente, que es la versión de política 3. Consulta Especifica una versión de política cuando obtienes una política para obtener más detalles.

    Método HTTP y URL:

    POST https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts/PRIV_SA:getIamPolicy

    Cuerpo JSON de la solicitud:

    {
      "options": {
        "requestedPolicyVersion": POLICY_VERSION
      }
    }
    

    Para enviar tu solicitud, expande una de estas opciones:

    Deberías recibir una respuesta JSON similar a la que se muestra a continuación:

    {
      "version": 1,
      "etag": "BwWKmjvelug=",
      "bindings": [
        {
          "role": "roles/serviceAccountAdmin",
          "members": [
            "user:admin@example.com"
          ]
        }
      ]
    }
    

    Si no otorgaste ningún rol en la cuenta de servicio, la respuesta contendrá solo un valor etag. Incluye ese valor de etag en el siguiente paso.

  2. Modifica la política de permiso para otorgar a CALLER_SA el rol de Creador de tokens de cuenta de servicio (roles/iam.serviceAccountTokenCreator).

    Por ejemplo, para modificar la respuesta de muestra del paso anterior, agrega lo siguiente:

      {
        "version": 1,
        "etag": "BwWKmjvelug=",
        "bindings": [
          {
            "role": "roles/serviceAccountAdmin",
            "members": [
              "user:admin@example.com"
            ]
          },
          {
            "role": "roles/iam.serviceAccountTokenCreator",
            "members": [
              "serviceAccount:CALLER_SA"
            ]
          }
        ]
      }
  3. Escribe la política de permisos actualizada:

    Mediante el método serviceAccounts.setIamPolicy, se configura una política de permisos actualizada para la cuenta de servicio.

    Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:

    • PROJECT_ID: El ID del proyecto de Google Cloud Los ID de proyecto son strings alfanuméricas, como my-project.
    • PRIV_SA: Es la dirección de correo electrónico de la cuenta de servicio con privilegios para la que se crea el token de corta duración.
    • POLICY_VERSION: Es la versión de la política que se mostrará. Las solicitudes deben especificar la versión de política más reciente, que es la versión de política 3. Consulta Especifica una versión de política cuando obtienes una política para obtener más detalles.
    • POLICY: Es una representación JSON de la política que deseas establecer. Para obtener más información sobre el formato de una política, consulta la Referencia de políticas.

      Por ejemplo, para establecer la política de permisos que se muestra en el paso anterior, reemplaza POLICY por lo siguiente, donde CALLER_SA es la cuenta de servicio que crea el token de corta duración:

      {
        "version": 1,
        "etag": "BwWKmjvelug=",
        "bindings": [
          {
            "role": "roles/serviceAccountAdmin",
            "members": [
              "user:admin@example.com"
            ]
          },
          {
            "role": "roles/iam.serviceAccountTokenCreator",
            "members": [
              "serviceAccount:CALLER_SA"
            ]
          }
        ]
      }

    HTTP method and URL:

    POST https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts/PRIV_SA

    Cuerpo JSON de la solicitud:

    {
      "policy": POLICY
    }
    

    Para enviar tu solicitud, expande una de estas opciones:

    La respuesta contiene la política de permisos actualizada:

Credenciales de usuario

Cuando quieras usar Google Cloud CLI para generar tokens de corta duración o desees generar tokens de corta duración desde un entorno de desarrollo local, puedes usar una cuenta de usuario a fin de generar los tokens. A menudo, puedes usar tu propia Cuenta de Google.

Cuando usas una cuenta de usuario para generar tokens de corta duración, se involucran las siguientes identidades:

  • Cuenta de Google del emisor (CALLER_ACCOUNT)

    Esta cuenta de usuario se usa a fin de generar credenciales de corta duración para la cuenta de servicio con privilegios.

  • Cuenta de servicio con privilegios (PRIV_SA)

    A esta cuenta de servicio se le otorgan los roles de IAM necesarios para el token de corta duración. Esta es la cuenta de servicio para la que se crea el token de corta duración.

A fin de habilitar CALLER_ACCOUNT para crear credenciales de corta duración para PRIV_SA, otorga a CALLER_ACCOUNT el rol de Creador de tokens de cuenta de servicio (roles/iam.serviceAccountTokenCreator) en PRIV_SA.

Otorga el rol necesario en PRIV_SA:

Consola

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

    Ir a Cuentas de servicio

  2. Selecciona un proyecto.
  3. Haz clic en la dirección de correo electrónico de la cuenta de servicio con privilegios, PRIV_SA.
  4. Haz clic en la pestaña Permisos.
  5. En Principales con acceso a esta cuenta de servicio, haz clic en Otorgar acceso.
  6. Ingresa la dirección de correo electrónico de la Cuenta de Google del emisor, CALLER_ACCOUNT.

    Por ejemplo, username@google.com.

  7. Selecciona el rol de Creador de tokens de cuenta de servicio (roles/iam.serviceAccountTokenCreator).
  8. Haz clic en Guardar para otorgar el rol a la cuenta de usuario.

gcloud

El comando gcloud iam service-accounts add-iam-policy-binding otorga un rol a una cuenta de servicio.

Antes de usar cualquiera de los datos de comando a continuación, realiza los siguientes reemplazos:

  • PRIV_SA: Es la dirección de correo electrónico de la cuenta de servicio con privilegios para la que se genera el token.
  • CALLER_ACCOUNT: Es la dirección de correo electrónico de la cuenta de usuario que se usa para solicitar el token de corta duración.

Ejecuta el siguiente comando:

Linux, macOS o Cloud Shell

gcloud iam service-accounts add-iam-policy-binding PRIV_SA \
    --member=user:CALLER_ACCOUNT --role=roles/iam.serviceAccountTokenCreator --format=json

Windows (PowerShell)

gcloud iam service-accounts add-iam-policy-binding PRIV_SA `
    --member=user:CALLER_ACCOUNT --role=roles/iam.serviceAccountTokenCreator --format=json

Windows (cmd.exe)

gcloud iam service-accounts add-iam-policy-binding PRIV_SA ^
    --member=user:CALLER_ACCOUNT --role=roles/iam.serviceAccountTokenCreator --format=json

Deberías recibir una respuesta similar a la que figura a continuación:

Updated IAM policy for serviceAccount [PRIV_SA].
{
  "bindings": [
    {
      "members": [
        "user:CALLER_ACCOUNT"
      ],
      "role": "roles/iam.serviceAccountTokenCreator"
    }
  ],
  "etag": "BwX1ZbefjXU=",
  "version": 1
}

REST

  1. Lee la política de permisos para PRIV_SA:

    El método serviceAccounts.getIamPolicy obtiene la política de permisos de una cuenta de servicio.

    Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:

    • PROJECT_ID: El ID del proyecto de Google Cloud Los ID de proyecto son strings alfanuméricas, como my-project.
    • PRIV_SA: Es la dirección de correo electrónico de la cuenta de servicio con privilegios para la que se crea el token de corta duración.
    • POLICY_VERSION: Es la versión de la política que se mostrará. Las solicitudes deben especificar la versión de política más reciente, que es la versión de política 3. Consulta Especifica una versión de política cuando obtienes una política para obtener más detalles.

    Método HTTP y URL:

    POST https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts/PRIV_SA:getIamPolicy

    Cuerpo JSON de la solicitud:

    {
      "options": {
        "requestedPolicyVersion": POLICY_VERSION
      }
    }
    

    Para enviar tu solicitud, expande una de estas opciones:

    Deberías recibir una respuesta JSON similar a la que se muestra a continuación:

    {
      "version": 1,
      "etag": "BwWKmjvelug=",
      "bindings": [
        {
          "role": "roles/serviceAccountAdmin",
          "members": [
            "user:admin@example.com"
          ]
        }
      ]
    }
    

    Si no otorgaste ningún rol en la cuenta de servicio, la respuesta contendrá solo un valor etag. Incluye ese valor de etag en el siguiente paso.

  2. Modifica la política de permiso para otorgar a CALLER_ACCOUNT el rol de Creador de tokens de cuenta de servicio (roles/iam.serviceAccountTokenCreator).

    Por ejemplo, para modificar la respuesta de muestra del paso anterior, agrega lo siguiente:

    {
      "version": 1,
      "etag": "BwWKmjvelug=",
      "bindings": [
        {
          "role": "roles/serviceAccountAdmin",
          "members": [
            "user:admin@example.com"
          ]
        },
        {
          "role": "roles/iam.serviceAccountTokenCreator",
          "members": [
            "user:CALLER_ACCOUNT"
          ]
        }
      ]
    }
  3. Escribe la política de permisos actualizada:

    Mediante el método serviceAccounts.setIamPolicy, se configura una política de permisos actualizada para la cuenta de servicio.

    Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:

    • PROJECT_ID: El ID del proyecto de Google Cloud Los ID de proyecto son strings alfanuméricas, como my-project.
    • PRIV_SA: Es la dirección de correo electrónico de la cuenta de servicio con privilegios para la que se crea el token de corta duración.
    • POLICY_VERSION: Es la versión de la política que se mostrará. Las solicitudes deben especificar la versión de política más reciente, que es la versión de política 3. Consulta Especifica una versión de política cuando obtienes una política para obtener más detalles.
    • POLICY: Es una representación JSON de la política que deseas establecer. Para obtener más información sobre el formato de una política, consulta la Referencia de políticas.

      Por ejemplo, para establecer la política de permisos que se muestra en el paso anterior, reemplaza POLICY por lo siguiente, donde CALLER_ACCOUNT es la cuenta de usuario que crea el token de corta duración:

      {
        "version": 1,
        "etag": "BwWKmjvelug=",
        "bindings": [
          {
            "role": "roles/serviceAccountAdmin",
            "members": [
              "user:admin@example.com"
            ]
          },
          {
            "role": "roles/iam.serviceAccountTokenCreator",
            "members": [
              "user:CALLER_ACCOUNT"
            ]
          }
        ]
      }

    HTTP method and URL:

    POST https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts/PRIV_SA

    Cuerpo JSON de la solicitud:

    {
      "policy": POLICY
    }
    

    Para enviar tu solicitud, expande una de estas opciones:

    La respuesta contiene la política de permisos actualizada:

Genera el JWT

Genera un JWT autofirmado:

REST

Con el método serviceAccounts.signJwt de la API de credenciales de la cuenta de servicio, se firma un JWT mediante la clave privada administrada por el sistema de una cuenta de servicio.

Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:

  • PRIV_SA: Es la dirección de correo electrónico de la cuenta de servicio con privilegios para la que se crea el token de corta duración.
  • JWT_PAYLOAD: Es la carga útil del JWT que se firmará, que es un objeto JSON que contiene un conjunto de reclamaciones de JWT. Incluye las reclamaciones necesarias para tu caso de uso deseado a fin de cumplir con los requisitos de validación del servicio al que llamas. Si llamas a una API de Google, consulta la Guía de autenticación de Google para conocer los requisitos de reclamación.

    La reclamación exp (tiempo de caducidad) no debe ser superior a 12 horas. Si llamas a una API de Google, la reclamación exp no se debe establecer en más de 1 hora.

    La siguiente carga útil de ejemplo contiene reclamaciones para llamar a una API de Google, en la que EXP es una marca de tiempo de número entero que representa la hora de vencimiento:

    { \"iss\": \"PRIV_SA\", \"sub\": \"PRIV_SA\", \"aud\": \"https://firestore.googleapis.com/\", \"iat\": 1529350000, \"exp\": EXP }

Método HTTP y URL:

POST https://iamcredentials.googleapis.com/v1/projects/-/serviceAccounts/PRIV_SA:signJwt

Cuerpo JSON de la solicitud:

{
  "payload": "JWT_PAYLOAD"
}

Para enviar tu solicitud, expande una de estas opciones:

Si la solicitud signJwt se realizó con éxito, el cuerpo de la respuesta contendrá un JWT firmado y el ID de la clave de firma que se usó para firmarlo. Puedes usar el valor signedJwt como un token del portador para autenticar directamente una solicitud en nombre de la cuenta de servicio. El token es válido hasta que venza el tiempo de caducidad especificado en la solicitud:

{
  "keyId": "42ba1e...fc0a",
  "signedJwt": "eyJ0eXAi...NiJ9"
}

Crea un objeto binario autofirmado (BLOB)

Los objetos binarios autofirmados, o BLOB, se usan para transmitir datos binarios de tal manera que se conozca el creador de los datos (porque el BLOB está autofirmado). Los BLOB se pueden usar a fin de crear firmas, un objeto de Cloud Storage necesario para varios flujos de autenticación, incluidas las URL firmadas. Para obtener información sobre las firmas, consulta la documentación de Cloud Storage.

Para crear un objeto binario autofirmado, completa estas tareas:

Otorga los permisos necesarios

Una solicitud directa involucra dos identidades: el emisor que solicita la credencial y la cuenta de servicio para la que se crea la credencial. La forma en que configuras los permisos depende de si el emisor se autentica como una cuenta de servicio o como una Cuenta de Google.

Si deseas ejecutar un comando de la CLI de gcloud o REST en esta página en un entorno de desarrollo local, el emisor puede estar representado por credenciales de usuario. Para las cargas de trabajo automatizadas, como una aplicación que se ejecuta en Compute Engine, el emisor debe estar representado por una cuenta de servicio.

Cuenta de servicio

Cuando la aplicación que realiza la llamada usa una cuenta de servicio como su identidad, se involucran las siguientes principales:

  • Cuenta de servicio del emisor (CALLER_SA)

    Esta cuenta de servicio representa la aplicación que realiza la llamada, que emite la solicitud para las credenciales de corta duración.

  • Cuenta de servicio con privilegios (PRIV_SA)

    A esta cuenta de servicio se le otorgan los roles de IAM necesarios para el token de corta duración. Esta es la cuenta de servicio para la que se crea el token de corta duración.

Para otorgar permisos CALLER_SA para crear credenciales de corta duración para PRIV_SA, otorgas el rol de creador del token de la cuenta de servicio CALLER_SA (roles/iam.serviceAccountTokenCreator) en PRIV_SA.

Otorga el rol necesario en PRIV_SA:

Consola

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

    Ir a Cuentas de servicio

  2. Selecciona un proyecto.
  3. Haz clic en la dirección de correo electrónico de la cuenta de servicio con privilegios, PRIV_SA.
  4. Haz clic en la pestaña Permisos.
  5. En Principales con acceso a esta cuenta de servicio, haz clic en Otorgar acceso.
  6. Ingresa la dirección de correo electrónico de la cuenta de servicio del emisor, CALLER_SA.

    Por ejemplo, demo@my-project.iam.gserviceaccount.com.

  7. Selecciona el rol de Creador de tokens de cuenta de servicio (roles/iam.serviceAccountTokenCreator).
  8. Haz clic en Guardar para otorgar el rol a la cuenta de servicio.

gcloud

El comando gcloud iam service-accounts add-iam-policy-binding otorga un rol a una cuenta de servicio.

Antes de usar cualquiera de los datos de comando a continuación, realiza los siguientes reemplazos:

  • PRIV_SA: Es la dirección de correo electrónico de la cuenta de servicio con privilegios para la que se genera el token.
  • CALLER_SA: Es la dirección de correo electrónico de la cuenta de servicio que representa a la aplicación que solicita el token de corta duración.

Ejecuta el siguiente comando:

Linux, macOS o Cloud Shell

gcloud iam service-accounts add-iam-policy-binding PRIV_SA \
    --member=serviceAccount:CALLER_SA --role=roles/iam.serviceAccountTokenCreator --format=json

Windows (PowerShell)

gcloud iam service-accounts add-iam-policy-binding PRIV_SA `
    --member=serviceAccount:CALLER_SA --role=roles/iam.serviceAccountTokenCreator --format=json

Windows (cmd.exe)

gcloud iam service-accounts add-iam-policy-binding PRIV_SA ^
    --member=serviceAccount:CALLER_SA --role=roles/iam.serviceAccountTokenCreator --format=json

Deberías recibir una respuesta similar a la que figura a continuación:

Updated IAM policy for serviceAccount [PRIV_SA].
{
  "bindings": [
    {
      "members": [
        "serviceAccount:CALLER_SA"
      ],
      "role": "roles/iam.serviceAccountTokenCreator"
    }
  ],
  "etag": "BwXhCB4eyjY=",
  "version": 1
}

REST

  1. Lee la política de permisos para PRIV_SA:

    El método serviceAccounts.getIamPolicy obtiene la política de permisos de una cuenta de servicio.

    Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:

    • PROJECT_ID: El ID del proyecto de Google Cloud Los ID de proyecto son strings alfanuméricas, como my-project.
    • PRIV_SA: Es la dirección de correo electrónico de la cuenta de servicio con privilegios para la que se crea el token de corta duración.
    • POLICY_VERSION: Es la versión de la política que se mostrará. Las solicitudes deben especificar la versión de política más reciente, que es la versión de política 3. Consulta Especifica una versión de política cuando obtienes una política para obtener más detalles.

    Método HTTP y URL:

    POST https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts/PRIV_SA:getIamPolicy

    Cuerpo JSON de la solicitud:

    {
      "options": {
        "requestedPolicyVersion": POLICY_VERSION
      }
    }
    

    Para enviar tu solicitud, expande una de estas opciones:

    Deberías recibir una respuesta JSON similar a la que se muestra a continuación:

    {
      "version": 1,
      "etag": "BwWKmjvelug=",
      "bindings": [
        {
          "role": "roles/serviceAccountAdmin",
          "members": [
            "user:admin@example.com"
          ]
        }
      ]
    }
    

    Si no otorgaste ningún rol en la cuenta de servicio, la respuesta contendrá solo un valor etag. Incluye ese valor de etag en el siguiente paso.

  2. Modifica la política de permiso para otorgar a CALLER_SA el rol de Creador de tokens de cuenta de servicio (roles/iam.serviceAccountTokenCreator).

    Por ejemplo, para modificar la respuesta de muestra del paso anterior, agrega lo siguiente:

      {
        "version": 1,
        "etag": "BwWKmjvelug=",
        "bindings": [
          {
            "role": "roles/serviceAccountAdmin",
            "members": [
              "user:admin@example.com"
            ]
          },
          {
            "role": "roles/iam.serviceAccountTokenCreator",
            "members": [
              "serviceAccount:CALLER_SA"
            ]
          }
        ]
      }
  3. Escribe la política de permisos actualizada:

    Mediante el método serviceAccounts.setIamPolicy, se configura una política de permisos actualizada para la cuenta de servicio.

    Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:

    • PROJECT_ID: El ID del proyecto de Google Cloud Los ID de proyecto son strings alfanuméricas, como my-project.
    • PRIV_SA: Es la dirección de correo electrónico de la cuenta de servicio con privilegios para la que se crea el token de corta duración.
    • POLICY_VERSION: Es la versión de la política que se mostrará. Las solicitudes deben especificar la versión de política más reciente, que es la versión de política 3. Consulta Especifica una versión de política cuando obtienes una política para obtener más detalles.
    • POLICY: Es una representación JSON de la política que deseas establecer. Para obtener más información sobre el formato de una política, consulta la Referencia de políticas.

      Por ejemplo, para establecer la política de permisos que se muestra en el paso anterior, reemplaza POLICY por lo siguiente, donde CALLER_SA es la cuenta de servicio que crea el token de corta duración:

      {
        "version": 1,
        "etag": "BwWKmjvelug=",
        "bindings": [
          {
            "role": "roles/serviceAccountAdmin",
            "members": [
              "user:admin@example.com"
            ]
          },
          {
            "role": "roles/iam.serviceAccountTokenCreator",
            "members": [
              "serviceAccount:CALLER_SA"
            ]
          }
        ]
      }

    HTTP method and URL:

    POST https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts/PRIV_SA

    Cuerpo JSON de la solicitud:

    {
      "policy": POLICY
    }
    

    Para enviar tu solicitud, expande una de estas opciones:

    La respuesta contiene la política de permisos actualizada:

Credenciales de usuario

Cuando quieras usar Google Cloud CLI para generar tokens de corta duración o desees generar tokens de corta duración desde un entorno de desarrollo local, puedes usar una cuenta de usuario a fin de generar los tokens. A menudo, puedes usar tu propia Cuenta de Google.

Cuando usas una cuenta de usuario para generar tokens de corta duración, se involucran las siguientes identidades:

  • Cuenta de Google del emisor (CALLER_ACCOUNT)

    Esta cuenta de usuario se usa a fin de generar credenciales de corta duración para la cuenta de servicio con privilegios.

  • Cuenta de servicio con privilegios (PRIV_SA)

    A esta cuenta de servicio se le otorgan los roles de IAM necesarios para el token de corta duración. Esta es la cuenta de servicio para la que se crea el token de corta duración.

A fin de habilitar CALLER_ACCOUNT para crear credenciales de corta duración para PRIV_SA, otorga a CALLER_ACCOUNT el rol de Creador de tokens de cuenta de servicio (roles/iam.serviceAccountTokenCreator) en PRIV_SA.

Otorga el rol necesario en PRIV_SA:

Consola

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

    Ir a Cuentas de servicio

  2. Selecciona un proyecto.
  3. Haz clic en la dirección de correo electrónico de la cuenta de servicio con privilegios, PRIV_SA.
  4. Haz clic en la pestaña Permisos.
  5. En Principales con acceso a esta cuenta de servicio, haz clic en Otorgar acceso.
  6. Ingresa la dirección de correo electrónico de la Cuenta de Google del emisor, CALLER_ACCOUNT.

    Por ejemplo, username@google.com.

  7. Selecciona el rol de Creador de tokens de cuenta de servicio (roles/iam.serviceAccountTokenCreator).
  8. Haz clic en Guardar para otorgar el rol a la cuenta de usuario.

gcloud

El comando gcloud iam service-accounts add-iam-policy-binding otorga un rol a una cuenta de servicio.

Antes de usar cualquiera de los datos de comando a continuación, realiza los siguientes reemplazos:

  • PRIV_SA: Es la dirección de correo electrónico de la cuenta de servicio con privilegios para la que se genera el token.
  • CALLER_ACCOUNT: Es la dirección de correo electrónico de la cuenta de usuario que se usa para solicitar el token de corta duración.

Ejecuta el siguiente comando:

Linux, macOS o Cloud Shell

gcloud iam service-accounts add-iam-policy-binding PRIV_SA \
    --member=user:CALLER_ACCOUNT --role=roles/iam.serviceAccountTokenCreator --format=json

Windows (PowerShell)

gcloud iam service-accounts add-iam-policy-binding PRIV_SA `
    --member=user:CALLER_ACCOUNT --role=roles/iam.serviceAccountTokenCreator --format=json

Windows (cmd.exe)

gcloud iam service-accounts add-iam-policy-binding PRIV_SA ^
    --member=user:CALLER_ACCOUNT --role=roles/iam.serviceAccountTokenCreator --format=json

Deberías recibir una respuesta similar a la que figura a continuación:

Updated IAM policy for serviceAccount [PRIV_SA].
{
  "bindings": [
    {
      "members": [
        "user:CALLER_ACCOUNT"
      ],
      "role": "roles/iam.serviceAccountTokenCreator"
    }
  ],
  "etag": "BwX1ZbefjXU=",
  "version": 1
}

REST

  1. Lee la política de permisos para PRIV_SA:

    El método serviceAccounts.getIamPolicy obtiene la política de permisos de una cuenta de servicio.

    Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:

    • PROJECT_ID: El ID del proyecto de Google Cloud Los ID de proyecto son strings alfanuméricas, como my-project.
    • PRIV_SA: Es la dirección de correo electrónico de la cuenta de servicio con privilegios para la que se crea el token de corta duración.
    • POLICY_VERSION: Es la versión de la política que se mostrará. Las solicitudes deben especificar la versión de política más reciente, que es la versión de política 3. Consulta Especifica una versión de política cuando obtienes una política para obtener más detalles.

    Método HTTP y URL:

    POST https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts/PRIV_SA:getIamPolicy

    Cuerpo JSON de la solicitud:

    {
      "options": {
        "requestedPolicyVersion": POLICY_VERSION
      }
    }
    

    Para enviar tu solicitud, expande una de estas opciones:

    Deberías recibir una respuesta JSON similar a la que se muestra a continuación:

    {
      "version": 1,
      "etag": "BwWKmjvelug=",
      "bindings": [
        {
          "role": "roles/serviceAccountAdmin",
          "members": [
            "user:admin@example.com"
          ]
        }
      ]
    }
    

    Si no otorgaste ningún rol en la cuenta de servicio, la respuesta contendrá solo un valor etag. Incluye ese valor de etag en el siguiente paso.

  2. Modifica la política de permiso para otorgar a CALLER_ACCOUNT el rol de Creador de tokens de cuenta de servicio (roles/iam.serviceAccountTokenCreator).

    Por ejemplo, para modificar la respuesta de muestra del paso anterior, agrega lo siguiente:

    {
      "version": 1,
      "etag": "BwWKmjvelug=",
      "bindings": [
        {
          "role": "roles/serviceAccountAdmin",
          "members": [
            "user:admin@example.com"
          ]
        },
        {
          "role": "roles/iam.serviceAccountTokenCreator",
          "members": [
            "user:CALLER_ACCOUNT"
          ]
        }
      ]
    }
  3. Escribe la política de permisos actualizada:

    Mediante el método serviceAccounts.setIamPolicy, se configura una política de permisos actualizada para la cuenta de servicio.

    Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:

    • PROJECT_ID: El ID del proyecto de Google Cloud Los ID de proyecto son strings alfanuméricas, como my-project.
    • PRIV_SA: Es la dirección de correo electrónico de la cuenta de servicio con privilegios para la que se crea el token de corta duración.
    • POLICY_VERSION: Es la versión de la política que se mostrará. Las solicitudes deben especificar la versión de política más reciente, que es la versión de política 3. Consulta Especifica una versión de política cuando obtienes una política para obtener más detalles.
    • POLICY: Es una representación JSON de la política que deseas establecer. Para obtener más información sobre el formato de una política, consulta la Referencia de políticas.

      Por ejemplo, para establecer la política de permisos que se muestra en el paso anterior, reemplaza POLICY por lo siguiente, donde CALLER_ACCOUNT es la cuenta de usuario que crea el token de corta duración:

      {
        "version": 1,
        "etag": "BwWKmjvelug=",
        "bindings": [
          {
            "role": "roles/serviceAccountAdmin",
            "members": [
              "user:admin@example.com"
            ]
          },
          {
            "role": "roles/iam.serviceAccountTokenCreator",
            "members": [
              "user:CALLER_ACCOUNT"
            ]
          }
        ]
      }

    HTTP method and URL:

    POST https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts/PRIV_SA

    Cuerpo JSON de la solicitud:

    {
      "policy": POLICY
    }
    

    Para enviar tu solicitud, expande una de estas opciones:

    La respuesta contiene la política de permisos actualizada:

Genera el BLOB autofirmado

Genera un BLOB autofirmado para la cuenta de servicio:

REST

Con el método serviceAccounts.signBlob de la API de credenciales de la cuenta de servicio, se firma un BLOB mediante la clave privada administrada por el sistema de una cuenta de servicio.

Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:

  • PRIV_SA: Es la dirección de correo electrónico de la cuenta de servicio con privilegios para la que se crea el token de corta duración.
  • BLOB_PAYLOAD: Es una string de bytes codificada en Base64. Por ejemplo, VGhlIHF1aWNrIGJyb3duIGZveCBqdW1wZWQgb3ZlciB0aGUgbGF6eSBkb2cu.

Método HTTP y URL:

POST https://iamcredentials.googleapis.com/v1/projects/-/serviceAccounts/PRIV_SA:signBlob

Cuerpo JSON de la solicitud:

{
  "payload": "BLOB_PAYLOAD"
}

Para enviar tu solicitud, expande una de estas opciones:

Si la solicitud signBlob se realizó con éxito, el cuerpo de la respuesta contendrá un BLOB firmado y el ID de la clave de firma que se usó para firmarlo. Puedes usar el valor signedBlob como un token del portador para autenticar directamente una solicitud en nombre de la cuenta de servicio. El token es válido hasta que caduque la clave privada administrada por el sistema de la cuenta de servicio. El ID de esta clave es el valor del campo keyId en la respuesta.

{
  "keyId": "42ba1e...fc0a",
  "signedBlob": "eyJ0eXAi...NiJ9"
}