Crie credenciais de curta duração para uma conta de serviço

Esta página explica como criar credenciais de curta duração para uma conta de serviço, que pode usar para roubar a identidade da conta de serviço. Consoante o tipo de token que criar, o token de curta duração fornece a identidade (para tokens de ID) ou as autorizações (para tokens de acesso) associadas à conta de serviço.

Se a arquitetura do seu sistema exigir que use uma série de chamadas de geração de tokens, pode usar uma cadeia de delegação composta por várias contas de serviço. Na maioria dos casos, o método direto, conforme explicado nesta página, é suficiente.

Antes de começar

Crie uma chave de acesso de curta duração

Os tokens de acesso são aceites para autenticação pela maioria das APIs Google. Quando gera uma chave de acesso através da representação da conta de serviço, a chave de acesso não inclui um símbolo de atualização, o que significa que, quando a chave expira, tem de repetir o processo de representação para gerar uma nova.

Para mais informações, consulte o artigo Tokens de acesso.

Para criar um token de acesso de curta duração, conclua estas tarefas:

Conceda as autorizações necessárias

Um pedido direto envolve duas identidades: o autor da chamada que pede a credencial e a conta de serviço para a qual a credencial é criada. A forma como configura as autorizações depende de o autor da chamada estar a autenticar como uma conta de serviço ou como uma conta de utilizador.

Se quiser executar um comando REST ou gcloud CLI nesta página num ambiente de desenvolvimento local, o autor da chamada pode ser representado por credenciais de utilizador. Para cargas de trabalho automatizadas, como uma aplicação executada no Compute Engine, o autor da chamada tem de ser representado por uma conta de serviço.

Conta de serviço

Quando a aplicação de chamadas usa uma conta de serviço como identidade, os seguintes principais estão envolvidos:

  • Conta do serviço de chamadas (CALLER_SA)

    Esta conta de serviço representa a aplicação de chamada, que emite o pedido das credenciais de curta duração.

  • Conta de serviço com privilégios (PRIV_SA)

    Esta conta de serviço tem as funções de IAM necessárias para o token de curta duração. Esta é a conta de serviço para a qual o token de curta duração é criado.

Para conceder autorizações à app CALLER_SA para criar credenciais de curta duração para PRIV_SA, atribui à app CALLER_SA a função Criador de tokens de conta de serviço (roles/iam.serviceAccountTokenCreator) em PRIV_SA.

Conceda a função necessária em PRIV_SA:

Consola

  1. Na Trusted Cloud consola, aceda à página Contas de serviço.

    Aceda a Contas de serviço

  2. Selecione um projeto.
  3. Clique no endereço de email da conta de serviço com privilégios, PRIV_SA.
  4. Clique no separador Autorizações.
  5. Em Principais com acesso a esta conta de serviço, clique em Conceder acesso.
  6. Introduza o endereço de email da conta de serviço do autor da chamada, CALLER_SA.

    Por exemplo, demo@my-project.s3ns-system.iam.gserviceaccount.com.

  7. Selecione a função Criador de tokens de contas de serviço (roles/iam.serviceAccountTokenCreator).
  8. Clique em Guardar para conceder a função à conta de serviço.

gcloud

O comando gcloud iam service-accounts add-iam-policy-binding concede uma função numa conta de serviço.

Antes de usar qualquer um dos dados de comandos abaixo, faça as seguintes substituições:

  • PRIV_SA: o endereço de email da conta de serviço com privilégios para a qual o token é gerado.
  • CALLER_SA: o endereço de email da conta de serviço que representa a aplicação que está a pedir o token de curta duração.

Execute o seguinte comando:

Linux, macOS ou 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

Deve receber uma resposta semelhante à seguinte:

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

REST

  1. Leia a política de permissão para PRIV_SA:

    O método serviceAccounts.getIamPolicy obtém a política de autorização de uma conta de serviço.

    Antes de usar qualquer um dos dados do pedido, faça as seguintes substituições:

    • PROJECT_ID: O ID do seu Trusted Cloud projeto. Os IDs dos projetos são strings alfanuméricas, como my-project.
    • PRIV_SA: o endereço de email da conta de serviço com privilégios para a qual o token de curta duração é criado.
    • POLICY_VERSION: a versão da política a ser devolvida. Os pedidos devem especificar a versão da política mais recente, que é a versão 3 da política. Consulte o artigo Especificar uma versão da política ao obter uma política para ver detalhes.

    Método HTTP e URL:

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

    Corpo JSON do pedido:

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

    Para enviar o seu pedido, expanda uma destas opções:

    Deve receber uma resposta JSON semelhante à seguinte:

    {
      "version": 1,
      "etag": "BwWKmjvelug=",
      "bindings": [
        {
          "role": "roles/serviceAccountAdmin",
          "members": [
            "principal://iam.googleapis.com/locations/global/workforcePools/my-pool/subject/my-user@example.com"
          ]
        }
      ]
    }
    

    Se não tiver concedido funções à conta de serviço, a resposta contém apenas um valor etag. Inclua esse valor etag no passo seguinte.

  2. Modifique a política de permissão para conceder a CALLER_SA a função de criador de tokens de conta de serviço (roles/iam.serviceAccountTokenCreator).

    Por exemplo, para modificar a resposta de exemplo do passo anterior, adicione o seguinte:

      {
        "version": 1,
        "etag": "BwWKmjvelug=",
        "bindings": [
          {
            "role": "roles/serviceAccountAdmin",
            "members": [
              "principal://iam.googleapis.com/locations/global/workforcePools/my-pool/subject/my-user@example.com"
            ]
          },
          {
            "role": "roles/iam.serviceAccountTokenCreator",
            "members": [
              "serviceAccount:CALLER_SA"
            ]
          }
        ]
      }
  3. Escreva a política de permissão atualizada:

    O método serviceAccounts.setIamPolicy define uma política de permissão atualizada para a conta de serviço.

    Antes de usar qualquer um dos dados do pedido, faça as seguintes substituições:

    • PROJECT_ID: O ID do seu Trusted Cloud projeto. Os IDs dos projetos são strings alfanuméricas, como my-project.
    • PRIV_SA: o endereço de email da conta de serviço com privilégios para a qual o token de curta duração é criado.
    • POLICY_VERSION: a versão da política a ser devolvida. Os pedidos devem especificar a versão da política mais recente, que é a versão 3 da política. Consulte o artigo Especificar uma versão da política ao obter uma política para ver detalhes.
    • POLICY: Uma representação JSON da política que quer definir. Para mais informações sobre o formato de uma política, consulte a referência de políticas.

      Por exemplo, para definir a política de permissão apresentada no passo anterior, substitua POLICY pelo seguinte, em que CALLER_SA é a conta de serviço que cria o token de curta duração:

      {
        "version": 1,
        "etag": "BwWKmjvelug=",
        "bindings": [
          {
            "role": "roles/serviceAccountAdmin",
            "members": [
              "principal://iam.googleapis.com/locations/global/workforcePools/my-pool/subject/my-user@example.com"
            ]
          },
          {
            "role": "roles/iam.serviceAccountTokenCreator",
            "members": [
              "serviceAccount:CALLER_SA"
            ]
          }
        ]
      }

    Método HTTP e URL:

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

    Corpo JSON do pedido:

    {
      "policy": POLICY
    }
    

    Para enviar o seu pedido, expanda uma destas opções:

    A resposta contém a política de permissão atualizada.

Credenciais de utilizador

Quando quiser usar a CLI Google Cloud para gerar tokens de curta duração ou quiser gerar tokens de curta duração a partir de um ambiente de desenvolvimento local, pode usar uma conta de utilizador para gerar os tokens. Muitas vezes, pode usar a sua própria conta de utilizador.

