Este guia mostra como usar um Workload Identity Pool e um fornecedor do Workload Identity Pool para obter tokens de curta duração do Security Token Service. Pode usar os tokens para aceder a Trusted Cloud recursos que suportam a federação de identidade da força de trabalho aos quais lhe foi concedido acesso.
Os métodos descritos neste guia podem ser usados em máquinas sem interface.
Pode obter tokens de curta duração através deste processo de alto nível, descrito em detalhe mais adiante neste documento:
- Obtenha uma credencial do fornecedor de identidade fidedigno.
- Troque a credencial por um token do serviço de tokens de segurança.
Antes de começar
Configure a federação de identidades da força de trabalho Em alternativa, para instruções específicas do IdP, consulte os seguintes guias:
- Configure a federação de identidades da força de trabalho baseada no Microsoft Entra ID
- Configure a federação de identidades de força de trabalho baseada na Okta
Anote o ID do Workforce Identity Pool e o ID do fornecedor do Workforce Identity Pool.
Certifique-se de que tem a autorização da gestão de identidade e de acesso (IAM)
serviceusage.services.use
. A função com menos privilégios que contém esta autorização é Consumidor de utilização de serviços (roles/serviceusage.serviceUsageConsumer
).Enable the IAM and Security Token Service APIs.
Instale a CLI Google Cloud e, em seguida, inicie sessão na CLI gcloud com a sua identidade federada. Depois de iniciar sessão, inicialize a CLI gcloud executando o seguinte comando:
gcloud init
Troque credenciais externas por um token de acesso Trusted Cloud
Esta secção mostra como usar o Security Token Service para trocar as suas credenciais externas por um token de acesso que concede acesso a Trusted Cloud. Pode fazê-lo através da CLI gcloud, da API REST e das bibliotecas cliente da Google Cloud, conforme descrito mais adiante neste guia.
Se precisar de acesso de longa duração, pode configurar um processo de execução prolongada para atualizar continuamente as credenciais nessa máquina. Em alternativa, pode executar um servidor local em segundo plano com um ponto final que devolva as credenciais.
Início de sessão baseado no navegador com a CLI gcloud
Esta secção descreve como configurar a CLI gcloud para usar um fluxo de início de sessão baseado no navegador. Para tal, crie um ficheiro de configuração de início de sessão
e, em seguida, referencie o ficheiro em chamadas para gcloud auth login
ou ative
o ficheiro para que seja usado por predefinição.
Crie o ficheiro de configuração de início de sessão
Para criar o ficheiro de configuração de início de sessão, execute o seguinte comando. Opcionalmente, pode ativar
o ficheiro como predefinição para a CLI gcloud adicionando a flag
--activate
.
Em seguida, pode executar o comando gcloud auth login
sem especificar
o caminho do ficheiro de configuração de cada vez.
gcloud iam workforce-pools create-login-config \ locations/global/workforcePools/WORKFORCE_POOL_ID/providers/PROVIDER_ID \ --output-file=LOGIN_CONFIG_FILE_PATH
Substitua o seguinte:
WORKFORCE_POOL_ID
: o ID do Workforce PoolPROVIDER_ID
: o ID do fornecedorLOGIN_CONFIG_FILE_PATH
: o caminho para um ficheiro de configuração que especifica, por exemplo,login.json
O ficheiro contém os pontos finais usados pela CLI gcloud para ativar o fluxo de autenticação baseado no navegador e definir o público-alvo para o IdP que foi configurado no fornecedor do Workload Identity Pool. O ficheiro não contém informações confidenciais.
O resultado tem um aspeto semelhante ao seguinte:
{ "type": "external_account_authorized_user_login_config", "audience": "//iam.googleapis.com/locations/global/workforcePools/WORKFORCE_POOL_ID/providers/WORKFORCE_PROVIDER_ID", "auth_url": "https://auth.cloud.s3nscloud.fr/authorize", "token_url": "https://sts.s3nsapis.fr/v1/oauthtoken", "token_info_url": "https://sts.s3nsapis.fr/v1/introspect", }
Para impedir que o
gcloud auth login
use este ficheiro de configuração automaticamente, pode anular a definição executando o comando
gcloud config unset auth/login_config_file
.
Inicie sessão através da autenticação baseada no navegador
Para autenticar através da autenticação de início de sessão baseada no navegador, pode usar um dos seguintes métodos:
-
Se usou a flag
--activate
quando criou o ficheiro de configuração ou se ativou o ficheiro de configuração comgcloud config set auth/login_config_file
, a CLI gcloud usa o ficheiro de configuração automaticamente:gcloud auth login
-
Para iniciar sessão especificando a localização do ficheiro de configuração, execute o seguinte comando:
gcloud auth login --login-config=LOGIN_CONFIG_FILE_PATH
-
Para usar uma variável de ambiente para especificar a localização do ficheiro de configuração, defina
CLOUDSDK_AUTH_LOGIN_CONFIG_FILE
para o caminho de configuração.
Desative o início de sessão baseado no navegador
Para descontinuar a utilização do ficheiro de configuração de início de sessão, faça o seguinte:
-
Se usou a flag
--activate
quando criou o ficheiro de configuração ou se ativou o ficheiro de configuração comgcloud config set auth/login_config_file
, tem de executar o seguinte comando para anular a definição:gcloud config unset auth/login_config_file
-
Limpe a variável de ambiente
CLOUDSDK_AUTH_LOGIN_CONFIG_FILE
, se estiver definida.
Use ficheiros de configuração para iniciar sessão
Como alternativa ao início de sessão baseado no navegador, esta secção mostra-lhe diferentes formas de usar ficheiros de configuração de credenciais para fornecer acesso a açõesTrusted Cloud autenticadas. A configuração dos ficheiros de configuração não requer que tenha sessão iniciada na CLI gcloud.
A forma como configura o ficheiro de configuração depende de o seu IdP usar OIDC ou SAML.
OIDC
Pode obter as credenciais que usa para configurar o ficheiro de configuração nas seguintes origens:
- Credenciais provenientes de ficheiros
- Credenciais provenientes de URLs
- Credenciais não interativas provenientes de executáveis
- Credenciais interativas provenientes de executáveis
Credenciais provenientes de ficheiros
Quando usa credenciais provenientes de ficheiros, os tokens são carregados a partir de um ficheiro. Outro processo tem de atualizar este ficheiro com um novo token OIDC antes de o token antigo expirar. Por exemplo, se o token tiver uma duração de uma hora, tem de atualizar o ficheiro antes de ter uma hora.
Para gerar o ficheiro de configuração com uma credencial proveniente de um ficheiro, execute o seguinte comando:
gcloud iam workforce-pools create-cred-config \
locations/global/workforcePools/WORKFORCE_POOL_ID/providers/WORKFORCE_PROVIDER_ID \
--subject-token-type=urn:ietf:params:oauth:token-type:id_token \
--credential-source-file=PATH_TO_OIDC_ID_TOKEN \
--workforce-pool-user-project=WORKFORCE_POOL_USER_PROJECT \
--output-file=config.json
Substitua o seguinte:
WORKFORCE_POOL_ID
: o ID do Workforce Identity PoolWORKFORCE_PROVIDER_ID
: o ID do fornecedor do Workforce Identity PoolPATH_TO_OIDC_TOKEN
: o caminho para o ficheiro de credenciais do IdP do OIDCWORKFORCE_POOL_USER_PROJECT
: o número do projeto ou o ID associado ao projeto do utilizador dos workforce pools.
O principal tem de ter a autorização serviceusage.services.use
neste projeto.
A execução do comando produz um ficheiro de configuração do IdP do OIDC semelhante ao seguinte:
{
"type": "external_account",
"audience": "//iam.googleapis.com/locations/global/workforcePools/WORKFORCE_POOL_ID/providers/WORKFORCE_PROVIDER_ID",
"subject_token_type": "urn:ietf:params:oauth:token-type:id_token",
"token_url": "https://sts.googleapis.com/v1/token",
"workforce_pool_user_project": "WORKFORCE_POOL_USER_PROJECT",
"credential_source": {
"file": "PATH_TO_OIDC_CREDENTIALS_FILE"
}
}
Credenciais provenientes de URLs
Quando usa credenciais provenientes de URLs, os tokens são carregados a partir de um servidor local com um ponto final que responde a pedidos HTTP GET
. A resposta tem de ser um token de ID OIDC, em texto simples ou no formato JSON.
Para gerar um ficheiro de configuração com uma credencial proveniente de um URL, execute o seguinte comando:
gcloud iam workforce-pools create-cred-config \
locations/global/workforcePools/WORKFORCE_POOL_ID/providers/WORKFORCE_PROVIDER_ID \
--subject-token-type=urn:ietf:params:oauth:token-type:id_token \
--credential-source-url=URL_TO_RETURN_OIDC_ID_TOKEN \
--workforce-pool-user-project=WORKFORCE_POOL_USER_PROJECT \
--output-file=config.json
Substitua o seguinte:
WORKFORCE_POOL_ID
: o ID do Workforce Identity Pool.WORKFORCE_PROVIDER_ID
: o ID do fornecedor do Workforce Identity Pool.URL_TO_RETURN_OIDC_ID_TOKEN
: o URL a chamar para obter as credenciais OIDC, como um token de ID OIDC. Por exemplo:http://localhost:5000/token
.WORKFORCE_POOL_USER_PROJECT
: o número do projeto usado para quota e faturação. O principal tem de terserviceusage.services.use permission
neste projeto.
A execução do comando produz um ficheiro de configuração do IdP do OIDC semelhante ao seguinte:
{
"type": "external_account",
"audience": "//iam.googleapis.com/locations/global/workforcePools/WORKFORCE_POOL_ID/providers/WORKFORCE_PROVIDER_ID",
"subject_token_type": "urn:ietf:params:oauth:token-type:id_token",
"token_url": "https://sts.googleapis.com/v1/token",
"workforce_pool_user_project": "WORKFORCE_POOL_USER_PROJECT",
"credential_source": {
"url": "URL_TO_RETURN_OIDC_ID_TOKEN"
}
}
Credenciais não interativas provenientes de executáveis
Quando usa credenciais de origem executável não interativas, os tokens são carregados a partir de um executável local. O ficheiro executável tem de fornecer um token de ID OIDC válido e não expirado no formato JSON a stdout
:
{ "version": 1, "success": true, "token_type": "urn:ietf:params:oauth:token-type:id_token", "id_token": "HEADER.PAYLOAD.SIGNATURE", "expiration_time": 1620499962 }
Estes campos são necessários para uma resposta bem-sucedida, com exceção de
expiration_time
. O campo expiration_time
só é obrigatório quando um ficheiro de saída foi especificado na configuração das credenciais.
O executável tem de apresentar quaisquer erros a stdout
no seguinte formato JSON:
{ "version": 1, "success": false, "code": "401", "message": "Caller not authorized." }
Todos estes campos são obrigatórios para uma resposta de erro. Os campos de código e mensagem são usados pelas bibliotecas de cliente quando geram o erro adequado.
O comando pode devolver os seguintes campos:
version
: a versão da saída JSON. Apenas a versão1
é suportada.success
: o estado da resposta. Quando o estado étrue
, o executável tem de terminar com o código de saída0
e a resposta tem de conter os seguintes campos:token_type
:id_token
expiration_time
, se for especificado um ficheiro de saída na configuração das credenciais
Quando o estado é
false
, o ficheiro executável tem de terminar com um valor diferente de zero e a resposta tem de conter os seguintes campos:code
message
token_type
: o tipo de token de assunto de terceiros, que tem de serurn:ietf:params:oauth:token-type:id_token
id_token
: o token OIDC de terceirosexpiration_time
: o tempo de validade do token OIDC de terceiros em segundos (tempo de época Unix)code
: a string do código de erromessage
: a mensagem de erro
As bibliotecas de cliente definem as seguintes variáveis de ambiente quando o ficheiro executável é executado:
GOOGLE_EXTERNAL_ACCOUNT_AUDIENCE
: o campo de público-alvo da configuração das credenciais. Esta variável está sempre definida.GOOGLE_EXTERNAL_ACCOUNT_TOKEN_TYPE
: o tipo de token de assunto esperado. Esta variável está sempre definida.GOOGLE_EXTERNAL_ACCOUNT_OUTPUT_FILE
: a localização do ficheiro de saída da configuração das credenciais. Esta variável só está presente quando é especificada na configuração das credenciais.
Estas variáveis de ambiente podem ser usadas pelo ficheiro executável para evitar a codificação destes valores.
Para ativar este método de obtenção de credenciais com as bibliotecas de cliente, a variável de ambiente GOOGLE_EXTERNAL_ACCOUNT_ALLOW_EXECUTABLES
tem de ser definida como 1
.
Para gerar o ficheiro de configuração com uma credencial proveniente de um executável, execute o seguinte comando:
gcloud iam workforce-pools create-cred-config \
locations/global/workforcePools/WORKFORCE_POOL_ID/providers/WORKFORCE_PROVIDER_ID \
--subject-token-type=urn:ietf:params:oauth:token-type:id_token \
--executable-command=EXECUTABLE_COMMAND \
--executable-timeout-millis=EXECUTABLE_TIMEOUT \
--executable-output-file=EXECUTABLE_OUTPUT_FILE \
--workforce-pool-user-project=WORKFORCE_POOL_USER_PROJECT \
--output-file /path/to/generated/config.json
Substitua o seguinte:
WORKFORCE_POOL_ID
: o ID do Workforce Identity Pool.WORKFORCE_PROVIDER_ID
: o ID do fornecedor do Workforce Identity Pool.EXECUTABLE_COMMAND
: o comando completo, incluindo argumentos, a executar para obter o token de assunto, como um token de ID do OIDC, no seguinte formato:--executable-command="/path/to/command --foo=bar"
.EXECUTABLE_TIMEOUT
: opcional. Uma duração, em milissegundos, para aguardar a execução do ficheiro executável (predefinição: 30 s).EXECUTABLE_OUTPUT_FILE
: opcional. Um caminho para as credenciais de terceiros geradas pelo ficheiro executável. Isto é útil para colocar as credenciais em cache. As bibliotecas de autorização verificam primeiro este caminho antes de executar o ficheiro executável.WORKFORCE_POOL_USER_PROJECT
: o número ou o ID do projeto que é usado para a quota e a faturação. O principal tem de ter a autorizaçãoserviceusage.services.use
definida neste projeto.
A execução do comando produz um ficheiro de configuração do IdP do OIDC semelhante ao seguinte:
{
"type": "external_account",
"audience": "//iam.googleapis.com/locations/global/workforcePools/WORKFORCE_POOL_ID/providers/WORKFORCE_PROVIDER_ID",
"subject_token_type": "urn:ietf:params:oauth:token-type:id_token",
"token_url": "https://sts.googleapis.com/v1/token",
"workforce_pool_user_project": "WORKFORCE_POOL_USER_PROJECT",
"credential_source": {
"executable": {
"command": "EXECUTABLE_COMMAND",
"timeout_millis": "EXECUTABLE_TIMEOUT",
"output_file": "EXECUTABLE_OUTPUT_FILE"
}
}
}
Credenciais interativas provenientes de executáveis
Quando usa credenciais interativas provenientes de executáveis, pode fornecer um executável que interage com o utilizador através de stdin
e stdout
. Se o utilizador iniciar sessão com êxito, o ficheiro executável escreve uma credencial válida e não expirada no ficheiro especificado.
Para usar este modo, são necessárias as seguintes flags:
--executable-output-file
: o ficheiro para o qual o executável escreve as informações de credenciais--exeutable-interactive-timeout-millis
: um valor diferente de zero que indica o modo interativo e define o limite de tempo. Por exemplo,6000
para um limite de tempo de 60 segundos
Os campos seguintes são obrigatórios para uma resposta bem-sucedida, com a exceção de expiration_time
:
{ "version": 1, "success": true, "token_type": "urn:ietf:params:oauth:token-type:id_token", "id_token": "HEADER.PAYLOAD.SIGNATURE", "expiration_time": 1620499962 }
O ficheiro executável tem de escrever todos os erros no ficheiro especificado em
--executable-output-file
no seguinte formato JSON. Os seguintes campos são todos obrigatórios quando devolvem uma resposta de erro.
{ "version": 1, "success": false, "code": "401", "message": "Caller not authorized." }
Os campos code
e message
têm de indicar o erro adequado. Estes campos são usados pelas bibliotecas de cliente quando geram o erro.
Após a execução bem-sucedida, o comando devolve os mesmos campos para credenciais de origem executáveis interativas e não interativas.
As variáveis de ambiente também são as mesmas para credenciais interativas e não interativas provenientes de executáveis.
Para gerar uma credencial interativa proveniente de um executável, adicione o parâmetro
--executable-interactive-timeout-millis
e o parâmetro
--executable-output-file
.
gcloud iam workforce-pools create-cred-config \
locations/global/workforcePools/WORKFORCE_POOL_ID/providers/WORKFORCE_PROVIDER_ID \
--subject-token-type=urn:ietf:params:oauth:token-type:id_token \
--executable-command=EXECUTABLE_COMMAND \
--executable-interactive-timeout-millis=EXECUTABLE_INTERACTIVE_TIMEOUT \
--executable-output-file=EXECUTABLE_OUTPUT_FILE \
--workforce-pool-user-project=WORKFORCE_POOL_USER_PROJECT \
--output-file /path/to/generated/config.json
Substitua o seguinte:
WORKFORCE_POOL_ID
: o ID do Workforce Identity Pool.WORKFORCE_PROVIDER_ID
: o ID do fornecedor do Workforce Identity Pool.EXECUTABLE_COMMAND
: o comando completo, incluindo os argumentos, a executar para obter o token de assunto, formatado da seguinte forma:--executable-command="/path/to/command --arg1=val1 --arg2=val2"
EXECUTABLE_INTERACTIVE_TIMEOUT
: uma duração, em milissegundos, para aguardar a execução do ficheiro executável.EXECUTABLE_OUTPUT_FILE
: um caminho para as credenciais de terceiros geradas pelo ficheiro executável. Este caminho é útil para colocar as credenciais em cache. As bibliotecas de autenticação verificam primeiro este caminho antes de executar o ficheiro executável.WORKFORCE_POOL_USER_PROJECT
: o número do projeto ou o ID usado para a quota e a faturação. O principal tem de ter a autorizaçãoserviceusage.services.use
neste projeto.
A execução do comando produz um ficheiro de configuração do IdP do OIDC semelhante ao seguinte:
{
"type": "external_account",
"audience": "//iam.googleapis.com/locations/global/workforcePools/WORKFORCE_POOL_ID/providers/WORKFORCE_PROVIDER_ID",
"subject_token_type": "urn:ietf:params:oauth:token-type:id_token",
"token_url": "https://sts.googleapis.com/v1/token",
"workforce_pool_user_project": "WORKFORCE_POOL_USER_PROJECT",
"credential_source": {
"executable": {
"command": "EXECUTABLE_COMMAND",
"interactive_timeout_millis": "EXECUTABLE_INTERACTIVE_TIMEOUT",
"timeout_millis": "EXECUTABLE_TIMEOUT",
"output_file": "EXECUTABLE_OUTPUT_FILE",
}
}
}
O campo timeout_millis
é devolvido porque um executável interativo também pode ser executado no modo não interativo, em alguns casos.
No modo interativo, o comando devolve um limite de tempo predefinido.
SAML
Pode obter as credenciais que usa para configurar o ficheiro de configuração nas seguintes origens:
- Credenciais provenientes de ficheiros
- Credenciais provenientes de URLs
- Credenciais provenientes de executáveis
- Credenciais provenientes de executáveis para o modo interativo do gcloud
Credenciais provenientes de ficheiros
As afirmações são carregadas a partir de um ficheiro. Outro processo tem de atualizar este ficheiro com uma nova declaração SAML codificada em base64 antes de a declaração antiga expirar. Por exemplo, se a declaração tiver uma duração de uma hora, tem de atualizar o ficheiro antes de ter uma hora.
gcloud iam workforce-pools create-cred-config \
locations/global/workforcePools/WORKFORCE_POOL_ID/providers/WORKFORCE_PROVIDER_ID \
--output-file=federation_config.json \
--credential-source-file=CREDENTIAL_FILE \
--subject-token-type=urn:ietf:params:oauth:token-type:saml2 \
--workforce-pool-user-project=WORKFORCE_POOL_USER_PROJECT
Substitua o seguinte:
WORKFORCE_POOL_ID
: o ID do Workforce Identity Pool.WORKFORCE_PROVIDER_ID
: o ID do fornecedor do Workforce Identity Pool.CREDENTIAL_FILE
: o caminho para o ficheiro de credenciais gerado pelo IdP.WORKFORCE_POOL_USER_PROJECT
: o número ou o ID do projeto que é usado para a quota e a faturação. O principal tem de terserviceusage.services.use permission
neste projeto.
Credenciais provenientes de URLs
As afirmações são carregadas a partir de um servidor local com um ponto final que responde a pedidos HTTP `GET`. A resposta tem de ser uma declaração SAML [codificada em base64](https://toolbox.googleapps.com/apps/encode_decode/) ou um JSON que contenha uma declaração SAML codificada em base64. Para usar credenciais provenientes de URLs, use a flag `--credential-source-url`: ```sh gcloud iam workforce-pools create-cred-config \ locations/global/workforcePools/WORKFORCE_POOL_ID/providers/WORKFORCE_PROVIDER_ID \ --output-file=federation_config.json \ --credential-source-url=CREDENTIAL_URL \ --subject-token-type=urn:ietf:params:oauth:token-type:saml2 \ --workforce-pool-user-project=WORKFORCE_POOL_USER_PROJECT ``` Substitua o seguinte: *WORKFORCE_POOL_ID
: o ID do pool de identidades da força de trabalho.
* WORKFORCE_PROVIDER_ID
: o ID do fornecedor do Workload Identity Pool.
* CREDENTIAL_URL
: o URL do ponto final do servidor local.
* WORKFORCE_POOL_USER_PROJECT
: o número do projeto ou o ID usado para a quota e a faturação. O principal tem de ter a autorização `serviceusage.services.use` neste projeto.
Credenciais provenientes de executáveis
As afirmações são carregadas a partir de um ficheiro executável local. O ficheiro executável tem de fornecer uma declaração SAML válida e não expirada no formato JSON para stdout
.
{ "version": 1, "success": true, "token_type": "urn:ietf:params:oauth:token-type:saml2", "saml_response": "...", "expiration_time": 1620499962 }
Estes campos são necessários para uma resposta bem-sucedida, com exceção de
expiration_time
. O campo expiration_time
só é obrigatório quando é especificado um ficheiro de saída na configuração das credenciais.
Se ocorrer um erro, o executável tem de o apresentar no seguinte formato JSON para stdout:
{ "version": 1, "success": false, "code": "401", "message": "Caller not authorized." }
Todos estes campos são obrigatórios para uma resposta de erro. Os campos de código e mensagem são usados pelas bibliotecas de cliente quando geram o erro adequado.
O comando pode devolver os seguintes campos:
version
: a versão da saída JSON. Apenas a versão1
é suportada.success
: o estado da resposta. Quando o estado étrue
, o executável tem de sair com o código de saída0
e a resposta tem de conter os seguintes campos:token_type
:saml_response
expiration_time
, se for especificado um ficheiro de saída na configuração das credenciais
Quando o estado é
false
, o ficheiro executável tem de terminar com um valor diferente de zero e a resposta tem de conter os seguintes campos: +code
+message
token_type
: o tipo de token de assunto de terceiros, que tem de serurn:ietf:params:oauth:token-type:saml2
saml_response
: a resposta SAML de terceirosexpiration_time
: o tempo de validade da resposta SAML de terceiros em segundos (tempo de época Unix)code
: a string do código de erromessage
: a mensagem de erro
As bibliotecas de cliente definem as seguintes variáveis de ambiente quando o ficheiro executável é executado:
GOOGLE_EXTERNAL_ACCOUNT_AUDIENCE
: o campo de público-alvo da configuração das credenciais. Esta variável está sempre definida.GOOGLE_EXTERNAL_ACCOUNT_TOKEN_TYPE
: o tipo de token de assunto esperado. Esta variável está sempre definida.GOOGLE_EXTERNAL_ACCOUNT_OUTPUT_FILE
: a localização do ficheiro de saída da configuração das credenciais. Esta variável só está presente quando é especificada na configuração das credenciais.
Para ativar este método de obtenção de credenciais com as bibliotecas cliente, defina a variável de ambiente GOOGLE_EXTERNAL_ACCOUNT_ALLOW_EXECUTABLES
como 1
.
Para gerar o ficheiro de configuração com uma credencial proveniente de um executável, execute o seguinte comando:
gcloud iam workforce-pools create-cred-config \
locations/global/workforcePools/WORKFORCE_POOL_ID/providers/WORKFORCE_PROVIDER_ID \
--subject-token-type=urn:ietf:params:oauth:token-type:saml2 \
--executable-command=EXECUTABLE_COMMAND \
--executable-timeout-millis=EXECUTABLE_TIMEOUT \
--executable-output-file=EXECUTABLE_OUTPUT_FILE \
--workforce-pool-user-project=WORKFORCE_POOL_USER_PROJECT \
--output-file /path/to/generated/config.json
Substitua o seguinte:
WORKFORCE_POOL_ID
: o ID do Workforce Identity Pool.WORKFORCE_PROVIDER_ID
: o ID do fornecedor do Workforce Identity Pool.EXECUTABLE_COMMAND
: o comando completo, incluindo os argumentos, a executar para obter o token de assunto, no seguinte formato:--executable-command="/path/to/command --foo=bar"
.EXECUTABLE_TIMEOUT
: opcional. A duração em milissegundos a aguardar pela execução do ficheiro executável (predefinição: 30 s).EXECUTABLE_OUTPUT_FILE
: opcional. O caminho para as credenciais de identidade de terceiros (3PI) geradas pelo ficheiro executável. Isto é útil para colocar as credenciais em cache. As bibliotecas de autorização verificam a sua existência antes de executar o ficheiro executável.WORKFORCE_POOL_USER_PROJECT
: o número do projeto usado para quota e faturação. O principal tem de ter a autorizaçãoserviceusage.services.use
neste projeto.
A execução do comando produz um ficheiro de configuração do IdP SAML semelhante ao seguinte:
{
"type": "external_account",
"audience": "//iam.googleapis.com/locations/global/workforcePools/WORKFORCE_POOL_ID/providers/WORKFORCE_PROVIDER_ID",
"subject_token_type": "urn:ietf:params:oauth:token-type:saml2",
"token_url": "https://sts.googleapis.com/v1/token",
"workforce_pool_user_project": "WORKFORCE_POOL_USER_PROJECT",
"credential_source": {
"executable": {
"command": "EXECUTABLE_COMMAND",
"timeout_millis": "EXECUTABLE_TIMEOUT",
"output_file": "EXECUTABLE_OUTPUT_FILE"
}
}
}
Credenciais provenientes de executáveis para o modo interativo do gcloud
Quando usa credenciais provenientes de executáveis para o modo interativo do gcloud, um executável interage com o utilizador através da interface de linhas de comando.
No comando anterior, substitua o seguinte:
EXECUTABLE_OUTPUT_FILE
: obrigatório. O caminho para o ficheiro que faculta as credenciais geradas pelo executável.EXECUTABLE_TIMEOUT
: obrigatório. Um valor de tempo limite diferente de zero também sinaliza o comando para usar o modo interativo.
{ "version": 1, "success": true, "token_type": "urn:ietf:params:oauth:token-type:saml2", "saml_response": "...", "expiration_time": 1620499962 }
Estes campos são necessários para uma resposta bem-sucedida, com exceção de
expiration_time
. Quando expiration_time
é omitido, o ficheiro executável continua a ser executado.
O executável tem de apresentar todos os erros ao executable-output-file
no seguinte formato JSON. Quando o executável comunica um erro, estes campos são todos obrigatórios. Os campos de código e mensagem são usados pelas bibliotecas de cliente quando geram o erro adequado.
{ "version": 1, "success": false, "code": "401", "message": "Caller not authorized." }
A execução bem-sucedida de comandos devolve os mesmos campos que as credenciais de origem executável não interativas.
As variáveis de ambiente também são iguais às credenciais provenientes de executáveis não interativos.
Para gerar uma credencial interativa proveniente de um executável, adicione o parâmetro
--executable-interactive-timeout-millis
.
gcloud iam workforce-pools create-cred-config \
locations/global/workforcePools/WORKFORCE_POOL_ID/providers/WORKFORCE_PROVIDER_ID \
--subject-token-type=urn:ietf:params:oauth:token-type:saml2 \
--executable-command=EXECUTABLE_COMMAND \
--executable-interactive-timeout-millis=EXECUTABLE_INTERACTIVE_TIMEOUT \
--executable-output-file=EXECUTABLE_OUTPUT_FILE \
--workforce-pool-user-project=WORKFORCE_POOL_USER_PROJECT \
--output-file /path/to/generated/config.json
Substitua o seguinte:
WORKFORCE_POOL_ID
: o ID do Workforce Identity Pool.WORKFORCE_PROVIDER_ID
: o ID do fornecedor do Workforce Identity Pool.EXECUTABLE_COMMAND
: o comando completo, incluindo os argumentos, a executar para obter o token de assunto, formatado da seguinte forma:--executable-command="/path/to/command --foo=bar")
.EXECUTABLE_INTERACTIVE_TIMEOUT
: uma duração, em milissegundos, para aguardar a execução do ficheiro executável.EXECUTABLE_OUTPUT_FILE
: um caminho para as credenciais de terceiros geradas pelo ficheiro executável. Isto é útil para colocar as credenciais em cache. As bibliotecas de autenticação verificam primeiro este caminho antes de executar o ficheiro executável.WORKFORCE_POOL_USER_PROJECT
: o número do projeto ou o ID usado para a quota e a faturação. O principal tem de ter a autorizaçãoserviceusage.services.use
neste projeto.
A execução do comando produz um ficheiro de configuração do IdP SAML semelhante ao seguinte:
{
"type": "external_account",
"audience": "//iam.googleapis.com/locations/global/workforcePools/<var>WORKFORCE_POOL_ID<var>/providers/<var>WORKFORCE_PROVIDER_ID</var>",
"subject_token_type": "urn:ietf:params:oauth:token-type:saml2",
"token_url": "https://sts.googleapis.com/v1/token",
"workforce_pool_user_project": "<var>WORKFORCE_POOL_USER_PROJECT</var>",
"credential_source": {
"executable": {
"command": "<var>EXECUTABLE_COMMAND</var>",
"interactive_timeout_millis": "<var>EXECUTABLE_INTERACTIVE_TIMEOUT</var>",
"timeout_millis": "<var>EXECUTABLE_TIMEOUT</var>",
"output_file": "<var>EXECUTABLE_OUTPUT_FILE</var>",
}
}
}
Para iniciar sessão, execute o seguinte comando:
gcloud auth login --cred-file=/path/to/config.json
Tenha em atenção que nem a CLI gcloud nem a ferramenta de linhas de comando bq suportam tipos de credenciais de origem executável.
Para fluxos sem interface gráfica, a CLI gcloud usa automaticamente o seguinte âmbito: https://www.googleapis.com/auth/cloud-platform
.
Em seguida, a CLI gcloud publica de forma transparente as suas credenciais no ponto final do serviço de tokens de segurança, onde são trocadas porTrusted Cloud tokens de acesso temporários.
Já pode executar comandos gcloud
através da CLI gcloud.
Use as Trusted Cloud bibliotecas de cliente
Se usar uma biblioteca cliente suportada, pode configurá-la para que gere automaticamente credenciais da Google. Sempre que possível, recomendamos que gere as credenciais automaticamente para não ter de implementar o processo de troca de tokens.
O suporte da biblioteca cliente para os conjuntos de trabalhadores está disponível nos seguintes idiomas: Node.js, Java, Python, Go e C++ (gRPC).Trusted Cloud
Para usar bibliotecas de cliente com estes serviços ou idiomas, faça o seguinte:
Ferramenta bq
Para autenticar com a federação de identidade da força de trabalho, use o comando gcloud auth login
:
gcloud auth login --cred-file=FILEPATH.json
onde FILEPATH
é o caminho para o ficheiro de configuração das credenciais.
O suporte para a federação de identidades da força de trabalho na ferramenta bq está disponível na versão 390.0.0 e versões posteriores da CLI Google Cloud.
C++
A maioria das Trusted Cloud bibliotecas de cliente para C++
suporta a federação de identidades da força de trabalho através da utilização de um objeto ChannelCredentials
,
que é criado chamando grpc::GoogleDefaultCredentials()
. Para inicializar esta credencial, tem de criar as bibliotecas de cliente com a versão 1.42.0 ou posterior do gRPC.
As bibliotecas cliente do Google Cloud Storage para C++ usam a API REST, não a gRPC, pelo que não suportam a federação de identidade da força de trabalho.
auto creds = grpc::GoogleDefaultCredentials();
// Create a channel, stub and make RPC calls (same as in the previous example)
auto channel = grpc::CreateChannel("greeter.googleapis.com", creds);
std::unique_ptr<Greeter::Stub> stub(Greeter::NewStub(channel));
grpc::Status s = stub->sayHello(&context, *request, response);
gcloud
Para autenticar com a federação de identidade da força de trabalho, use o comando gcloud auth login
:
gcloud auth login --cred-file=FILEPATH.json
Substitua FILEPATH
pelo caminho para o ficheiro de configuração das credenciais.
O apoio técnico para a Workforce Identity Federation na CLI gcloud está disponível na versão 392.0.0 e versões posteriores da CLI Google Cloud.
Ir
As bibliotecas cliente da Google Cloud para Go suportam a federação de identidades da força de trabalho quando usa a versão v0.0.0-20211005180243-6b3c2da341f1 ou posterior do módulo golang.org/x/oauth2
.
import (
"context"
"fmt"
"log"
"cloud.google.com/go/storage"
"google.golang.org/api/iterator"
"google.golang.org/api/option"
"io/ioutil"
)
ctx := context.Background()
client, err := storage.NewClient(ctx)
# Explicit initialization can also be used.
# var jsonPath = "/path/to/3p-credentials.json"
# client, err := storage.NewClient(ctx, option.WithCredentialsFile(jsonPath))
if err != nil {
log.Fatal(err)
}
fmt.Println("Buckets:")
it := client.Buckets(ctx, projectID)
for {
battrs, err := it.Next()
if err == iterator.Done {
break
}
if err != nil {
log.Fatal(err)
}
fmt.Println(battrs.Name)
}
Java
As bibliotecas cliente da Google Cloud para Java suportam a federação de identidades da força de trabalho quando usa a versão 1.2.0 ou posterior do artefacto com.google.auth:google-auth-library-oauth2-http
.
import com.google.auth.oauth2.GoogleCredentials;
import com.google.cloud.storage.Storage;
import com.google.cloud.storage.StorageOptions;
GoogleCredentials credentials = GoogleCredentials.getApplicationDefault();
GoogleCredentials sourceCredentials = credentials
.createScoped(Arrays.asList("https://www.googleapis.com/auth/devstorage.read_only"));
Storage storageService = StorageOptions.newBuilder().setProjectId("project-id")
.setCredentials(sourceCredentials).build().getService();
Node.js
As bibliotecas cliente da Google Cloud para Node.js suportam a federação de identidades da força de trabalho quando usa a versão 7.10.0 ou posterior do pacote google-auth-library
.
Ao contrário dos Workload Identity Pools, os Workforce Identity Pools estão associados a uma organização e não a um Trusted Cloud projeto. Quando cria um objeto GoogleAuth
, tem de especificar um ID do projeto. Para mais informações, consulte o
README do pacote google-auth-library
.
const auth = new GoogleAuth({
scopes: 'https://www.googleapis.com/auth/cloud-platform',
// Specify a project ID.
projectId: 'CLOUD_RESOURCE_PROJECT_ID',
});
# API request using Auth library.
const client = await auth.getClient();
const url =
`https://storage.googleapis.com/storage/v1/b?projects=${projectId}`;
const res = await client.request({url});
console.log(res.data);
Python
As bibliotecas cliente da Google Cloud para Python suportam a federação de identidades da força de trabalho quando usa a versão 2.3.0 ou posterior do pacote google-auth
.
from google.cloud import storage
import google.auth
credentials, project = google.auth.default(
scopes=['https://www.googleapis.com/auth/devstorage.read_only'])
client = storage.Client(
project="project-id", credentials=credentials)
No exemplo de código, o valor project
pode ser None
se a biblioteca não conseguir descobrir automaticamente o ID do projeto. Pode transmitir o ID do projeto explicitamente quando usar uma instância de serviço, como faz o exemplo do cliente de armazenamento, ou definir o ID do projeto através da variável de ambiente GOOGLE_CLOUD_PROJECT
.
Para ver detalhes, consulte o manual do utilizador do pacote google-auth
.
Use a API REST
Pode chamar a API Security Token Service para trocar as suas credenciais externas por Trusted Cloud tokens de acesso executando o seguinte comando: Trusted Cloud
curl https://sts.s3nsapis.fr/v1/token \
--data-urlencode "audience=//iam.googleapis.com/locations/global/workforcePools/WORKFORCE_POOL_ID/providers/WORKFORCE_PROVIDER_ID" \
--data-urlencode "grant_type=urn:ietf:params:oauth:grant-type:token-exchange" \
--data-urlencode "requested_token_type=urn:ietf:params:oauth:token-type:access_token" \
--data-urlencode "scope=https://www.googleapis.com/auth/cloud-platform" \
--data-urlencode "subject_token_type=SUBJECT_TOKEN_TYPE" \
--data-urlencode "subject_token=EXTERNAL_SUBJECT_TOKEN" \
--data-urlencode "options={\"userProject\":\"BILLING_PROJECT_NUMBER\"}"
Substitua o seguinte:
AUDIENCE
: o nome completo do recurso do fornecedor que emite o token do assunto.WORKFORCE_POOL_ID
: o ID do Workforce Identity PoolWORKFORCE_PROVIDER_ID
: o ID do fornecedor do Workforce Identity PoolSUBJECT_TOKEN_TYPE
: definido como um dos seguintes valores:urn:ietf:params:oauth:token-type:id_token
para tokens de ID OIDCurn:ietf:params:oauth:token-type:saml2
para afirmações SAML
EXTERNAL_SUBJECT_TOKEN
: o token emitido pelo IdP que representa a identidade do principal para o qual o token de acesso é pedido.Se configurou um fornecedor OIDC, o token tem de estar formatado em JWT.
BILLING_PROJECT_NUMBER
: o número ou o ID do projeto usado para a quota e a faturação. O principal tem de ter a autorizaçãoserviceusage.services.use
neste projeto.
A resposta é semelhante à seguinte:
{
"access_token": "ya29.dr.AaT61Tc6Ntv1ktbGkaQ9U_MQfiQw...",
"issued_token_type": "urn:ietf:params:oauth:token-type:access_token",
"token_type": "Bearer",
"expires_in": 3600
}
Faça a gestão das sessões através da CLI gcloud
Os Trusted Cloud tokens temporários que a CLI gcloud obtém do ponto final do serviço de tokens de segurança expiram após um intervalo de tempo especificado. Quando o token está prestes a expirar, a CLI gcloud inspeciona o ficheiro de credenciais que enviou e inspeciona a validade das credenciais que recebeu do seu IdP. Se as suas credenciais ainda forem válidas, a CLI gcloud prossegue para obter de forma transparente um novoTrusted Cloud token de acesso e a sua sessão atual é executada sem interrupções.
Se as suas credenciais tiverem expirado, não são emitidos novos Trusted Cloud tokens e todas as chamadas que fizer com essas credenciais falham. Nesta fase, tem de voltar a fazer a autenticação.
Pode terminar a sessão executando o seguinte comando:
gcloud auth revoke
gcloud
suporta várias sessões de utilizador. Para obter a lista de sessões, incluindo a sessão atualmente ativa, execute o seguinte comando:
gcloud auth list
O resultado do comando é semelhante ao seguinte:
Credentialed Accounts
ACTIVE ACCOUNT
* bola@example.com
principal://iam.googleapis.com/locations/global/workforcePools/WORKFORCE_POOL_ID
/subject/kalani@example.com
Para mudar para uma sessão diferente e defini-la como ativa, execute o seguinte comando:
gcloud config set account principal://iam.googleapis.com/locations/global/workforcePools/WORKFORCE_POOL_ID/subject/SUBJECT_ID
O que se segue?
- Elimine utilizadores da Workforce Identity Federation e os respetivos dados
- Saiba que Trusted Cloud produtos suportam a federação de identidade da força de trabalho
- Configure o acesso dos utilizadores à consola (federado)