Nesta página, explicamos como criar credenciais de curta duração para uma conta de serviço, que podem ser usadas para representar a conta de serviço. Dependendo do tipo de token criado, o token de curta duração fornece a identidade (para tokens de ID) ou permissões (para tokens de acesso) associada à conta de serviço.
Se a arquitetura do sistema exigir que você use uma série de chamadas de geração de tokens, use uma cadeia de delegação com várias contas de serviço. Na maioria dos casos, o método direto, conforme explicado nesta página, é suficiente.
Antes de começar
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the IAM and Service Account Credentials APIs:
gcloud services enable iam.googleapis.com
iamcredentials.googleapis.com Entenda as contas de serviço do IAM.
Entenda a representação de uma conta de serviço.
Entenda que tipo de token é necessário e siga as etapas apropriadas nas seções abaixo:
Criar um token de acesso de curta duração
Os tokens de acesso são aceitos para autenticação pela maioria das APIs do Google. Quando você gera um token de acesso usando a representação da conta de serviço, ele não vem com um token de atualização. Isso significa que, quando o token expirar, você precisará repetir o processo de representação para gerar um novo.
Para mais informações, consulte Tokens de acesso.
Para criar um token de acesso de curta duração, conclua estas tarefas:
Fornecer as permissões necessárias
Uma solicitação direta envolve duas identidades: o autor da chamada que solicita a credencial e a conta de serviço para a qual a credencial é criada. A configuração das permissões depende se o autor da chamada está se autenticando como uma conta de serviço ou como uma Conta do Google.
Se você quiser executar um comando REST ou a CLI gcloud nesta página em um ambiente de desenvolvimento local, o autor da chamada poderá ser representado por credenciais de usuário. Para cargas de trabalho automatizadas, como um aplicativo em execução no Compute Engine, o autor da chamada precisa ser representado por uma conta de serviço.
Conta de serviço
Quando o aplicativo de chamada usa uma conta de serviço como identidade, os principais a seguir estão envolvidos:
Conta de serviço de chamadas (
CALLER_SA
)Essa conta de serviço representa o aplicativo de chamada, que emite a solicitação para as credenciais de curta duração.
-
Conta de serviço com privilégios (
PRIV_SA
)Essa conta de serviço recebe os papéis do IAM necessários para o token de curta duração. Essa é a conta de serviço para a qual o token de curta duração é criado.
Para fornecer permissões CALLER_SA
para criar credenciais de curta duração para PRIV_SA
, você concede
CALLER_SA
o papel "Criador de token de conta de serviço" (roles/iam.serviceAccountTokenCreator
) emPRIV_SA
.
Conceda o papel necessário em PRIV_SA
:
Console
-
No Console do Google Cloud, acesse a página Contas de serviço.
- Selecione um projeto.
- Clique no endereço de e-mail da conta de serviço com privilégios,
PRIV_SA
. - Clique na guia Permissões..
- Em Principais com acesso a esta conta de serviço, clique em Conceder acesso.
-
Insira o endereço de e-mail da conta de serviço do autor da chamada,
CALLER_SA
.Por exemplo,
demo@my-project.iam.gserviceaccount.com
. -
Selecione o papel Criador do token da conta de serviço
(
roles/iam.serviceAccountTokenCreator
). - Clique em Salvar para conceder o papel à conta de serviço.
gcloud
O
comando gcloud iam service-accounts add-iam-policy-binding
concede um papel em uma conta de serviço.
Antes de usar os dados do comando abaixo, faça estas substituições:
-
PRIV_SA
: o endereço de e-mail da conta de serviço com privilégios para o qual o token é gerado. -
CALLER_SA
: o endereço de e-mail da conta de serviço que representa o aplicativo que está solicitando o token de curta duração.
Execute o este 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
Você receberá uma resposta semelhante a esta:
Updated IAM policy for serviceAccount [PRIV_SA]. { "bindings": [ { "members": [ "serviceAccount:CALLER_SA" ], "role": "roles/iam.serviceAccountTokenCreator" } ], "etag": "BwXhCB4eyjY=", "version": 1 }
REST
-
Leia a política de permissão para
PRIV_SA
:O método
serviceAccounts.getIamPolicy
recebe a política do IAM de uma conta de serviço.Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:
PROJECT_ID
: o ID do projeto do Google Cloud. Os IDs do projeto são strings alfanuméricas, comomy-project
.-
PRIV_SA
: o endereço de e-mail da conta de serviço com privilégios para o qual o token de curta duração foi criado. POLICY_VERSION
: a versão da política a ser retornada. As solicitações precisam especificar a versão mais recente da política, que é a versão 3 da política. Para saber mais detalhes, consulte Como especificar uma versão da política ao receber uma política.
Método HTTP e URL:
POST https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts/PRIV_SA:getIamPolicy
Corpo JSON da solicitação:
{ "options": { "requestedPolicyVersion": POLICY_VERSION } }
Para enviar a solicitação, expanda uma destas opções:
Você receberá uma resposta JSON semelhante a esta:
{ "version": 1, "etag": "BwWKmjvelug=", "bindings": [ { "role": "roles/serviceAccountAdmin", "members": [ "user:admin@example.com" ] } ] }
Se você não tiver concedido aos papéis à conta de serviço, a resposta conterá apenas um valor
etag
. Inclua esse valoretag
na próxima etapa. -
Modifique a política de autorização para atribuir a
CALLER_SA
o papel "Criador de token da conta de serviço" (roles/iam.serviceAccountTokenCreator
).Por exemplo, para modificar a resposta de amostra da etapa anterior, adicione o seguinte:
{ "version": 1, "etag": "BwWKmjvelug=", "bindings": [ { "role": "roles/serviceAccountAdmin", "members": [ "user:admin@example.com" ] }, { "role": "roles/iam.serviceAccountTokenCreator", "members": [ "serviceAccount:CALLER_SA" ] } ] }
-
Grave 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 os dados da solicitação abaixo, faça as substituições a seguir:
PROJECT_ID
: o ID do projeto do Google Cloud. Os IDs do projeto são strings alfanuméricas, comomy-project
.-
PRIV_SA
: o endereço de e-mail da conta de serviço com privilégios para o qual o token de curta duração foi criado. POLICY_VERSION
: a versão da política a ser retornada. As solicitações precisam especificar a versão mais recente da política, que é a versão 3 da política. Para saber mais detalhes, consulte Como especificar uma versão da política ao receber uma política.-
POLICY
: uma representação JSON da política que você quer definir. Para mais informações sobre o formato de uma política, consulte a referência da política.Por exemplo, para definir a política de permissão mostrada na etapa anterior, substitua
POLICY
pela seguinte, em queCALLER_SA
é a conta de serviço que cria o token de curta duração:{ "version": 1, "etag": "BwWKmjvelug=", "bindings": [ { "role": "roles/serviceAccountAdmin", "members": [ "user:admin@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
Corpo JSON da solicitação:
{ "policy": POLICY }
Para enviar a solicitação, expanda uma destas opções:
A resposta contém a política de permissão atualizada.
Credenciais do usuário
Quando você quiser usar a Google Cloud CLI para gerar tokens de curta duração ou gerar tokens de curta duração a partir de um ambiente de desenvolvimento local, é possível usar uma conta de usuário para gerar os tokens. Muitas vezes, é possível usar sua própria Conta do Google.
Quando você usa uma conta de usuário para gerar tokens de curta duração, as seguintes identidades são envolvidas:
Conta do Google do autor da chamada (
CALLER_ACCOUNT
)Essa conta de usuário é 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
)Essa conta de serviço recebe os papéis do IAM necessários para o token de curta duração. Essa é 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
, conceda a
CALLER_ACCOUNT
o papel de criador de token da conta de serviço
(roles/iam.serviceAccountTokenCreator
) em PRIV_SA
.
Conceda o papel necessário em PRIV_SA
:
Console
-
No Console do Google Cloud, acesse a página Contas de serviço.
- Selecione um projeto.
- Clique no endereço de e-mail da conta de serviço com privilégios,
PRIV_SA
. - Clique na guia Permissões..
- Em Principais com acesso a esta conta de serviço, clique em Conceder acesso.
-
Insira o endereço de e-mail da Conta do Google do autor da chamada,
CALLER_ACCOUNT
.Por exemplo,
username@google.com
. -
Selecione o papel Criador do token da conta de serviço
(
roles/iam.serviceAccountTokenCreator
). - Clique em Salvar para conceder o papel à conta de usuário.
gcloud
O
comando gcloud iam service-accounts add-iam-policy-binding
concede um papel em uma conta de serviço.
Antes de usar os dados do comando abaixo, faça estas substituições:
-
PRIV_SA
: o endereço de e-mail da conta de serviço com privilégios para o qual o token é gerado. -
CALLER_ACCOUNT
: o endereço de e-mail da conta de usuário que está sendo usada para solicitar o token de curta duração.
Execute o este 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
Você receberá uma resposta semelhante a esta:
Updated IAM policy for serviceAccount [PRIV_SA]. { "bindings": [ { "members": [ "user:CALLER_ACCOUNT" ], "role": "roles/iam.serviceAccountTokenCreator" } ], "etag": "BwX1ZbefjXU=", "version": 1 }
REST
-
Leia a política de permissão para
PRIV_SA
:O método
serviceAccounts.getIamPolicy
recebe a política do IAM de uma conta de serviço.Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:
PROJECT_ID
: o ID do projeto do Google Cloud. Os IDs do projeto são strings alfanuméricas, comomy-project
.-
PRIV_SA
: o endereço de e-mail da conta de serviço com privilégios para o qual o token de curta duração foi criado. POLICY_VERSION
: a versão da política a ser retornada. As solicitações precisam especificar a versão mais recente da política, que é a versão 3 da política. Para saber mais detalhes, consulte Como especificar uma versão da política ao receber uma política.
Método HTTP e URL:
POST https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts/PRIV_SA:getIamPolicy
Corpo JSON da solicitação:
{ "options": { "requestedPolicyVersion": POLICY_VERSION } }
Para enviar a solicitação, expanda uma destas opções:
Você receberá uma resposta JSON semelhante a esta:
{ "version": 1, "etag": "BwWKmjvelug=", "bindings": [ { "role": "roles/serviceAccountAdmin", "members": [ "user:admin@example.com" ] } ] }
Se você não tiver concedido aos papéis à conta de serviço, a resposta conterá apenas um valor
etag
. Inclua esse valoretag
na próxima etapa. -
Em seguida, modifique a política de autorização para atribuir a
CALLER_ACCOUNT
o papel "Criador de token da conta de serviço" (roles/iam.serviceAccountTokenCreator
).Por exemplo, para modificar a resposta de amostra da etapa anterior, adicione o seguinte:
{ "version": 1, "etag": "BwWKmjvelug=", "bindings": [ { "role": "roles/serviceAccountAdmin", "members": [ "user:admin@example.com" ] }, { "role": "roles/iam.serviceAccountTokenCreator", "members": [ "user:CALLER_ACCOUNT" ] } ] }
-
Grave 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 os dados da solicitação abaixo, faça as substituições a seguir:
PROJECT_ID
: o ID do projeto do Google Cloud. Os IDs do projeto são strings alfanuméricas, comomy-project
.-
PRIV_SA
: o endereço de e-mail da conta de serviço com privilégios para o qual o token de curta duração foi criado. POLICY_VERSION
: a versão da política a ser retornada. As solicitações precisam especificar a versão mais recente da política, que é a versão 3 da política. Para saber mais detalhes, consulte Como especificar uma versão da política ao receber uma política.-
POLICY
: uma representação JSON da política que você quer definir. Para mais informações sobre o formato de uma política, consulte a referência da política.Por exemplo, para definir a política de permissão mostrada na etapa anterior, substitua
POLICY
pela seguinte, em queCALLER_ACCOUNT
é a conta de usuário que cria o token de curta duração:{ "version": 1, "etag": "BwWKmjvelug=", "bindings": [ { "role": "roles/serviceAccountAdmin", "members": [ "user:admin@example.com" ] }, { "role": "roles/iam.serviceAccountTokenCreator", "members": [ "user:CALLER_ACCOUNT" ] } ] }
Método HTTP e URL:
POST https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts/PRIV_SA
Corpo JSON da solicitação:
{ "policy": POLICY }
Para enviar a solicitação, expanda uma destas opções:
A resposta contém a política de permissão atualizada.
Gerar o token de acesso
É possível gerar um token de acesso OAuth 2.0 usando a CLI gcloud, a API REST ou as bibliotecas de cliente do Cloud e de APIs do Google.
Se você usa a API REST e o sistema está configurado para permitir ciclos de vida estendidos do token, é possível criar um token com vida útil maior que o padrão. A Google Cloud CLi não é compatível com a configuração de um ciclo de vida para o token.
As amostras abaixo foram projetadas para serem usadas em um ambiente de desenvolvimento local. O autor da chamada precisa ser representado por uma conta de usuário, não uma conta de serviço.
Para gerar um token de acesso do OAuth 2.0 para uma conta de serviço, faça o seguinte:
gcloud
Faça login na Google Cloud CLI como a Conta do Google do autor da chamada.
gcloud auth login CALLER_ACCOUNT
Gere um token para a conta de serviço.
O comando
gcloud auth print-access-token
gera um token de acesso do OAuth 2.0 para uma conta de serviço.Antes de usar os dados do comando abaixo, faça estas substituições:
-
PRIV_SA
: o endereço de e-mail da conta de serviço com privilégios para o qual o token de curta duração foi criado.
Execute o este 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
Você receberá uma resposta semelhante a esta:
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
O método serviceAccounts.generateAccessToken
da API Service Account Credentials
gera
um token de acesso do OAuth 2.0 para uma conta de serviço.
Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:
-
PRIV_SA
: o endereço de e-mail da conta de serviço com privilégios para o qual o token de curta duração foi criado. -
LIFETIME
: o tempo até o token de acesso expirar, em segundos. Por exemplo,300s
.Por padrão, o ciclo de vida máximo do token é de uma hora (3,600 segundos). Para aumentar o ciclo de vida máximo desses tokens 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 da solicitação:
{ "scope": [ "https://www.googleapis.com/auth/cloud-platform" ], "lifetime": "LIFETIME" }
Para enviar a solicitação, expanda uma destas opções:
Se a solicitação generateAccessToken
for bem-sucedida, o corpo da resposta
conterá um token de acesso do OAuth 2.0 e um prazo de validade. O accessToken
poderá
ser usado para autenticar uma solicitação em nome da conta de serviço até que
o expireTime
seja atingido.
{ "accessToken": "eyJ0eXAi...NiJ9", "expireTime": "2020-04-07T15:01:23.045123456Z" }
Go
Antes de usar esse exemplo de código, configure o Application Default Credentials para a Conta do Google do autor da chamada à qual você concedeu o papel necessário para representar a conta de serviço com privilégios.
Java
Antes de usar esse exemplo de código, configure o Application Default Credentials para a Conta do Google do autor da chamada à qual você concedeu o papel necessário para representar a conta de serviço com privilégios.
Node.js
Antes de usar esse exemplo de código, configure o Application Default Credentials para a Conta do Google do autor da chamada à qual você concedeu o papel necessário para representar a conta de serviço com privilégios.
Python
Antes de usar esse exemplo de código, configure o Application Default Credentials para a Conta do Google do autor da chamada à qual você concedeu o papel necessário para representar a conta de serviço com privilégios.
Criar um token de ID do OpenID Connect (OIDC)
Os tokens de ID seguem a especificação OpenID Connect (OIDC). Os tokens de ID são aceitos por um número limitado de serviços e aplicativos.
Para mais informações, consulte Tokens de ID e Autenticação para aplicativos hospedados no Cloud Run ou Cloud Functions.
Para criar um token de ID, conclua estas tarefas:
Conceder as permissões necessárias ao autor da chamada.
Use o papel Criador de token de identidade do OpenID Connect da conta de serviço (
roles/iam.serviceAccountOpenIdTokenCreator
) para criar um token de ID. Esse papel é diferente do usado para outros tipos de token.
Fornecer as permissões necessárias
Uma solicitação direta envolve duas identidades: o autor da chamada que solicita a credencial e a conta de serviço para a qual a credencial é criada. A configuração das permissões depende se o autor da chamada está se autenticando como uma conta de serviço ou como uma Conta do Google.
Se você quiser executar um comando REST ou a CLI gcloud nesta página em um ambiente de desenvolvimento local, o autor da chamada poderá ser representado por credenciais de usuário. Para cargas de trabalho automatizadas, como um aplicativo em execução no Compute Engine, o autor da chamada precisa ser representado por uma conta de serviço.
Conta de serviço
Quando o aplicativo de chamada usa uma conta de serviço como identidade, os principais a seguir estão envolvidos:
Conta de serviço de chamadas (
CALLER_SA
)Essa conta de serviço representa o aplicativo de chamada, que emite a solicitação para as credenciais de curta duração.
-
Conta de serviço com privilégios (
PRIV_SA
)Essa conta de serviço recebe os papéis do IAM necessários para o token de curta duração. Essa é a conta de serviço para a qual o token de curta duração é criado.
Para conceder permissões a CALLER_SA
para criar credenciais de curta duração para PRIV_SA
, conceda a CALLER_SA
o papel de Criador de token de identidade do OpenID Connect da conta de serviço (roles/iam.serviceAccountOpenIdTokenCreator
) em PRIV_SA
Conceda o papel necessário em PRIV_SA
:
Console
-
No Console do Google Cloud, acesse a página Contas de serviço.
- Selecione um projeto.
- Clique no endereço de e-mail da conta de serviço com privilégios,
PRIV_SA
. - Clique na guia Permissões..
- Em Principais com acesso a esta conta de serviço, clique em Conceder acesso.
-
Insira o endereço de e-mail da conta de serviço do autor da chamada,
CALLER_SA
.Por exemplo,
demo@my-project.iam.gserviceaccount.com
. -
Selecione o papel de Criador do token de identidade do OpenID Connect da conta de serviço
(
roles/iam.serviceAccountOpenIdTokenCreator
). - Clique em Salvar para conceder o papel à conta de serviço.
gcloud
O
comando gcloud iam service-accounts add-iam-policy-binding
concede um papel em uma conta de serviço.
Antes de usar os dados do comando abaixo, faça estas substituições:
-
PRIV_SA
: o endereço de e-mail da conta de serviço com privilégios para o qual o token é gerado. -
CALLER_SA
: o endereço de e-mail da conta de serviço que representa o aplicativo que está solicitando o token de curta duração.
Execute o este 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
Você receberá uma resposta semelhante a esta:
Updated IAM policy for serviceAccount [PRIV_SA]. { "bindings": [ { "members": [ "serviceAccount:CALLER_SA" ], "role": "roles/iam.serviceAccountOpenIdTokenCreator" } ], "etag": "BwXhCB4eyjY=", "version": 1 }
REST
-
Leia a política de permissão para
PRIV_SA
:O método
serviceAccounts.getIamPolicy
recebe a política do IAM de uma conta de serviço.Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:
PROJECT_ID
: o ID do projeto do Google Cloud. Os IDs do projeto são strings alfanuméricas, comomy-project
.-
PRIV_SA
: o endereço de e-mail da conta de serviço com privilégios para o qual o token de curta duração foi criado. POLICY_VERSION
: a versão da política a ser retornada. As solicitações precisam especificar a versão mais recente da política, que é a versão 3 da política. Para saber mais detalhes, consulte Como especificar uma versão da política ao receber uma política.
Método HTTP e URL:
POST https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts/PRIV_SA:getIamPolicy
Corpo JSON da solicitação:
{ "options": { "requestedPolicyVersion": POLICY_VERSION } }
Para enviar a solicitação, expanda uma destas opções:
Você receberá uma resposta JSON semelhante a esta:
{ "version": 1, "etag": "BwWKmjvelug=", "bindings": [ { "role": "roles/serviceAccountAdmin", "members": [ "user:admin@example.com" ] } ] }
Se você não tiver concedido aos papéis à conta de serviço, a resposta conterá apenas um valor
etag
. Inclua esse valoretag
na próxima etapa. -
Modifique a política de permissão para conceder a
CALLER_SA
o papel de Criador de token de identidade do OpenID Connect da conta de serviço (roles/iam.serviceAccountOpenIdTokenCreator
).Por exemplo, para modificar a resposta de amostra da etapa anterior, adicione o seguinte:
{ "version": 1, "etag": "BwWKmjvelug=", "bindings": [ { "role": "roles/serviceAccountAdmin", "members": [ "user:admin@example.com" ] }, { "role": "roles/iam.serviceAccountOpenIdTokenCreator", "members": [ "serviceAccount:CALLER_SA" ] } ] }
-
Grave 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 os dados da solicitação abaixo, faça as substituições a seguir:
PROJECT_ID
: o ID do projeto do Google Cloud. Os IDs do projeto são strings alfanuméricas, comomy-project
.-
PRIV_SA
: o endereço de e-mail da conta de serviço com privilégios para o qual o token de curta duração foi criado. POLICY_VERSION
: a versão da política a ser retornada. As solicitações precisam especificar a versão mais recente da política, que é a versão 3 da política. Para saber mais detalhes, consulte Como especificar uma versão da política ao receber uma política.-
POLICY
: uma representação JSON da política que você quer definir. Para mais informações sobre o formato de uma política, consulte a referência da política.Por exemplo, para definir a política de permissão mostrada na etapa anterior, substitua
POLICY
pela seguinte, em queCALLER_SA
é a conta de serviço que cria o token de curta duração:{ "version": 1, "etag": "BwWKmjvelug=", "bindings": [ { "role": "roles/serviceAccountAdmin", "members": [ "user:admin@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
Corpo JSON da solicitação:
{ "policy": POLICY }
Para enviar a solicitação, expanda uma destas opções:
A resposta contém a política de permissão atualizada.
Credenciais do usuário
Quando você quiser usar a Google Cloud CLI para gerar tokens de curta duração ou gerar tokens de curta duração a partir de um ambiente de desenvolvimento local, é possível usar uma conta de usuário para gerar os tokens. Muitas vezes, é possível usar sua própria Conta do Google.
Quando você usa uma conta de usuário para gerar tokens de curta duração, as seguintes identidades são envolvidas:
Conta do Google do autor da chamada (
CALLER_ACCOUNT
)Essa conta de usuário é 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
)Essa conta de serviço recebe os papéis do IAM necessários para o token de curta duração. Essa é 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
, conceda a
CALLER_ACCOUNT
o papel de Criador de token de identidade do OpenID Connect da conta de serviço
(roles/iam.serviceAccountOpenIdTokenCreator
) em PRIV_SA
.
Conceda o papel necessário em PRIV_SA
:
Console
-
No Console do Google Cloud, acesse a página Contas de serviço.
- Selecione um projeto.
- Clique no endereço de e-mail da conta de serviço com privilégios,
PRIV_SA
. - Clique na guia Permissões..
- Em Principais com acesso a esta conta de serviço, clique em Conceder acesso.
-
Insira o endereço de e-mail da Conta do Google do autor da chamada,
CALLER_ACCOUNT
.Por exemplo,
username@google.com
. -
Selecione o papel de Criador do token de identidade do OpenID Connect da conta de serviço
(
roles/iam.serviceAccountOpenIdTokenCreator
). - Clique em Salvar para conceder o papel à conta de usuário.
gcloud
O
comando gcloud iam service-accounts add-iam-policy-binding
concede um papel em uma conta de serviço.
Antes de usar os dados do comando abaixo, faça estas substituições:
-
PRIV_SA
: o endereço de e-mail da conta de serviço com privilégios para o qual o token é gerado. -
CALLER_ACCOUNT
: o endereço de e-mail da conta de usuário que está sendo usada para solicitar o token de curta duração.
Execute o este 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
Você receberá uma resposta semelhante a esta:
Updated IAM policy for serviceAccount [PRIV_SA]. { "bindings": [ { "members": [ "user:CALLER_ACCOUNT" ], "role": "roles/iam.serviceAccountOpenIdTokenCreator" } ], "etag": "BwX1ZbefjXU=", "version": 1 }
REST
-
Leia a política de permissão para
PRIV_SA
:O método
serviceAccounts.getIamPolicy
recebe a política do IAM de uma conta de serviço.Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:
PROJECT_ID
: o ID do projeto do Google Cloud. Os IDs do projeto são strings alfanuméricas, comomy-project
.-
PRIV_SA
: o endereço de e-mail da conta de serviço com privilégios para o qual o token de curta duração foi criado. POLICY_VERSION
: a versão da política a ser retornada. As solicitações precisam especificar a versão mais recente da política, que é a versão 3 da política. Para saber mais detalhes, consulte Como especificar uma versão da política ao receber uma política.
Método HTTP e URL:
POST https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts/PRIV_SA:getIamPolicy
Corpo JSON da solicitação:
{ "options": { "requestedPolicyVersion": POLICY_VERSION } }
Para enviar a solicitação, expanda uma destas opções:
Você receberá uma resposta JSON semelhante a esta:
{ "version": 1, "etag": "BwWKmjvelug=", "bindings": [ { "role": "roles/serviceAccountAdmin", "members": [ "user:admin@example.com" ] } ] }
Se você não tiver concedido aos papéis à conta de serviço, a resposta conterá apenas um valor
etag
. Inclua esse valoretag
na próxima etapa. -
Modifique a política de permissão para conceder a
CALLER_ACCOUNT
o papel de Criador de token de identidade do OpenID Connect da conta de serviço (roles/iam.serviceAccountOpenIdTokenCreator
).Por exemplo, para modificar a resposta de amostra da etapa anterior, adicione o seguinte:
{ "version": 1, "etag": "BwWKmjvelug=", "bindings": [ { "role": "roles/serviceAccountAdmin", "members": [ "user:admin@example.com" ] }, { "role": "roles/iam.serviceAccountOpenIdTokenCreator", "members": [ "user:CALLER_ACCOUNT" ] } ] }
-
Grave 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 os dados da solicitação abaixo, faça as substituições a seguir:
PROJECT_ID
: o ID do projeto do Google Cloud. Os IDs do projeto são strings alfanuméricas, comomy-project
.-
PRIV_SA
: o endereço de e-mail da conta de serviço com privilégios para o qual o token de curta duração foi criado. POLICY_VERSION
: a versão da política a ser retornada. As solicitações precisam especificar a versão mais recente da política, que é a versão 3 da política. Para saber mais detalhes, consulte Como especificar uma versão da política ao receber uma política.-
POLICY
: uma representação JSON da política que você quer definir. Para mais informações sobre o formato de uma política, consulte a referência da política.Por exemplo, para definir a política de permissão mostrada na etapa anterior, substitua
POLICY
pela seguinte, em queCALLER_ACCOUNT
é a conta de usuário que cria o token de curta duração:{ "version": 1, "etag": "BwWKmjvelug=", "bindings": [ { "role": "roles/serviceAccountAdmin", "members": [ "user:admin@example.com" ] }, { "role": "roles/iam.serviceAccountOpenIdTokenCreator", "members": [ "user:CALLER_ACCOUNT" ] } ] }
Método HTTP e URL:
POST https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts/PRIV_SA
Corpo JSON da solicitação:
{ "policy": POLICY }
Para enviar a solicitação, expanda uma destas opções:
A resposta contém a política de permissão atualizada.
Gerar o token de ID
É possível gerar um token de ID do OpenID Connect (OIDC) usando a CLI gcloud, a API REST ou as bibliotecas de cliente do Google Cloud e da API do Google.
As amostras abaixo foram projetadas para serem usadas em um ambiente de desenvolvimento local. O autor da chamada precisa ser representado por uma conta de usuário, não uma conta de serviço.
Os tokens de ID do OIDC são válidos por 1 hora (3.600 segundos).
Gere um token de ID OIDC assinado pelo Google para uma conta de serviço:
gcloud
Faça login na Google Cloud CLI como a Conta do Google do autor da chamada.
gcloud auth login CALLER_ACCOUNT
Gere um token para a conta de serviço.
O comando
gcloud auth print-identity-token
gera um token de ID do OIDC para uma conta de serviço.Antes de usar os dados do comando abaixo, faça estas substituições:
-
PRIV_SA
: o endereço de e-mail da conta de serviço com privilégios para o qual o token de curta duração foi criado. -
AUDIENCE_NAME
: o público-alvo do token, geralmente o URL do aplicativo ou serviço que o token será usado para acessar.
Execute o este 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"
Você receberá uma resposta semelhante a esta:
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
O método
serviceAccounts.generateIdToken
da API Service Account Credentials gera um token de ID do OIDC para uma conta de serviço.
Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:
-
PRIV_SA
: o endereço de e-mail da conta de serviço com privilégios para o qual o token de curta duração foi criado. -
AUDIENCE_NAME
: o público-alvo do token, geralmente o URL do aplicativo ou serviço que o token será usado para acessar.
Método HTTP e URL:
POST https://iamcredentials.googleapis.com/v1/projects/-/serviceAccounts/PRIV_SA:generateIdToken
Corpo JSON da solicitação:
{ "audience": "AUDIENCE_NAME", "includeEmail": "true" }
Para enviar a solicitação, expanda uma destas opções:
Se a solicitação generateId
for bem-sucedida, o corpo da resposta
conterá um token de ID válido por 1 hora: O token
pode ser usado para
autenticar uma solicitação em nome da conta de serviço:
{ "token": "eyJ0eXAi...NiJ9" }
Criar um JSON Web Token (JWT) autoassinado
Os JSON Web Tokens (JWTs) autoassinados são úteis em várias situações:
- Autenticação em uma API implantada com o gateway de API.
- Autenticar uma chamada para uma API Google, conforme descrito no Guia de autenticação do Google.
- Comunicação segura entre seus próprios aplicativos. Nesse cenário, um aplicativo pode assinar um token a ser verificado por outro aplicativo para fins de autenticação.
- Tratar uma conta de serviço como provedor de identidade assinando um JWT que contenha declarações arbitrárias sobre um usuário, uma conta ou um dispositivo.
Para criar um JWT, conclua estas tarefas:
Fornecer as permissões necessárias
Uma solicitação direta envolve duas identidades: o autor da chamada que solicita a credencial e a conta de serviço para a qual a credencial é criada. A configuração das permissões depende se o autor da chamada está se autenticando como uma conta de serviço ou como uma Conta do Google.
Se você quiser executar um comando REST ou a CLI gcloud nesta página em um ambiente de desenvolvimento local, o autor da chamada poderá ser representado por credenciais de usuário. Para cargas de trabalho automatizadas, como um aplicativo em execução no Compute Engine, o autor da chamada precisa ser representado por uma conta de serviço.
Conta de serviço
Quando o aplicativo de chamada usa uma conta de serviço como identidade, os principais a seguir estão envolvidos:
Conta de serviço de chamadas (
CALLER_SA
)Essa conta de serviço representa o aplicativo de chamada, que emite a solicitação para as credenciais de curta duração.
-
Conta de serviço com privilégios (
PRIV_SA
)Essa conta de serviço recebe os papéis do IAM necessários para o token de curta duração. Essa é a conta de serviço para a qual o token de curta duração é criado.
Para fornecer permissões CALLER_SA
para criar credenciais de curta duração para PRIV_SA
, você concede
CALLER_SA
o papel "Criador de token de conta de serviço" (roles/iam.serviceAccountTokenCreator
) emPRIV_SA
.
Conceda o papel necessário em PRIV_SA
:
Console
-
No Console do Google Cloud, acesse a página Contas de serviço.
- Selecione um projeto.
- Clique no endereço de e-mail da conta de serviço com privilégios,
PRIV_SA
. - Clique na guia Permissões..
- Em Principais com acesso a esta conta de serviço, clique em Conceder acesso.
-
Insira o endereço de e-mail da conta de serviço do autor da chamada,
CALLER_SA
.Por exemplo,
demo@my-project.iam.gserviceaccount.com
. -
Selecione o papel Criador do token da conta de serviço
(
roles/iam.serviceAccountTokenCreator
). - Clique em Salvar para conceder o papel à conta de serviço.
gcloud
O
comando gcloud iam service-accounts add-iam-policy-binding
concede um papel em uma conta de serviço.
Antes de usar os dados do comando abaixo, faça estas substituições:
-
PRIV_SA
: o endereço de e-mail da conta de serviço com privilégios para o qual o token é gerado. -
CALLER_SA
: o endereço de e-mail da conta de serviço que representa o aplicativo que está solicitando o token de curta duração.
Execute o este 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
Você receberá uma resposta semelhante a esta:
Updated IAM policy for serviceAccount [PRIV_SA]. { "bindings": [ { "members": [ "serviceAccount:CALLER_SA" ], "role": "roles/iam.serviceAccountTokenCreator" } ], "etag": "BwXhCB4eyjY=", "version": 1 }
REST
-
Leia a política de permissão para
PRIV_SA
:O método
serviceAccounts.getIamPolicy
recebe a política do IAM de uma conta de serviço.Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:
PROJECT_ID
: o ID do projeto do Google Cloud. Os IDs do projeto são strings alfanuméricas, comomy-project
.-
PRIV_SA
: o endereço de e-mail da conta de serviço com privilégios para o qual o token de curta duração foi criado. POLICY_VERSION
: a versão da política a ser retornada. As solicitações precisam especificar a versão mais recente da política, que é a versão 3 da política. Para saber mais detalhes, consulte Como especificar uma versão da política ao receber uma política.
Método HTTP e URL:
POST https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts/PRIV_SA:getIamPolicy
Corpo JSON da solicitação:
{ "options": { "requestedPolicyVersion": POLICY_VERSION } }
Para enviar a solicitação, expanda uma destas opções:
Você receberá uma resposta JSON semelhante a esta:
{ "version": 1, "etag": "BwWKmjvelug=", "bindings": [ { "role": "roles/serviceAccountAdmin", "members": [ "user:admin@example.com" ] } ] }
Se você não tiver concedido aos papéis à conta de serviço, a resposta conterá apenas um valor
etag
. Inclua esse valoretag
na próxima etapa. -
Modifique a política de autorização para atribuir a
CALLER_SA
o papel "Criador de token da conta de serviço" (roles/iam.serviceAccountTokenCreator
).Por exemplo, para modificar a resposta de amostra da etapa anterior, adicione o seguinte:
{ "version": 1, "etag": "BwWKmjvelug=", "bindings": [ { "role": "roles/serviceAccountAdmin", "members": [ "user:admin@example.com" ] }, { "role": "roles/iam.serviceAccountTokenCreator", "members": [ "serviceAccount:CALLER_SA" ] } ] }
-
Grave 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 os dados da solicitação abaixo, faça as substituições a seguir:
PROJECT_ID
: o ID do projeto do Google Cloud. Os IDs do projeto são strings alfanuméricas, comomy-project
.-
PRIV_SA
: o endereço de e-mail da conta de serviço com privilégios para o qual o token de curta duração foi criado. POLICY_VERSION
: a versão da política a ser retornada. As solicitações precisam especificar a versão mais recente da política, que é a versão 3 da política. Para saber mais detalhes, consulte Como especificar uma versão da política ao receber uma política.-
POLICY
: uma representação JSON da política que você quer definir. Para mais informações sobre o formato de uma política, consulte a referência da política.Por exemplo, para definir a política de permissão mostrada na etapa anterior, substitua
POLICY
pela seguinte, em queCALLER_SA
é a conta de serviço que cria o token de curta duração:{ "version": 1, "etag": "BwWKmjvelug=", "bindings": [ { "role": "roles/serviceAccountAdmin", "members": [ "user:admin@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
Corpo JSON da solicitação:
{ "policy": POLICY }
Para enviar a solicitação, expanda uma destas opções:
A resposta contém a política de permissão atualizada.
Credenciais do usuário
Quando você quiser usar a Google Cloud CLI para gerar tokens de curta duração ou gerar tokens de curta duração a partir de um ambiente de desenvolvimento local, é possível usar uma conta de usuário para gerar os tokens. Muitas vezes, é possível usar sua própria Conta do Google.
Quando você usa uma conta de usuário para gerar tokens de curta duração, as seguintes identidades são envolvidas:
Conta do Google do autor da chamada (
CALLER_ACCOUNT
)Essa conta de usuário é 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
)Essa conta de serviço recebe os papéis do IAM necessários para o token de curta duração. Essa é 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
, conceda a
CALLER_ACCOUNT
o papel de criador de token da conta de serviço
(roles/iam.serviceAccountTokenCreator
) em PRIV_SA
.
Conceda o papel necessário em PRIV_SA
:
Console
-
No Console do Google Cloud, acesse a página Contas de serviço.
- Selecione um projeto.
- Clique no endereço de e-mail da conta de serviço com privilégios,
PRIV_SA
. - Clique na guia Permissões..
- Em Principais com acesso a esta conta de serviço, clique em Conceder acesso.
-
Insira o endereço de e-mail da Conta do Google do autor da chamada,
CALLER_ACCOUNT
.Por exemplo,
username@google.com
. -
Selecione o papel Criador do token da conta de serviço
(
roles/iam.serviceAccountTokenCreator
). - Clique em Salvar para conceder o papel à conta de usuário.
gcloud
O
comando gcloud iam service-accounts add-iam-policy-binding
concede um papel em uma conta de serviço.
Antes de usar os dados do comando abaixo, faça estas substituições:
-
PRIV_SA
: o endereço de e-mail da conta de serviço com privilégios para o qual o token é gerado. -
CALLER_ACCOUNT
: o endereço de e-mail da conta de usuário que está sendo usada para solicitar o token de curta duração.
Execute o este 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
Você receberá uma resposta semelhante a esta:
Updated IAM policy for serviceAccount [PRIV_SA]. { "bindings": [ { "members": [ "user:CALLER_ACCOUNT" ], "role": "roles/iam.serviceAccountTokenCreator" } ], "etag": "BwX1ZbefjXU=", "version": 1 }
REST
-
Leia a política de permissão para
PRIV_SA
:O método
serviceAccounts.getIamPolicy
recebe a política do IAM de uma conta de serviço.Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:
PROJECT_ID
: o ID do projeto do Google Cloud. Os IDs do projeto são strings alfanuméricas, comomy-project
.-
PRIV_SA
: o endereço de e-mail da conta de serviço com privilégios para o qual o token de curta duração foi criado. POLICY_VERSION
: a versão da política a ser retornada. As solicitações precisam especificar a versão mais recente da política, que é a versão 3 da política. Para saber mais detalhes, consulte Como especificar uma versão da política ao receber uma política.
Método HTTP e URL:
POST https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts/PRIV_SA:getIamPolicy
Corpo JSON da solicitação:
{ "options": { "requestedPolicyVersion": POLICY_VERSION } }
Para enviar a solicitação, expanda uma destas opções:
Você receberá uma resposta JSON semelhante a esta:
{ "version": 1, "etag": "BwWKmjvelug=", "bindings": [ { "role": "roles/serviceAccountAdmin", "members": [ "user:admin@example.com" ] } ] }
Se você não tiver concedido aos papéis à conta de serviço, a resposta conterá apenas um valor
etag
. Inclua esse valoretag
na próxima etapa. -
Em seguida, modifique a política de autorização para atribuir a
CALLER_ACCOUNT
o papel "Criador de token da conta de serviço" (roles/iam.serviceAccountTokenCreator
).Por exemplo, para modificar a resposta de amostra da etapa anterior, adicione o seguinte:
{ "version": 1, "etag": "BwWKmjvelug=", "bindings": [ { "role": "roles/serviceAccountAdmin", "members": [ "user:admin@example.com" ] }, { "role": "roles/iam.serviceAccountTokenCreator", "members": [ "user:CALLER_ACCOUNT" ] } ] }
-
Grave 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 os dados da solicitação abaixo, faça as substituições a seguir:
PROJECT_ID
: o ID do projeto do Google Cloud. Os IDs do projeto são strings alfanuméricas, comomy-project
.-
PRIV_SA
: o endereço de e-mail da conta de serviço com privilégios para o qual o token de curta duração foi criado. POLICY_VERSION
: a versão da política a ser retornada. As solicitações precisam especificar a versão mais recente da política, que é a versão 3 da política. Para saber mais detalhes, consulte Como especificar uma versão da política ao receber uma política.-
POLICY
: uma representação JSON da política que você quer definir. Para mais informações sobre o formato de uma política, consulte a referência da política.Por exemplo, para definir a política de permissão mostrada na etapa anterior, substitua
POLICY
pela seguinte, em queCALLER_ACCOUNT
é a conta de usuário que cria o token de curta duração:{ "version": 1, "etag": "BwWKmjvelug=", "bindings": [ { "role": "roles/serviceAccountAdmin", "members": [ "user:admin@example.com" ] }, { "role": "roles/iam.serviceAccountTokenCreator", "members": [ "user:CALLER_ACCOUNT" ] } ] }
Método HTTP e URL:
POST https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts/PRIV_SA
Corpo JSON da solicitação:
{ "policy": POLICY }
Para enviar a solicitação, expanda uma destas opções:
A resposta contém a política de permissão atualizada.
Gerar o JWT
Gere um JWT autoassinado:
REST
O método
serviceAccounts.signJwt
da API Service Account Credentials assina um JWT usando uma chave privada da conta de serviço gerenciada pelo sistema.
Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:
-
PRIV_SA
: o endereço de e-mail da conta de serviço com privilégios para o qual o token de curta duração foi criado. -
JWT_PAYLOAD
: o payload de JWT a ser assinado, que é um objeto JSON contendo um conjunto de declarações do JWT. Inclua as declarações necessárias para o caso de uso pretendido e para atender aos requisitos de validação do serviço que você está chamando. Se você estiver chamando uma API do Google, consulte o Guia de autenticação do Google para conhecer os requisitos da declaração.A declaração
exp
(prazo de validade) precisa ser definida como, no máximo, 12 horas no futuro. Se você estiver chamando uma API do Google, a declaraçãoexp
precisará ser definida como, no máximo, uma hora.O payload de exemplo a seguir contém declarações para chamar uma API do Google, em que
EXP
é um carimbo de data/hora inteiro que representa o prazo 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 da solicitação:
{ "payload": "JWT_PAYLOAD" }
Para enviar a solicitação, expanda uma destas opções:
Se a solicitação signJwt
for bem-sucedida, o corpo da resposta conterá um blob assinado e
o ID da chave de assinatura que foi usada para assiná-lo. Use o valor signedJwt
como um token do portador para autenticar diretamente uma solicitação em nome da conta de serviço. O token será
válido até o prazo de validade especificado na solicitação:
{ "keyId": "42ba1e...fc0a", "signedJwt": "eyJ0eXAi...NiJ9" }
Criar um objeto binário autoassinado (blob)
Objetos binários autoassinados, ou blobs, são usados para transmitir dados binários de maneira que o criador 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 mais informações sobre assinaturas, consulte a documentação do Cloud Storage.
Para criar um objeto binário autoassinado, siga estas etapas:
Fornecer as permissões necessárias
Uma solicitação direta envolve duas identidades: o autor da chamada que solicita a credencial e a conta de serviço para a qual a credencial é criada. A configuração das permissões depende se o autor da chamada está se autenticando como uma conta de serviço ou como uma Conta do Google.
Se você quiser executar um comando REST ou a CLI gcloud nesta página em um ambiente de desenvolvimento local, o autor da chamada poderá ser representado por credenciais de usuário. Para cargas de trabalho automatizadas, como um aplicativo em execução no Compute Engine, o autor da chamada precisa ser representado por uma conta de serviço.
Conta de serviço
Quando o aplicativo de chamada usa uma conta de serviço como identidade, os principais a seguir estão envolvidos:
Conta de serviço de chamadas (
CALLER_SA
)Essa conta de serviço representa o aplicativo de chamada, que emite a solicitação para as credenciais de curta duração.
-
Conta de serviço com privilégios (
PRIV_SA
)Essa conta de serviço recebe os papéis do IAM necessários para o token de curta duração. Essa é a conta de serviço para a qual o token de curta duração é criado.
Para fornecer permissões CALLER_SA
para criar credenciais de curta duração para PRIV_SA
, você concede
CALLER_SA
o papel "Criador de token de conta de serviço" (roles/iam.serviceAccountTokenCreator
) emPRIV_SA
.
Conceda o papel necessário em PRIV_SA
:
Console
-
No Console do Google Cloud, acesse a página Contas de serviço.
- Selecione um projeto.
- Clique no endereço de e-mail da conta de serviço com privilégios,
PRIV_SA
. - Clique na guia Permissões..
- Em Principais com acesso a esta conta de serviço, clique em Conceder acesso.
-
Insira o endereço de e-mail da conta de serviço do autor da chamada,
CALLER_SA
.Por exemplo,
demo@my-project.iam.gserviceaccount.com
. -
Selecione o papel Criador do token da conta de serviço
(
roles/iam.serviceAccountTokenCreator
). - Clique em Salvar para conceder o papel à conta de serviço.
gcloud
O
comando gcloud iam service-accounts add-iam-policy-binding
concede um papel em uma conta de serviço.
Antes de usar os dados do comando abaixo, faça estas substituições:
-
PRIV_SA
: o endereço de e-mail da conta de serviço com privilégios para o qual o token é gerado. -
CALLER_SA
: o endereço de e-mail da conta de serviço que representa o aplicativo que está solicitando o token de curta duração.
Execute o este 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
Você receberá uma resposta semelhante a esta:
Updated IAM policy for serviceAccount [PRIV_SA]. { "bindings": [ { "members": [ "serviceAccount:CALLER_SA" ], "role": "roles/iam.serviceAccountTokenCreator" } ], "etag": "BwXhCB4eyjY=", "version": 1 }
REST
-
Leia a política de permissão para
PRIV_SA
:O método
serviceAccounts.getIamPolicy
recebe a política do IAM de uma conta de serviço.Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:
PROJECT_ID
: o ID do projeto do Google Cloud. Os IDs do projeto são strings alfanuméricas, comomy-project
.-
PRIV_SA
: o endereço de e-mail da conta de serviço com privilégios para o qual o token de curta duração foi criado. POLICY_VERSION
: a versão da política a ser retornada. As solicitações precisam especificar a versão mais recente da política, que é a versão 3 da política. Para saber mais detalhes, consulte Como especificar uma versão da política ao receber uma política.
Método HTTP e URL:
POST https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts/PRIV_SA:getIamPolicy
Corpo JSON da solicitação:
{ "options": { "requestedPolicyVersion": POLICY_VERSION } }
Para enviar a solicitação, expanda uma destas opções:
Você receberá uma resposta JSON semelhante a esta:
{ "version": 1, "etag": "BwWKmjvelug=", "bindings": [ { "role": "roles/serviceAccountAdmin", "members": [ "user:admin@example.com" ] } ] }
Se você não tiver concedido aos papéis à conta de serviço, a resposta conterá apenas um valor
etag
. Inclua esse valoretag
na próxima etapa. -
Modifique a política de autorização para atribuir a
CALLER_SA
o papel "Criador de token da conta de serviço" (roles/iam.serviceAccountTokenCreator
).Por exemplo, para modificar a resposta de amostra da etapa anterior, adicione o seguinte:
{ "version": 1, "etag": "BwWKmjvelug=", "bindings": [ { "role": "roles/serviceAccountAdmin", "members": [ "user:admin@example.com" ] }, { "role": "roles/iam.serviceAccountTokenCreator", "members": [ "serviceAccount:CALLER_SA" ] } ] }
-
Grave 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 os dados da solicitação abaixo, faça as substituições a seguir:
PROJECT_ID
: o ID do projeto do Google Cloud. Os IDs do projeto são strings alfanuméricas, comomy-project
.-
PRIV_SA
: o endereço de e-mail da conta de serviço com privilégios para o qual o token de curta duração foi criado. POLICY_VERSION
: a versão da política a ser retornada. As solicitações precisam especificar a versão mais recente da política, que é a versão 3 da política. Para saber mais detalhes, consulte Como especificar uma versão da política ao receber uma política.-
POLICY
: uma representação JSON da política que você quer definir. Para mais informações sobre o formato de uma política, consulte a referência da política.Por exemplo, para definir a política de permissão mostrada na etapa anterior, substitua
POLICY
pela seguinte, em queCALLER_SA
é a conta de serviço que cria o token de curta duração:{ "version": 1, "etag": "BwWKmjvelug=", "bindings": [ { "role": "roles/serviceAccountAdmin", "members": [ "user:admin@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
Corpo JSON da solicitação:
{ "policy": POLICY }
Para enviar a solicitação, expanda uma destas opções:
A resposta contém a política de permissão atualizada.
Credenciais do usuário
Quando você quiser usar a Google Cloud CLI para gerar tokens de curta duração ou gerar tokens de curta duração a partir de um ambiente de desenvolvimento local, é possível usar uma conta de usuário para gerar os tokens. Muitas vezes, é possível usar sua própria Conta do Google.
Quando você usa uma conta de usuário para gerar tokens de curta duração, as seguintes identidades são envolvidas:
Conta do Google do autor da chamada (
CALLER_ACCOUNT
)Essa conta de usuário é 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
)Essa conta de serviço recebe os papéis do IAM necessários para o token de curta duração. Essa é 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
, conceda a
CALLER_ACCOUNT
o papel de criador de token da conta de serviço
(roles/iam.serviceAccountTokenCreator
) em PRIV_SA
.
Conceda o papel necessário em PRIV_SA
:
Console
-
No Console do Google Cloud, acesse a página Contas de serviço.
- Selecione um projeto.
- Clique no endereço de e-mail da conta de serviço com privilégios,
PRIV_SA
. - Clique na guia Permissões..
- Em Principais com acesso a esta conta de serviço, clique em Conceder acesso.
-
Insira o endereço de e-mail da Conta do Google do autor da chamada,
CALLER_ACCOUNT
.Por exemplo,
username@google.com
. -
Selecione o papel Criador do token da conta de serviço
(
roles/iam.serviceAccountTokenCreator
). - Clique em Salvar para conceder o papel à conta de usuário.
gcloud
O
comando gcloud iam service-accounts add-iam-policy-binding
concede um papel em uma conta de serviço.
Antes de usar os dados do comando abaixo, faça estas substituições:
-
PRIV_SA
: o endereço de e-mail da conta de serviço com privilégios para o qual o token é gerado. -
CALLER_ACCOUNT
: o endereço de e-mail da conta de usuário que está sendo usada para solicitar o token de curta duração.
Execute o este 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
Você receberá uma resposta semelhante a esta:
Updated IAM policy for serviceAccount [PRIV_SA]. { "bindings": [ { "members": [ "user:CALLER_ACCOUNT" ], "role": "roles/iam.serviceAccountTokenCreator" } ], "etag": "BwX1ZbefjXU=", "version": 1 }
REST
-
Leia a política de permissão para
PRIV_SA
:O método
serviceAccounts.getIamPolicy
recebe a política do IAM de uma conta de serviço.Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:
PROJECT_ID
: o ID do projeto do Google Cloud. Os IDs do projeto são strings alfanuméricas, comomy-project
.-
PRIV_SA
: o endereço de e-mail da conta de serviço com privilégios para o qual o token de curta duração foi criado. POLICY_VERSION
: a versão da política a ser retornada. As solicitações precisam especificar a versão mais recente da política, que é a versão 3 da política. Para saber mais detalhes, consulte Como especificar uma versão da política ao receber uma política.
Método HTTP e URL:
POST https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts/PRIV_SA:getIamPolicy
Corpo JSON da solicitação:
{ "options": { "requestedPolicyVersion": POLICY_VERSION } }
Para enviar a solicitação, expanda uma destas opções:
Você receberá uma resposta JSON semelhante a esta:
{ "version": 1, "etag": "BwWKmjvelug=", "bindings": [ { "role": "roles/serviceAccountAdmin", "members": [ "user:admin@example.com" ] } ] }
Se você não tiver concedido aos papéis à conta de serviço, a resposta conterá apenas um valor
etag
. Inclua esse valoretag
na próxima etapa. -
Em seguida, modifique a política de autorização para atribuir a
CALLER_ACCOUNT
o papel "Criador de token da conta de serviço" (roles/iam.serviceAccountTokenCreator
).Por exemplo, para modificar a resposta de amostra da etapa anterior, adicione o seguinte:
{ "version": 1, "etag": "BwWKmjvelug=", "bindings": [ { "role": "roles/serviceAccountAdmin", "members": [ "user:admin@example.com" ] }, { "role": "roles/iam.serviceAccountTokenCreator", "members": [ "user:CALLER_ACCOUNT" ] } ] }
-
Grave 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 os dados da solicitação abaixo, faça as substituições a seguir:
PROJECT_ID
: o ID do projeto do Google Cloud. Os IDs do projeto são strings alfanuméricas, comomy-project
.-
PRIV_SA
: o endereço de e-mail da conta de serviço com privilégios para o qual o token de curta duração foi criado. POLICY_VERSION
: a versão da política a ser retornada. As solicitações precisam especificar a versão mais recente da política, que é a versão 3 da política. Para saber mais detalhes, consulte Como especificar uma versão da política ao receber uma política.-
POLICY
: uma representação JSON da política que você quer definir. Para mais informações sobre o formato de uma política, consulte a referência da política.Por exemplo, para definir a política de permissão mostrada na etapa anterior, substitua
POLICY
pela seguinte, em queCALLER_ACCOUNT
é a conta de usuário que cria o token de curta duração:{ "version": 1, "etag": "BwWKmjvelug=", "bindings": [ { "role": "roles/serviceAccountAdmin", "members": [ "user:admin@example.com" ] }, { "role": "roles/iam.serviceAccountTokenCreator", "members": [ "user:CALLER_ACCOUNT" ] } ] }
Método HTTP e URL:
POST https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts/PRIV_SA
Corpo JSON da solicitação:
{ "policy": POLICY }
Para enviar a solicitação, expanda uma destas opções:
A resposta contém a política de permissão atualizada.
Gerar 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 usando uma chave privada da conta de serviço gerenciada pelo sistema.
Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:
-
PRIV_SA
: o endereço de e-mail da conta de serviço com privilégios para o qual o token de curta duração foi criado. -
BLOB_PAYLOAD
: uma string de bytes codificada em base64. Por exemplo,VGhlIHF1aWNrIGJyb3duIGZveCBqdW1wZWQgb3ZlciB0aGUgbGF6eSBkb2cu
.
Método HTTP e URL:
POST https://iamcredentials.googleapis.com/v1/projects/-/serviceAccounts/PRIV_SA:signBlob
Corpo JSON da solicitação:
{ "payload": "BLOB_PAYLOAD" }
Para enviar a solicitação, expanda uma destas opções:
Se a solicitação signBlob
for bem-sucedida, o corpo da resposta conterá um blob assinado e
o ID da chave de assinatura que foi usada para assiná-lo. Use o valor signedBlob
como um token do portador para autenticar diretamente uma solicitação em nome da conta de serviço. O token
será válido até que a chave privada da conta de serviço gerenciada pelo sistema expire. O ID dessa chave é o
valor do campo keyId
na resposta.
{ "keyId": "42ba1e...fc0a", "signedBlob": "eyJ0eXAi...NiJ9" }