Quando usa uma conta de utilizador para gerar tokens de curta duração, estão envolvidas as seguintes identidades:

  • Conta do autor da chamada (CALLER_ACCOUNT)

    Esta conta de utilizador é usada para gerar credenciais de curta duração para a conta de serviço com privilégios.

  • Conta de serviço com privilégios (PRIV_SA)

    Esta conta de serviço tem as funções de IAM necessárias para o token de curta duração. Esta é a conta de serviço para a qual o token de curta duração é criado.

Para permitir que CALLER_ACCOUNT crie credenciais de curta duração para PRIV_SA, atribui a CALLER_ACCOUNT a função de criador de tokens da conta de serviço (roles/iam.serviceAccountTokenCreator) em PRIV_SA.

Conceda a função necessária em PRIV_SA:

Consola

  1. Na Trusted Cloud consola, aceda à página Contas de serviço.

    Aceda a Contas de serviço

  2. Selecione um projeto.
  3. Clique no endereço de email da conta de serviço com privilégios, PRIV_SA.
  4. Clique no separador Autorizações.
  5. Em Principais com acesso a esta conta de serviço, clique em Conceder acesso.
  6. Introduza o identificador principal da conta do autor da chamada, CALLER_ACCOUNT.

    Por exemplo, //iam.googleapis.com/locations/global/workforcePools/my-pool/subject/my-user@example.com.

  7. Selecione a função Criador de tokens de contas de serviço (roles/iam.serviceAccountTokenCreator).
  8. Clique em Guardar para conceder a função à conta de utilizador.

gcloud

O comando gcloud iam service-accounts add-iam-policy-binding concede uma função numa conta de serviço.

Antes de usar qualquer um dos dados de comandos abaixo, faça as seguintes substituições:

  • PRIV_SA: o endereço de email da conta de serviço com privilégios para a qual o token é gerado.
  • CALLER_ACCOUNT: o endereço de email da conta de utilizador que está a ser usada para pedir o token de curta duração.

Execute o seguinte comando:

Linux, macOS ou 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

Deve receber uma resposta semelhante à seguinte:

Updated IAM policy for serviceAccount [PRIV_SA].
{
  "bindings": [
    {
      "members": [
        "principal://iam.googleapis.com/locations/global/workforcePools/my-pool/subject/my-user@example.com"
      ],
      "role": "roles/iam.serviceAccountTokenCreator"
    }
  ],
  "etag": "BwX1ZbefjXU=",
  "version": 1
}

REST

  1. Leia a política de permissão para PRIV_SA:

    O método serviceAccounts.getIamPolicy obtém a política de autorização de uma conta de serviço.

    Antes de usar qualquer um dos dados do pedido, faça as seguintes substituições:

    • PROJECT_ID: O ID do seu Trusted Cloud projeto. Os IDs dos projetos são strings alfanuméricas, como my-project.
    • PRIV_SA: o endereço de email da conta de serviço com privilégios para a qual o token de curta duração é criado.
    • POLICY_VERSION: a versão da política a ser devolvida. Os pedidos devem especificar a versão da política mais recente, que é a versão 3 da política. Consulte o artigo Especificar uma versão da política ao obter uma política para ver detalhes.

    Método HTTP e URL:

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

    Corpo JSON do pedido:

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

    Para enviar o seu pedido, expanda uma destas opções:

    Deve receber uma resposta JSON semelhante à seguinte:

    {
      "version": 1,
      "etag": "BwWKmjvelug=",
      "bindings": [
        {
          "role": "roles/serviceAccountAdmin",
          "members": [
            "principal://iam.googleapis.com/locations/global/workforcePools/my-pool/subject/my-user@example.com"
          ]
        }
      ]
    }
    

    Se não tiver concedido funções à conta de serviço, a resposta contém apenas um valor etag. Inclua esse valor etag no passo seguinte.

  2. Modifique a política de autorização para conceder CALLER_ACCOUNT a função de criador de tokens de contas de serviço ( roles/iam.serviceAccountTokenCreator).

    Por exemplo, para modificar a resposta de exemplo do passo anterior, adicione o seguinte:

    {
      "version": 1,
      "etag": "BwWKmjvelug=",
      "bindings": [
        {
          "role": "roles/serviceAccountAdmin",
          "members": [
            "principal://iam.googleapis.com/locations/global/workforcePools/my-pool/subject/my-user@example.com"
          ]
        },
        {
          "role": "roles/iam.serviceAccountTokenCreator",
          "members": [
            "principal://iam.googleapis.com/locations/global/workforcePools/my-pool/subject/my-user@example.com"
          ]
        }
      ]
    }
  3. Escreva a política de permissão atualizada:

    O método serviceAccounts.setIamPolicy define uma política de permissão atualizada para a conta de serviço.

    Antes de usar qualquer um dos dados do pedido, faça as seguintes substituições:

    • PROJECT_ID: O ID do seu Trusted Cloud projeto. Os IDs dos projetos são strings alfanuméricas, como my-project.
    • PRIV_SA: o endereço de email da conta de serviço com privilégios para a qual o token de curta duração é criado.
    • POLICY_VERSION: a versão da política a ser devolvida. Os pedidos devem especificar a versão da política mais recente, que é a versão 3 da política. Consulte o artigo Especificar uma versão da política ao obter uma política para ver detalhes.
    • POLICY: Uma representação JSON da política que quer definir. Para mais informações sobre o formato de uma política, consulte a referência de políticas.

      Por exemplo, para definir a política de permissão apresentada no passo anterior, substitua POLICY pelo seguinte, em que CALLER_ACCOUNT é a conta de utilizador que está a criar o token de curta duração:

      {
        "version": 1,
        "etag": "BwWKmjvelug=",
        "bindings": [
          {
            "role": "roles/serviceAccountAdmin",
            "members": [
              "principal://iam.googleapis.com/locations/global/workforcePools/my-pool/subject/my-user@example.com"
            ]
          },
          {
            "role": "roles/iam.serviceAccountTokenCreator",
            "members": [
              "CALLER_ACCOUNT"
            ]
          }
        ]
      }

    Método HTTP e URL:

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

    Corpo JSON do pedido:

    {
      "policy": POLICY
    }
    

    Para enviar o seu pedido, expanda uma destas opções:

    A resposta contém a política de permissão atualizada.

Gere o token de acesso

Pode gerar um token de acesso OAuth 2.0 através da CLI gcloud, da API REST ou das bibliotecas cliente do Google Cloud e das bibliotecas cliente de APIs Google.

Se usar a API REST e o seu sistema estiver configurado para permitir durações dos tokens prolongadas, pode criar um token com uma duração superior à predefinida. A CLI Google Cloud não suporta a definição de um tempo de vida para o token.

Os exemplos abaixo foram concebidos para serem usados num ambiente de desenvolvimento local; o autor da chamada tem de ser representado por uma conta de utilizador e não por uma conta de serviço.

Gere uma chave de acesso OAuth 2.0 para uma conta de serviço:

gcloud

  1. Certifique-se de que tem sessão iniciada na CLI gcloud com a conta de utilizador do autor da chamada.

  2. Gere um token para a conta de serviço através do comando gcloud auth print-access-token.

    Antes de usar qualquer um dos dados de comandos abaixo, faça as seguintes substituições:

    • PRIV_SA: o endereço de email da conta de serviço com privilégios para a qual o token de curta duração é criado.

    Execute o seguinte comando:

    Linux, macOS ou 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

    Deve receber uma resposta semelhante à seguinte:

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

REST

O método serviceAccounts.generateAccessToken da API Service Account Credentials gera uma chave de acesso do OAuth 2.0 para uma conta de serviço.

Antes de usar qualquer um dos dados do pedido, faça as seguintes substituições:

  • PRIV_SA: o endereço de email da conta de serviço com privilégios para a qual o token de curta duração é criado.
  • LIFETIME: o tempo até o token de acesso expirar, em segundos. Por exemplo, 300s.

    Por predefinição, a duração máxima do token é de 1 hora (3600 segundos). Para prolongar a duração total máxima destas chaves de acesso para 12 horas (43 200 segundos), adicione a conta de serviço a uma política da organização que inclua a restrição de lista constraints/iam.allowServiceAccountCredentialLifetimeExtension.

Método HTTP e URL:

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

Corpo JSON do pedido:

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

Para enviar o seu pedido, expanda uma destas opções:

Se o pedido generateAccessToken for bem-sucedido, o corpo da resposta contém uma chave de acesso OAuth 2.0 e um prazo de validade. Em seguida, o accessToken pode ser usado para autenticar um pedido em nome da conta de serviço até atingir o expireTime:

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

Ir

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


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

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

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.")

Crie um token de ID do OpenID Connect (OIDC)

Os tokens de ID seguem a especificação do OpenID Connect (OIDC). Os tokens de ID são aceites por um número limitado de serviços e aplicações.

Para mais informações, consulte tokens de ID.

Para criar um token de ID, conclua estas tarefas:

Conceda as autorizações necessárias

Um pedido direto envolve duas identidades: o autor da chamada que pede a credencial e a conta de serviço para a qual a credencial é criada. A forma como configura as autorizações depende de o autor da chamada estar a autenticar como uma conta de serviço ou como uma conta de utilizador.

Se quiser executar um comando REST ou gcloud CLI nesta página num ambiente de desenvolvimento local, o autor da chamada pode ser representado por credenciais de utilizador. Para cargas de trabalho automatizadas, como uma aplicação executada no Compute Engine, o autor da chamada tem de ser representado por uma conta de serviço.

Conta de serviço

Quando a aplicação de chamadas usa uma conta de serviço como identidade, os seguintes principais estão envolvidos:

  • Conta do serviço de chamadas (CALLER_SA)

    Esta conta de serviço representa a aplicação de chamada, que emite o pedido das credenciais de curta duração.

  • Conta de serviço com privilégios (PRIV_SA)

    Esta conta de serviço tem as funções de IAM necessárias para o token de curta duração. Esta é a conta de serviço para a qual o token de curta duração é criado.

Para conceder autorizações à app CALLER_SA para criar credenciais de curta duração para PRIV_SA, concede à app CALLER_SA a função de criador de tokens de identidade do OpenID Connect da conta de serviço (roles/iam.serviceAccountOpenIdTokenCreator) em PRIV_SA.

Conceda a função necessária em PRIV_SA:

Consola

  1. Na Trusted Cloud consola, aceda à página Contas de serviço.

    Aceda a Contas de serviço

  2. Selecione um projeto.
  3. Clique no endereço de email da conta de serviço com privilégios, PRIV_SA.
  4. Clique no separador Autorizações.
  5. Em Principais com acesso a esta conta de serviço, clique em Conceder acesso.
  6. Introduza o endereço de email da conta de serviço do autor da chamada, CALLER_SA.

    Por exemplo, demo@my-project.s3ns-system.iam.gserviceaccount.com.

  7. Selecione a função Criador de tokens de identidade OpenID Connect da conta de serviço (roles/iam.serviceAccountOpenIdTokenCreator).
  8. Clique em Guardar para conceder a função à conta de serviço.

gcloud

O comando gcloud iam service-accounts add-iam-policy-binding concede uma função numa conta de serviço.

Antes de usar qualquer um dos dados de comandos abaixo, faça as seguintes substituições:

  • PRIV_SA: o endereço de email da conta de serviço com privilégios para a qual o token é gerado.
  • CALLER_SA: o endereço de email da conta de serviço que representa a aplicação que está a pedir o token de curta duração.

Execute o seguinte comando:

Linux, macOS ou 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

Deve receber uma resposta semelhante à seguinte:

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

REST

  1. Leia a política de permissão para PRIV_SA:

    O método serviceAccounts.getIamPolicy obtém a política de autorização de uma conta de serviço.

    Antes de usar qualquer um dos dados do pedido, faça as seguintes substituições:

    • PROJECT_ID: O ID do seu Trusted Cloud projeto. Os IDs dos projetos são strings alfanuméricas, como my-project.
    • PRIV_SA: o endereço de email da conta de serviço com privilégios para a qual o token de curta duração é criado.
    • POLICY_VERSION: a versão da política a ser devolvida. Os pedidos devem especificar a versão da política mais recente, que é a versão 3 da política. Consulte o artigo Especificar uma versão da política ao obter uma política para ver detalhes.

    Método HTTP e URL:

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

    Corpo JSON do pedido:

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

    Para enviar o seu pedido, expanda uma destas opções:

    Deve receber uma resposta JSON semelhante à seguinte:

    {
      "version": 1,
      "etag": "BwWKmjvelug=",
      "bindings": [
        {
          "role": "roles/serviceAccountAdmin",
          "members": [
            "principal://iam.googleapis.com/locations/global/workforcePools/my-pool/subject/my-user@example.com"
          ]
        }
      ]
    }
    

    Se não tiver concedido funções à conta de serviço, a resposta contém apenas um valor etag. Inclua esse valor etag no passo seguinte.

  2. Modifique a política de autorização para conceder a CALLER_SA a função de criador de tokens de identidade do OpenID Connect da conta de serviço (roles/iam.serviceAccountOpenIdTokenCreator).

    Por exemplo, para modificar a resposta de exemplo do passo anterior, adicione o seguinte:

      {
        "version": 1,
        "etag": "BwWKmjvelug=",
        "bindings": [
          {
            "role": "roles/serviceAccountAdmin",
            "members": [
              "principal://iam.googleapis.com/locations/global/workforcePools/my-pool/subject/my-user@example.com"
            ]
          },
          {
            "role": "roles/iam.serviceAccountOpenIdTokenCreator",
            "members": [
              "serviceAccount:CALLER_SA"
            ]
          }
        ]
      }
  3. Escreva a política de permissão atualizada:

    O método serviceAccounts.setIamPolicy define uma política de permissão atualizada para a conta de serviço.

    Antes de usar qualquer um dos dados do pedido, faça as seguintes substituições:

    • PROJECT_ID: O ID do seu Trusted Cloud projeto. Os IDs dos projetos são strings alfanuméricas, como my-project.
    • PRIV_SA: o endereço de email da conta de serviço com privilégios para a qual o token de curta duração é criado.
    • POLICY_VERSION: a versão da política a ser devolvida. Os pedidos devem especificar a versão da política mais recente, que é a versão 3 da política. Consulte o artigo Especificar uma versão da política ao obter uma política para ver detalhes.
    • POLICY: Uma representação JSON da política que quer definir. Para mais informações sobre o formato de uma política, consulte a referência de políticas.

      Por exemplo, para definir a política de permissão apresentada no passo anterior, substitua POLICY pelo seguinte, em que CALLER_SA é a conta de serviço que cria o token de curta duração:

      {
        "version": 1,
        "etag": "BwWKmjvelug=",
        "bindings": [
          {
            "role": "roles/serviceAccountAdmin",
            "members": [
              "principal://iam.googleapis.com/locations/global/workforcePools/my-pool/subject/my-user@example.com"
            ]
          },
          {
            "role": "roles/iam.serviceAccountOpenIdTokenCreator",
            "members": [
              "serviceAccount:CALLER_SA"
            ]
          }
        ]
      }

    Método HTTP e URL:

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

    Corpo JSON do pedido:

    {
      "policy": POLICY
    }
    

    Para enviar o seu pedido, expanda uma destas opções:

    A resposta contém a política de permissão atualizada.

Credenciais de utilizador

Quando quiser usar a CLI Google Cloud para gerar tokens de curta duração ou quiser gerar tokens de curta duração a partir de um ambiente de desenvolvimento local, pode usar uma conta de utilizador para gerar os tokens. Muitas vezes, pode usar a sua própria conta de utilizador.

Quando usa uma conta de utilizador para gerar tokens de curta duração, estão envolvidas as seguintes identidades:

  • Conta do autor da chamada (CALLER_ACCOUNT)

    Esta conta de utilizador é usada para gerar credenciais de curta duração para a conta de serviço com privilégios.

  • Conta de serviço com privilégios (PRIV_SA)

    Esta conta de serviço tem as funções de IAM necessárias para o token de curta duração. Esta é a conta de serviço para a qual o token de curta duração é criado.

Para permitir que CALLER_ACCOUNT crie credenciais de curta duração para PRIV_SA, concede a CALLER_ACCOUNT a função Criador de tokens de identidade OpenID Connect da conta de serviço (roles/iam.serviceAccountOpenIdTokenCreator) em PRIV_SA.

Conceda a função necessária em PRIV_SA:

Consola

  1. Na Trusted Cloud consola, aceda à página Contas de serviço.

    Aceda a Contas de serviço

  2. Selecione um projeto.
  3. Clique no endereço de email da conta de serviço com privilégios, PRIV_SA.
  4. Clique no separador Autorizações.
  5. Em Principais com acesso a esta conta de serviço, clique em Conceder acesso.
  6. Introduza o identificador principal da conta do autor da chamada, CALLER_ACCOUNT.

    Por exemplo, //iam.googleapis.com/locations/global/workforcePools/my-pool/subject/my-user@example.com.

  7. Selecione a função Criador de tokens de identidade OpenID Connect da conta de serviço (roles/iam.serviceAccountOpenIdTokenCreator).
  8. Clique em Guardar para conceder a função à conta de utilizador.

gcloud

O comando gcloud iam service-accounts add-iam-policy-binding concede uma função numa conta de serviço.

Antes de usar qualquer um dos dados de comandos abaixo, faça as seguintes substituições:

  • PRIV_SA: o endereço de email da conta de serviço com privilégios para a qual o token é gerado.
  • CALLER_ACCOUNT: o endereço de email da conta de utilizador que está a ser usada para pedir o token de curta duração.

Execute o seguinte comando:

Linux, macOS ou 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

Deve receber uma resposta semelhante à seguinte:

Updated IAM policy for serviceAccount [PRIV_SA].
{
  "bindings": [
    {
      "members": [
        "principal://iam.googleapis.com/locations/global/workforcePools/my-pool/subject/my-user@example.com"
      ],
      "role": "roles/iam.serviceAccountOpenIdTokenCreator"
    }
  ],
  "etag": "BwX1ZbefjXU=",
  "version": 1
}

REST

  1. Leia a política de permissão para PRIV_SA:

    O método serviceAccounts.getIamPolicy obtém a política de autorização de uma conta de serviço.

    Antes de usar qualquer um dos dados do pedido, faça as seguintes substituições:

    • PROJECT_ID: O ID do seu Trusted Cloud projeto. Os IDs dos projetos são strings alfanuméricas, como my-project.
    • PRIV_SA: o endereço de email da conta de serviço com privilégios para a qual o token de curta duração é criado.
    • POLICY_VERSION: a versão da política a ser devolvida. Os pedidos devem especificar a versão da política mais recente, que é a versão 3 da política. Consulte o artigo Especificar uma versão da política ao obter uma política para ver detalhes.

    Método HTTP e URL:

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

    Corpo JSON do pedido:

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

    Para enviar o seu pedido, expanda uma destas opções:

    Deve receber uma resposta JSON semelhante à seguinte:

    {
      "version": 1,
      "etag": "BwWKmjvelug=",
      "bindings": [
        {
          "role": "roles/serviceAccountAdmin",
          "members": [
            "principal://iam.googleapis.com/locations/global/workforcePools/my-pool/subject/my-user@example.com"
          ]
        }
      ]
    }
    

    Se não tiver concedido funções à conta de serviço, a resposta contém apenas um valor etag. Inclua esse valor etag no passo seguinte.

  2. Modifique a política de permissão para conceder à conta de serviço CALLER_ACCOUNT a função de criador de tokens de identidade do OpenID Connect ( roles/iam.serviceAccountOpenIdTokenCreator).

    Por exemplo, para modificar a resposta de exemplo do passo anterior, adicione o seguinte:

    {
      "version": 1,
      "etag": "BwWKmjvelug=",
      "bindings": [
        {
          "role": "roles/serviceAccountAdmin",
          "members": [
            "principal://iam.googleapis.com/locations/global/workforcePools/my-pool/subject/my-user@example.com"
          ]
        },
        {
          "role": "roles/iam.serviceAccountOpenIdTokenCreator",
          "members": [
            "principal://iam.googleapis.com/locations/global/workforcePools/my-pool/subject/my-user@example.com"
          ]
        }
      ]
    }
  3. Escreva a política de permissão atualizada:

    O método serviceAccounts.setIamPolicy define uma política de permissão atualizada para a conta de serviço.

    Antes de usar qualquer um dos dados do pedido, faça as seguintes substituições:

    • PROJECT_ID: O ID do seu Trusted Cloud projeto. Os IDs dos projetos são strings alfanuméricas, como my-project.
    • PRIV_SA: o endereço de email da conta de serviço com privilégios para a qual o token de curta duração é criado.
    • POLICY_VERSION: a versão da política a ser devolvida. Os pedidos devem especificar a versão da política mais recente, que é a versão 3 da política. Consulte o artigo Especificar uma versão da política ao obter uma política para ver detalhes.
    • POLICY: Uma representação JSON da política que quer definir. Para mais informações sobre o formato de uma política, consulte a referência de políticas.

      Por exemplo, para definir a política de permissão apresentada no passo anterior, substitua POLICY pelo seguinte, em que CALLER_ACCOUNT é a conta de utilizador que está a criar o token de curta duração:

      {
        "version": 1,
        "etag": "BwWKmjvelug=",
        "bindings": [
          {
            "role": "roles/serviceAccountAdmin",
            "members": [
              "principal://iam.googleapis.com/locations/global/workforcePools/my-pool/subject/my-user@example.com"
            ]
          },
          {
            "role": "roles/iam.serviceAccountOpenIdTokenCreator",
            "members": [
              "CALLER_ACCOUNT"
            ]
          }
        ]
      }

    Método HTTP e URL:

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

    Corpo JSON do pedido:

    {
      "policy": POLICY
    }
    

    Para enviar o seu pedido, expanda uma destas opções:

    A resposta contém a política de permissão atualizada.

Gere o token de ID

Pode gerar um token de ID do OpenID Connect (OIDC) através da CLI gcloud, da API REST ou das bibliotecas cliente da nuvem e das bibliotecas cliente de APIs Google.

Os exemplos abaixo foram concebidos para serem usados num ambiente de desenvolvimento local; o autor da chamada tem de ser representado por uma conta de utilizador e não por uma conta de serviço.

Os tokens de ID OIDC são válidos durante 1 hora (3600 segundos).

Gere um token de ID OIDC assinado pela Google para uma conta de serviço:

gcloud

  1. Certifique-se de que tem sessão iniciada na CLI gcloud com a conta de utilizador do autor da chamada.

  2. Gere um token para a conta de serviço através do comando gcloud auth print-identity-token.

    Antes de usar qualquer um dos dados de comandos abaixo, faça as seguintes substituições:

    • PRIV_SA: o endereço de email da conta de serviço com privilégios para a qual o token de curta duração é criado.
    • AUDIENCE_NAME: o público-alvo do token, normalmente o URL da aplicação ou do serviço que o token vai usar para aceder.
      • Execute o seguinte comando:

        Linux, macOS ou 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"

        Deve receber uma resposta semelhante à seguinte:

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

REST

O método serviceAccounts.generateIdToken da API Service Account Credentials gera um token de ID OIDC para uma conta de serviço.

Antes de usar qualquer um dos dados do pedido, faça as seguintes substituições:

  • PRIV_SA: o endereço de email da conta de serviço com privilégios para a qual o token de curta duração é criado.
  • AUDIENCE_NAME: o público-alvo do token, normalmente o URL da aplicação ou do serviço que o token vai usar para aceder.

Método HTTP e URL:

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

Corpo JSON do pedido:

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

Para enviar o seu pedido, expanda uma destas opções:

Se o pedido generateId for bem-sucedido, o corpo da resposta contém um token de ID válido durante 1 hora. Em seguida, o token pode ser usado para autenticar um pedido em nome da conta de serviço:

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

Crie um símbolo da Web JSON (JWT) autoassinado

Os símbolos da Web JSON (JWTs) autoassinados são úteis em vários cenários:

  • Comunicar em segurança entre as suas próprias aplicações. Neste cenário, uma aplicação pode assinar um token que pode ser validado por outra aplicação para fins de autenticação.
  • Tratar uma conta de serviço como um fornecedor de identidade ao assinar um JWT que contém reivindicações arbitrárias sobre um utilizador, uma conta ou um dispositivo.

Para criar um JWT, conclua estas tarefas:

Conceda as autorizações necessárias

Um pedido direto envolve duas identidades: o autor da chamada que pede a credencial e a conta de serviço para a qual a credencial é criada. A forma como configura as autorizações depende de o autor da chamada estar a autenticar como uma conta de serviço ou como uma conta de utilizador.

Se quiser executar um comando REST ou gcloud CLI nesta página num ambiente de desenvolvimento local, o autor da chamada pode ser representado por credenciais de utilizador. Para cargas de trabalho automatizadas, como uma aplicação executada no Compute Engine, o autor da chamada tem de ser representado por uma conta de serviço.

Conta de serviço

Quando a aplicação de chamadas usa uma conta de serviço como identidade, os seguintes principais estão envolvidos:

  • Conta do serviço de chamadas (CALLER_SA)

    Esta conta de serviço representa a aplicação de chamada, que emite o pedido das credenciais de curta duração.

  • Conta de serviço com privilégios (PRIV_SA)

    Esta conta de serviço tem as funções de IAM necessárias para o token de curta duração. Esta é a conta de serviço para a qual o token de curta duração é criado.

Para conceder autorizações à app CALLER_SA para criar credenciais de curta duração para PRIV_SA, atribui à app CALLER_SA a função Criador de tokens de conta de serviço (roles/iam.serviceAccountTokenCreator) em PRIV_SA.

Conceda a função necessária em PRIV_SA:

Consola

  1. Na Trusted Cloud consola, aceda à página Contas de serviço.

    Aceda a Contas de serviço

  2. Selecione um projeto.
  3. Clique no endereço de email da conta de serviço com privilégios, PRIV_SA.
  4. Clique no separador Autorizações.
  5. Em Principais com acesso a esta conta de serviço, clique em Conceder acesso.
  6. Introduza o endereço de email da conta de serviço do autor da chamada, CALLER_SA.

    Por exemplo, demo@my-project.s3ns-system.iam.gserviceaccount.com.

  7. Selecione a função Criador de tokens de contas de serviço (roles/iam.serviceAccountTokenCreator).
  8. Clique em Guardar para conceder a função à conta de serviço.

gcloud

O comando gcloud iam service-accounts add-iam-policy-binding concede uma função numa conta de serviço.

Antes de usar qualquer um dos dados de comandos abaixo, faça as seguintes substituições:

  • PRIV_SA: o endereço de email da conta de serviço com privilégios para a qual o token é gerado.
  • CALLER_SA: o endereço de email da conta de serviço que representa a aplicação que está a pedir o token de curta duração.

Execute o seguinte comando:

Linux, macOS ou 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

Deve receber uma resposta semelhante à seguinte:

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

REST

  1. Leia a política de permissão para PRIV_SA:

    O método serviceAccounts.getIamPolicy obtém a política de autorização de uma conta de serviço.

    Antes de usar qualquer um dos dados do pedido, faça as seguintes substituições:

    • PROJECT_ID: O ID do seu Trusted Cloud projeto. Os IDs dos projetos são strings alfanuméricas, como my-project.
    • PRIV_SA: o endereço de email da conta de serviço com privilégios para a qual o token de curta duração é criado.
    • POLICY_VERSION: a versão da política a ser devolvida. Os pedidos devem especificar a versão da política mais recente, que é a versão 3 da política. Consulte o artigo Especificar uma versão da política ao obter uma política para ver detalhes.

    Método HTTP e URL:

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

    Corpo JSON do pedido:

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

    Para enviar o seu pedido, expanda uma destas opções:

    Deve receber uma resposta JSON semelhante à seguinte:

    {
      "version": 1,
      "etag": "BwWKmjvelug=",
      "bindings": [
        {
          "role": "roles/serviceAccountAdmin",
          "members": [
            "principal://iam.googleapis.com/locations/global/workforcePools/my-pool/subject/my-user@example.com"
          ]
        }
      ]
    }
    

    Se não tiver concedido funções à conta de serviço, a resposta contém apenas um valor etag. Inclua esse valor etag no passo seguinte.

  2. Modifique a política de permissão para conceder a CALLER_SA a função de criador de tokens de conta de serviço (roles/iam.serviceAccountTokenCreator).

    Por exemplo, para modificar a resposta de exemplo do passo anterior, adicione o seguinte:

      {
        "version": 1,
        "etag": "BwWKmjvelug=",
        "bindings": [
          {
            "role": "roles/serviceAccountAdmin",
            "members": [
              "principal://iam.googleapis.com/locations/global/workforcePools/my-pool/subject/my-user@example.com"
            ]
          },
          {
            "role": "roles/iam.serviceAccountTokenCreator",
            "members": [
              "serviceAccount:CALLER_SA"
            ]
          }
        ]
      }
  3. Escreva a política de permissão atualizada:

    O método serviceAccounts.setIamPolicy define uma política de permissão atualizada para a conta de serviço.

    Antes de usar qualquer um dos dados do pedido, faça as seguintes substituições:

    • PROJECT_ID: O ID do seu Trusted Cloud projeto. Os IDs dos projetos são strings alfanuméricas, como my-project.
    • PRIV_SA: o endereço de email da conta de serviço com privilégios para a qual o token de curta duração é criado.
    • POLICY_VERSION: a versão da política a ser devolvida. Os pedidos devem especificar a versão da política mais recente, que é a versão 3 da política. Consulte o artigo Especificar uma versão da política ao obter uma política para ver detalhes.
    • POLICY: Uma representação JSON da política que quer definir. Para mais informações sobre o formato de uma política, consulte a referência de políticas.

      Por exemplo, para definir a política de permissão apresentada no passo anterior, substitua POLICY pelo seguinte, em que CALLER_SA é a conta de serviço que cria o token de curta duração:

      {
        "version": 1,
        "etag": "BwWKmjvelug=",
        "bindings": [
          {
            "role": "roles/serviceAccountAdmin",
            "members": [
              "principal://iam.googleapis.com/locations/global/workforcePools/my-pool/subject/my-user@example.com"
            ]
          },
          {
            "role": "roles/iam.serviceAccountTokenCreator",
            "members": [
              "serviceAccount:CALLER_SA"
            ]
          }
        ]
      }

    Método HTTP e URL:

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

    Corpo JSON do pedido:

    {
      "policy": POLICY
    }
    

    Para enviar o seu pedido, expanda uma destas opções:

    A resposta contém a política de permissão atualizada.

Credenciais de utilizador

Quando quiser usar a CLI Google Cloud para gerar tokens de curta duração ou quiser gerar tokens de curta duração a partir de um ambiente de desenvolvimento local, pode usar uma conta de utilizador para gerar os tokens. Muitas vezes, pode usar a sua própria conta de utilizador.

Quando usa uma conta de utilizador para gerar tokens de curta duração, estão envolvidas as seguintes identidades:

  • Conta do autor da chamada (CALLER_ACCOUNT)

    Esta conta de utilizador é usada para gerar credenciais de curta duração para a conta de serviço com privilégios.

  • Conta de serviço com privilégios (PRIV_SA)

    Esta conta de serviço tem as funções de IAM necessárias para o token de curta duração. Esta é a conta de serviço para a qual o token de curta duração é criado.

Para permitir que CALLER_ACCOUNT crie credenciais de curta duração para PRIV_SA, atribui a CALLER_ACCOUNT a função de criador de tokens da conta de serviço (roles/iam.serviceAccountTokenCreator) em PRIV_SA.

Conceda a função necessária em PRIV_SA:

Consola

  1. Na Trusted Cloud consola, aceda à página Contas de serviço.

    Aceda a Contas de serviço

  2. Selecione um projeto.
  3. Clique no endereço de email da conta de serviço com privilégios, PRIV_SA.
  4. Clique no separador Autorizações.
  5. Em Principais com acesso a esta conta de serviço, clique em Conceder acesso.
  6. Introduza o identificador principal da conta do autor da chamada, CALLER_ACCOUNT.

    Por exemplo, //iam.googleapis.com/locations/global/workforcePools/my-pool/subject/my-user@example.com.

  7. Selecione a função Criador de tokens de contas de serviço (roles/iam.serviceAccountTokenCreator).
  8. Clique em Guardar para conceder a função à conta de utilizador.

gcloud

O comando gcloud iam service-accounts add-iam-policy-binding concede uma função numa conta de serviço.

Antes de usar qualquer um dos dados de comandos abaixo, faça as seguintes substituições:

  • PRIV_SA: o endereço de email da conta de serviço com privilégios para a qual o token é gerado.
  • CALLER_ACCOUNT: o endereço de email da conta de utilizador que está a ser usada para pedir o token de curta duração.

Execute o seguinte comando:

Linux, macOS ou 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

Deve receber uma resposta semelhante à seguinte:

Updated IAM policy for serviceAccount [PRIV_SA].
{
  "bindings": [
    {
      "members": [
        "principal://iam.googleapis.com/locations/global/workforcePools/my-pool/subject/my-user@example.com"
      ],
      "role": "roles/iam.serviceAccountTokenCreator"
    }
  ],
  "etag": "BwX1ZbefjXU=",
  "version": 1
}

REST

  1. Leia a política de permissão para PRIV_SA:

    O método serviceAccounts.getIamPolicy obtém a política de autorização de uma conta de serviço.

    Antes de usar qualquer um dos dados do pedido, faça as seguintes substituições:

    • PROJECT_ID: O ID do seu Trusted Cloud projeto. Os IDs dos projetos são strings alfanuméricas, como my-project.
    • PRIV_SA: o endereço de email da conta de serviço com privilégios para a qual o token de curta duração é criado.
    • POLICY_VERSION: a versão da política a ser devolvida. Os pedidos devem especificar a versão da política mais recente, que é a versão 3 da política. Consulte o artigo Especificar uma versão da política ao obter uma política para ver detalhes.

    Método HTTP e URL:

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

    Corpo JSON do pedido:

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

    Para enviar o seu pedido, expanda uma destas opções:

    Deve receber uma resposta JSON semelhante à seguinte:

    {
      "version": 1,
      "etag": "BwWKmjvelug=",
      "bindings": [
        {
          "role": "roles/serviceAccountAdmin",
          "members": [
            "principal://iam.googleapis.com/locations/global/workforcePools/my-pool/subject/my-user@example.com"
          ]
        }
      ]
    }
    

    Se não tiver concedido funções à conta de serviço, a resposta contém apenas um valor etag. Inclua esse valor etag no passo seguinte.

  2. Modifique a política de autorização para conceder CALLER_ACCOUNT a função de criador de tokens de contas de serviço ( roles/iam.serviceAccountTokenCreator).

    Por exemplo, para modificar a resposta de exemplo do passo anterior, adicione o seguinte:

    {
      "version": 1,
      "etag": "BwWKmjvelug=",
      "bindings": [
        {
          "role": "roles/serviceAccountAdmin",
          "members": [
            "principal://iam.googleapis.com/locations/global/workforcePools/my-pool/subject/my-user@example.com"
          ]
        },
        {
          "role": "roles/iam.serviceAccountTokenCreator",
          "members": [
            "principal://iam.googleapis.com/locations/global/workforcePools/my-pool/subject/my-user@example.com"
          ]
        }
      ]
    }
  3. Escreva a política de permissão atualizada:

    O método serviceAccounts.setIamPolicy define uma política de permissão atualizada para a conta de serviço.

    Antes de usar qualquer um dos dados do pedido, faça as seguintes substituições:

    • PROJECT_ID: O ID do seu Trusted Cloud projeto. Os IDs dos projetos são strings alfanuméricas, como my-project.
    • PRIV_SA: o endereço de email da conta de serviço com privilégios para a qual o token de curta duração é criado.
    • POLICY_VERSION: a versão da política a ser devolvida. Os pedidos devem especificar a versão da política mais recente, que é a versão 3 da política. Consulte o artigo Especificar uma versão da política ao obter uma política para ver detalhes.
    • POLICY: Uma representação JSON da política que quer definir. Para mais informações sobre o formato de uma política, consulte a referência de políticas.

      Por exemplo, para definir a política de permissão apresentada no passo anterior, substitua POLICY pelo seguinte, em que CALLER_ACCOUNT é a conta de utilizador que está a criar o token de curta duração:

      {
        "version": 1,
        "etag": "BwWKmjvelug=",
        "bindings": [
          {
            "role": "roles/serviceAccountAdmin",
            "members": [
              "principal://iam.googleapis.com/locations/global/workforcePools/my-pool/subject/my-user@example.com"
            ]
          },
          {
            "role": "roles/iam.serviceAccountTokenCreator",
            "members": [
              "CALLER_ACCOUNT"
            ]
          }
        ]
      }

    Método HTTP e URL:

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

    Corpo JSON do pedido:

    {
      "policy": POLICY
    }
    

    Para enviar o seu pedido, expanda uma destas opções:

    A resposta contém a política de permissão atualizada.

Gere o JWT

Gere um JWT autoassinado:

REST

O método serviceAccounts.signJwt da API Service Account Credentials assina um JWT com a chave privada gerida pelo sistema de uma conta de serviço.

Antes de usar qualquer um dos dados do pedido, faça as seguintes substituições:

  • PRIV_SA: o endereço de email da conta de serviço com privilégios para a qual o token de curta duração é criado.
  • JWT_PAYLOAD: o payload JWT a assinar, que é um objeto JSON que contém um conjunto de afirmações JWT. Inclua as reivindicações necessárias para o exemplo de utilização pretendido e para cumprir os requisitos de validação do serviço que está a chamar. Se estiver a chamar uma API Google, consulte o guia de autenticação da Google para ver os requisitos de reivindicação.

    A reivindicação exp (hora de validade) não pode ser superior a 12 horas no futuro. Se estiver a chamar uma API Google, a reivindicação exp tem de ser definida no máximo 1 hora no futuro.

    A carga útil de exemplo seguinte contém reivindicações para chamar uma API Google, em que EXP é uma data/hora com indicação de tempo inteiro que representa a hora de validade:

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

Método HTTP e URL:

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

Corpo JSON do pedido:

{
  "payload": "JWT_PAYLOAD"
}

Para enviar o seu pedido, expanda uma destas opções:

Se o pedido signJwt for bem-sucedido, o corpo da resposta contém um JWT assinado e o ID da chave de assinatura que foi usado para assinar o JWT. Pode usar o valor signedJwt como um token de autorização para autenticar diretamente um pedido em nome da conta de serviço. O token é válido até à hora de validade especificada no pedido:

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

Crie um objeto binário autoassinado (blob)

Os objetos binários ou os blobs autoassinados são usados para transmitir dados binários de forma que o originador dos dados seja conhecido (porque o blob é autoassinado). Os blobs podem ser usados para criar assinaturas, um objeto do Cloud Storage necessário para vários fluxos de autenticação, incluindo URLs assinados. Para obter informações sobre assinaturas, consulte a documentação do Cloud Storage.

Para criar um objeto binário autoassinado, conclua estas tarefas:

Conceda as autorizações necessárias

Um pedido direto envolve duas identidades: o autor da chamada que pede a credencial e a conta de serviço para a qual a credencial é criada. A forma como configura as autorizações depende de o autor da chamada estar a autenticar como uma conta de serviço ou como uma conta de utilizador.

Se quiser executar um comando REST ou gcloud CLI nesta página num ambiente de desenvolvimento local, o autor da chamada pode ser representado por credenciais de utilizador. Para cargas de trabalho automatizadas, como uma aplicação executada no Compute Engine, o autor da chamada tem de ser representado por uma conta de serviço.

Conta de serviço

Quando a aplicação de chamadas usa uma conta de serviço como identidade, os seguintes principais estão envolvidos:

  • Conta do serviço de chamadas (CALLER_SA)

    Esta conta de serviço representa a aplicação de chamada, que emite o pedido das credenciais de curta duração.

  • Conta de serviço com privilégios (PRIV_SA)

    Esta conta de serviço tem as funções de IAM necessárias para o token de curta duração. Esta é a conta de serviço para a qual o token de curta duração é criado.

Para conceder autorizações à app CALLER_SA para criar credenciais de curta duração para PRIV_SA, atribui à app CALLER_SA a função Criador de tokens de conta de serviço (roles/iam.serviceAccountTokenCreator) em PRIV_SA.

Conceda a função necessária em PRIV_SA:

Consola

  1. Na Trusted Cloud consola, aceda à página Contas de serviço.

    Aceda a Contas de serviço

  2. Selecione um projeto.
  3. Clique no endereço de email da conta de serviço com privilégios, PRIV_SA.
  4. Clique no separador Autorizações.
  5. Em Principais com acesso a esta conta de serviço, clique em Conceder acesso.
  6. Introduza o endereço de email da conta de serviço do autor da chamada, CALLER_SA.

    Por exemplo, demo@my-project.s3ns-system.iam.gserviceaccount.com.

  7. Selecione a função Criador de tokens de contas de serviço (roles/iam.serviceAccountTokenCreator).
  8. Clique em Guardar para conceder a função à conta de serviço.

gcloud

O comando gcloud iam service-accounts add-iam-policy-binding concede uma função numa conta de serviço.

Antes de usar qualquer um dos dados de comandos abaixo, faça as seguintes substituições:

  • PRIV_SA: o endereço de email da conta de serviço com privilégios para a qual o token é gerado.
  • CALLER_SA: o endereço de email da conta de serviço que representa a aplicação que está a pedir o token de curta duração.

Execute o seguinte comando:

Linux, macOS ou 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

Deve receber uma resposta semelhante à seguinte:

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

REST

  1. Leia a política de permissão para PRIV_SA:

    O método serviceAccounts.getIamPolicy obtém a política de autorização de uma conta de serviço.

    Antes de usar qualquer um dos dados do pedido, faça as seguintes substituições:

    • PROJECT_ID: O ID do seu Trusted Cloud projeto. Os IDs dos projetos são strings alfanuméricas, como my-project.
    • PRIV_SA: o endereço de email da conta de serviço com privilégios para a qual o token de curta duração é criado.
    • POLICY_VERSION: a versão da política a ser devolvida. Os pedidos devem especificar a versão da política mais recente, que é a versão 3 da política. Consulte o artigo Especificar uma versão da política ao obter uma política para ver detalhes.

    Método HTTP e URL:

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

    Corpo JSON do pedido:

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

    Para enviar o seu pedido, expanda uma destas opções:

    Deve receber uma resposta JSON semelhante à seguinte:

    {
      "version": 1,
      "etag": "BwWKmjvelug=",
      "bindings": [
        {
          "role": "roles/serviceAccountAdmin",
          "members": [
            "principal://iam.googleapis.com/locations/global/workforcePools/my-pool/subject/my-user@example.com"
          ]
        }
      ]
    }
    

    Se não tiver concedido funções à conta de serviço, a resposta contém apenas um valor etag. Inclua esse valor etag no passo seguinte.

  2. Modifique a política de permissão para conceder a CALLER_SA a função de criador de tokens de conta de serviço (roles/iam.serviceAccountTokenCreator).

    Por exemplo, para modificar a resposta de exemplo do passo anterior, adicione o seguinte:

      {
        "version": 1,
        "etag": "BwWKmjvelug=",
        "bindings": [
          {
            "role": "roles/serviceAccountAdmin",
            "members": [
              "principal://iam.googleapis.com/locations/global/workforcePools/my-pool/subject/my-user@example.com"
            ]
          },
          {
            "role": "roles/iam.serviceAccountTokenCreator",
            "members": [
              "serviceAccount:CALLER_SA"
            ]
          }
        ]
      }
  3. Escreva a política de permissão atualizada:

    O método serviceAccounts.setIamPolicy define uma política de permissão atualizada para a conta de serviço.

    Antes de usar qualquer um dos dados do pedido, faça as seguintes substituições:

    • PROJECT_ID: O ID do seu Trusted Cloud projeto. Os IDs dos projetos são strings alfanuméricas, como my-project.
    • PRIV_SA: o endereço de email da conta de serviço com privilégios para a qual o token de curta duração é criado.
    • POLICY_VERSION: a versão da política a ser devolvida. Os pedidos devem especificar a versão da política mais recente, que é a versão 3 da política. Consulte o artigo Especificar uma versão da política ao obter uma política para ver detalhes.
    • POLICY: Uma representação JSON da política que quer definir. Para mais informações sobre o formato de uma política, consulte a referência de políticas.

      Por exemplo, para definir a política de permissão apresentada no passo anterior, substitua POLICY pelo seguinte, em que CALLER_SA é a conta de serviço que cria o token de curta duração:

      {
        "version": 1,
        "etag": "BwWKmjvelug=",
        "bindings": [
          {
            "role": "roles/serviceAccountAdmin",
            "members": [
              "principal://iam.googleapis.com/locations/global/workforcePools/my-pool/subject/my-user@example.com"
            ]
          },
          {
            "role": "roles/iam.serviceAccountTokenCreator",
            "members": [
              "serviceAccount:CALLER_SA"
            ]
          }
        ]
      }

    Método HTTP e URL:

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

    Corpo JSON do pedido:

    {
      "policy": POLICY
    }
    

    Para enviar o seu pedido, expanda uma destas opções:

    A resposta contém a política de permissão atualizada.

Credenciais de utilizador

Quando quiser usar a CLI Google Cloud para gerar tokens de curta duração ou quiser gerar tokens de curta duração a partir de um ambiente de desenvolvimento local, pode usar uma conta de utilizador para gerar os tokens. Muitas vezes, pode usar a sua própria conta de utilizador.

Quando usa uma conta de utilizador para gerar tokens de curta duração, estão envolvidas as seguintes identidades:

  • Conta do autor da chamada (CALLER_ACCOUNT)

    Esta conta de utilizador é usada para gerar credenciais de curta duração para a conta de serviço com privilégios.

  • Conta de serviço com privilégios (PRIV_SA)

    Esta conta de serviço tem as funções de IAM necessárias para o token de curta duração. Esta é a conta de serviço para a qual o token de curta duração é criado.

Para permitir que CALLER_ACCOUNT crie credenciais de curta duração para PRIV_SA, atribui a CALLER_ACCOUNT a função de criador de tokens da conta de serviço (roles/iam.serviceAccountTokenCreator) em PRIV_SA.

Conceda a função necessária em PRIV_SA:

Consola

  1. Na Trusted Cloud consola, aceda à página Contas de serviço.

    Aceda a Contas de serviço

  2. Selecione um projeto.
  3. Clique no endereço de email da conta de serviço com privilégios, PRIV_SA.
  4. Clique no separador Autorizações.
  5. Em Principais com acesso a esta conta de serviço, clique em Conceder acesso.
  6. Introduza o identificador principal da conta do autor da chamada, CALLER_ACCOUNT.

    Por exemplo, //iam.googleapis.com/locations/global/workforcePools/my-pool/subject/my-user@example.com.

  7. Selecione a função Criador de tokens de contas de serviço (roles/iam.serviceAccountTokenCreator).
  8. Clique em Guardar para conceder a função à conta de utilizador.

gcloud

O comando gcloud iam service-accounts add-iam-policy-binding concede uma função numa conta de serviço.

Antes de usar qualquer um dos dados de comandos abaixo, faça as seguintes substituições:

  • PRIV_SA: o endereço de email da conta de serviço com privilégios para a qual o token é gerado.
  • CALLER_ACCOUNT: o endereço de email da conta de utilizador que está a ser usada para pedir o token de curta duração.

Execute o seguinte comando:

Linux, macOS ou 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

Deve receber uma resposta semelhante à seguinte:

Updated IAM policy for serviceAccount [PRIV_SA].
{
  "bindings": [
    {
      "members": [
        "principal://iam.googleapis.com/locations/global/workforcePools/my-pool/subject/my-user@example.com"
      ],
      "role": "roles/iam.serviceAccountTokenCreator"
    }
  ],
  "etag": "BwX1ZbefjXU=",
  "version": 1
}

REST

  1. Leia a política de permissão para PRIV_SA:

    O método serviceAccounts.getIamPolicy obtém a política de autorização de uma conta de serviço.

    Antes de usar qualquer um dos dados do pedido, faça as seguintes substituições:

    • PROJECT_ID: O ID do seu Trusted Cloud projeto. Os IDs dos projetos são strings alfanuméricas, como my-project.
    • PRIV_SA: o endereço de email da conta de serviço com privilégios para a qual o token de curta duração é criado.
    • POLICY_VERSION: a versão da política a ser devolvida. Os pedidos devem especificar a versão da política mais recente, que é a versão 3 da política. Consulte o artigo Especificar uma versão da política ao obter uma política para ver detalhes.

    Método HTTP e URL:

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

    Corpo JSON do pedido:

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

    Para enviar o seu pedido, expanda uma destas opções:

    Deve receber uma resposta JSON semelhante à seguinte:

    {
      "version": 1,
      "etag": "BwWKmjvelug=",
      "bindings": [
        {
          "role": "roles/serviceAccountAdmin",
          "members": [
            "principal://iam.googleapis.com/locations/global/workforcePools/my-pool/subject/my-user@example.com"
          ]
        }
      ]
    }
    

    Se não tiver concedido funções à conta de serviço, a resposta contém apenas um valor etag. Inclua esse valor etag no passo seguinte.

  2. Modifique a política de autorização para conceder CALLER_ACCOUNT a função de criador de tokens de contas de serviço ( roles/iam.serviceAccountTokenCreator).

    Por exemplo, para modificar a resposta de exemplo do passo anterior, adicione o seguinte:

    {
      "version": 1,
      "etag": "BwWKmjvelug=",
      "bindings": [
        {
          "role": "roles/serviceAccountAdmin",
          "members": [
            "principal://iam.googleapis.com/locations/global/workforcePools/my-pool/subject/my-user@example.com"
          ]
        },
        {
          "role": "roles/iam.serviceAccountTokenCreator",
          "members": [
            "principal://iam.googleapis.com/locations/global/workforcePools/my-pool/subject/my-user@example.com"
          ]
        }
      ]
    }
  3. Escreva a política de permissão atualizada:

    O método serviceAccounts.setIamPolicy define uma política de permissão atualizada para a conta de serviço.

    Antes de usar qualquer um dos dados do pedido, faça as seguintes substituições:

    • PROJECT_ID: O ID do seu Trusted Cloud projeto. Os IDs dos projetos são strings alfanuméricas, como my-project.
    • PRIV_SA: o endereço de email da conta de serviço com privilégios para a qual o token de curta duração é criado.
    • POLICY_VERSION: a versão da política a ser devolvida. Os pedidos devem especificar a versão da política mais recente, que é a versão 3 da política. Consulte o artigo Especificar uma versão da política ao obter uma política para ver detalhes.
    • POLICY: Uma representação JSON da política que quer definir. Para mais informações sobre o formato de uma política, consulte a referência de políticas.

      Por exemplo, para definir a política de permissão apresentada no passo anterior, substitua POLICY pelo seguinte, em que CALLER_ACCOUNT é a conta de utilizador que está a criar o token de curta duração:

      {
        "version": 1,
        "etag": "BwWKmjvelug=",
        "bindings": [
          {
            "role": "roles/serviceAccountAdmin",
            "members": [
              "principal://iam.googleapis.com/locations/global/workforcePools/my-pool/subject/my-user@example.com"
            ]
          },
          {
            "role": "roles/iam.serviceAccountTokenCreator",
            "members": [
              "CALLER_ACCOUNT"
            ]
          }
        ]
      }

    Método HTTP e URL:

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

    Corpo JSON do pedido:

    {
      "policy": POLICY
    }
    

    Para enviar o seu pedido, expanda uma destas opções:

    A resposta contém a política de permissão atualizada.

Gere o blob autoassinado

Gere um blob autoassinado para a conta de serviço:

REST

O método serviceAccounts.signBlob da API Service Account Credentials assina um blob com a chave privada gerida pelo sistema de uma conta de serviço.

Antes de usar qualquer um dos dados do pedido, faça as seguintes substituições:

  • PRIV_SA: o endereço de email da conta de serviço com privilégios para a qual o token de curta duração é criado.
  • BLOB_PAYLOAD: uma string de bytes com codificação base64. Por exemplo, VGhlIHF1aWNrIGJyb3duIGZveCBqdW1wZWQgb3ZlciB0aGUgbGF6eSBkb2cu.

Método HTTP e URL:

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

Corpo JSON do pedido:

{
  "payload": "BLOB_PAYLOAD"
}

Para enviar o seu pedido, expanda uma destas opções:

Se o pedido signBlob for bem-sucedido, o corpo da resposta contém um blob assinado e o ID da chave de assinatura que foi usado para assinar o blob. Pode usar o valor signedBlob como um token de portador para autenticar diretamente um pedido em nome da conta de serviço. O token é válido até a chave privada gerida pelo sistema da conta de serviço expirar. O ID desta chave é o valor do campo keyId na resposta.

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