Biblioteca cliente de autenticação de código aberto para Java.
Este projeto consiste em 3 artefatos:
Índice:
Início rápido
google-auth-library-oauth2-http
credenciais da biblioteca google-auth
google-auth-library-appengine
Status do IC
Contribuindo
Licença
Se você estiver usando o Maven, adicione-o ao seu arquivo pom.xml (observe que você pode substituir google-auth-library-oauth2-http
por qualquer um dos google-auth-library-credentials
e google-auth-library-appengine
, dependendo de sua aplicação precisa):
< dependency >
< groupId >com.google.auth groupId >
< artifactId >google-auth-library-oauth2-http artifactId >
< version >1.19.0 version >
dependency >
Se você estiver usando Gradle, adicione isto às suas dependências
implementation ' com.google.auth:google-auth-library-oauth2-http:1.19.0 '
Se você estiver usando o SBT, adicione isto às suas dependências
libraryDependencies + = " com.google.auth " % " google-auth-library-oauth2-http " % " 1.19.0 "
Esta biblioteca fornece uma implementação de Application Default Credentials for Java. As credenciais padrão do aplicativo fornecem uma maneira simples de obter credenciais de autorização para uso na chamada de APIs do Google.
Eles são mais adequados para casos em que a chamada precisa ter a mesma identidade e nível de autorização para a aplicação independente do usuário. Essa é a abordagem recomendada para autorizar chamadas para APIs do Cloud, principalmente ao criar um aplicativo que usa o Google Cloud Platform.
As Application Default Credentials também oferecem suporte à federação de identidade de carga de trabalho para acessar recursos do Google Cloud de plataformas que não sejam do Google Cloud, incluindo Amazon Web Services (AWS), Microsoft Azure ou qualquer provedor de identidade compatível com OpenID Connect (OIDC). A federação de identidade de carga de trabalho é recomendada para ambientes que não são do Google Cloud, pois evita a necessidade de fazer download, gerenciar e armazenar localmente chaves privadas de contas de serviço. Consulte: Federação de identidade de carga de trabalho.
Para obter credenciais padrão do aplicativo, use GoogleCredentials.getApplicationDefault()
ou GoogleCredentials.getApplicationDefault(HttpTransportFactory)
. Esses métodos retornam as credenciais padrão do aplicativo que são usadas para identificar e autorizar todo o aplicativo. Os itens a seguir são pesquisados (em ordem) para localizar as credenciais padrão do aplicativo:
GOOGLE_APPLICATION_CREDENTIALS
gcloud auth application-default login
do SDK do Google CloudNO_GCE_CHECK=true
GCE_METADATA_HOST=
Para obter credenciais de uma chave JSON de conta de serviço, use GoogleCredentials.fromStream(InputStream)
ou GoogleCredentials.fromStream(InputStream, HttpTransportFactory)
. Observe que as credenciais devem ser atualizadas antes que o token de acesso esteja disponível.
GoogleCredentials credentials = GoogleCredentials . fromStream ( new FileInputStream ( "/path/to/credentials.json" ));
credentials . refreshIfExpired ();
AccessToken token = credentials . getAccessToken ();
// OR
AccessToken token = credentials . refreshAccessToken ();
Permite que credenciais emitidas para um usuário ou conta de serviço representem outra. O projeto de origem que usa ImpersonatedCredentials deve ativar a API "IAMCredentials". Além disso, a conta de serviço de destino deve conceder ao principal de origem a função do IAM "Criador de token de conta de serviço".
String credPath = "/path/to/svc_account.json" ;
ServiceAccountCredentials sourceCredentials = ServiceAccountCredentials
. fromStream ( new FileInputStream ( credPath ));
sourceCredentials = ( ServiceAccountCredentials ) sourceCredentials
. createScoped ( Arrays . asList ( "https://www.googleapis.com/auth/iam" ));
ImpersonatedCredentials targetCredentials = ImpersonatedCredentials . create ( sourceCredentials ,
"[email protected]" , null ,
Arrays . asList ( "https://www.googleapis.com/auth/devstorage.read_only" ), 300 );
Storage storage_service = StorageOptions . newBuilder (). setProjectId ( "project-id" )
. setCredentials ( targetCredentials ). build (). getService ();
for ( Bucket b : storage_service . list (). iterateAll ())
System . out . println ( b );
Usando a federação de identidades de carga de trabalho, seu aplicativo pode acessar recursos do Google Cloud da Amazon Web Services (AWS), do Microsoft Azure ou de qualquer provedor de identidade compatível com OpenID Connect (OIDC).
Tradicionalmente, os aplicativos executados fora do Google Cloud usam chaves de conta de serviço para acessar os recursos do Google Cloud. Usando a federação de identidades, sua carga de trabalho pode representar uma conta de serviço. Isso permite que a carga de trabalho externa acesse diretamente os recursos do Google Cloud, eliminando a carga de manutenção e segurança associada às chaves da conta de serviço.
Para acessar os recursos do Google Cloud da Amazon Web Services (AWS), são necessários os seguintes requisitos:
Siga as instruções detalhadas sobre como configurar a federação de identidades de carga de trabalho da AWS.
Depois de configurar o provedor AWS para representar uma conta de serviço, um arquivo de configuração de credencial precisa ser gerado. Ao contrário dos arquivos de credenciais de conta de serviço, o arquivo de configuração de credencial gerado contém metadados não confidenciais para instruir a biblioteca sobre como recuperar tokens de assunto externos e trocá-los por tokens de acesso de conta de serviço. O arquivo de configuração pode ser gerado usando a CLI gcloud.
Para gerar a configuração da identidade da carga de trabalho da AWS, execute o seguinte comando:
# Generate an AWS configuration file.
gcloud iam workload-identity-pools create-cred-config
projects/ $PROJECT_NUMBER /locations/global/workloadIdentityPools/ $POOL_ID /providers/ $AWS_PROVIDER_ID
--service-account $SERVICE_ACCOUNT_EMAIL
--aws
--output-file /path/to/generated/config.json
Onde as seguintes variáveis precisam ser substituídas:
$PROJECT_NUMBER
: o número do projeto do Google Cloud.$POOL_ID
: o ID do pool de identidades da carga de trabalho.$AWS_PROVIDER_ID
: o ID do provedor AWS.$SERVICE_ACCOUNT_EMAIL
: o e-mail da conta de serviço a ser representada.Isso gera o arquivo de configuração no arquivo de saída especificado.
Se você estiver usando o AWS IMDSv2, um sinalizador adicional --enable-imdsv2
precisará ser adicionado ao comando gcloud iam workload-identity-pools create-cred-config
:
gcloud iam workload-identity-pools create-cred-config
projects/ $PROJECT_NUMBER /locations/global/workloadIdentityPools/ $POOL_ID /providers/ $AWS_PROVIDER_ID
--service-account $SERVICE_ACCOUNT_EMAIL
--aws
--output-file /path/to/generated/config.json
--enable-imdsv2
Agora você pode usar a biblioteca Auth para chamar recursos do Google Cloud da AWS.
Para acessar os recursos do Google Cloud no Microsoft Azure, são necessários os seguintes requisitos:
Siga as instruções detalhadas sobre como configurar a federação de identidade de carga de trabalho do Microsoft Azure.
Depois de configurar o fornecedor do Azure para representar uma conta de serviço, é necessário gerar um ficheiro de configuração de credenciais. Ao contrário dos arquivos de credenciais de conta de serviço, o arquivo de configuração de credencial gerado contém metadados não confidenciais para instruir a biblioteca sobre como recuperar tokens de assunto externos e trocá-los por tokens de acesso de conta de serviço. O arquivo de configuração pode ser gerado usando a CLI gcloud.
Para gerar a configuração de identidade da carga de trabalho do Azure, execute o seguinte comando:
# Generate an Azure configuration file.
gcloud iam workload-identity-pools create-cred-config
projects/ $PROJECT_NUMBER /locations/global/workloadIdentityPools/ $POOL_ID /providers/ $AZURE_PROVIDER_ID
--service-account $SERVICE_ACCOUNT_EMAIL
--azure
--output-file /path/to/generated/config.json
Onde as seguintes variáveis precisam ser substituídas:
$PROJECT_NUMBER
: o número do projeto do Google Cloud.$POOL_ID
: o ID do pool de identidades da carga de trabalho.$AZURE_PROVIDER_ID
: o ID do provedor do Azure.$SERVICE_ACCOUNT_EMAIL
: o e-mail da conta de serviço a ser representada.Isso gera o arquivo de configuração no arquivo de saída especificado.
Agora você pode usar a biblioteca Auth para chamar recursos do Google Cloud do Azure.
Para acessar os recursos do Google Cloud de um provedor de identidade compatível com OpenID Connect (OIDC), são necessários os seguintes requisitos:
Siga as instruções detalhadas sobre como configurar a federação de identidade de carga de trabalho de um provedor de identidade OIDC.
Após configurar o provedor OIDC para representar uma conta de serviço, um arquivo de configuração de credencial precisa ser gerado. Ao contrário dos arquivos de credenciais de conta de serviço, o arquivo de configuração de credencial gerado contém metadados não confidenciais para instruir a biblioteca sobre como recuperar tokens de assunto externos e trocá-los por tokens de acesso de conta de serviço. O arquivo de configuração pode ser gerado usando a CLI gcloud.
Para provedores OIDC, a biblioteca Auth pode recuperar tokens OIDC de um local de arquivo local (credenciais de origem de arquivo) ou de um servidor local (credenciais de origem de URL).
Credenciais de origem de arquivo Para credenciais de origem de arquivo, um processo em segundo plano precisa atualizar continuamente o local do arquivo com um novo token OIDC antes da expiração. Para tokens com vida útil de uma hora, o token precisa ser atualizado no arquivo a cada hora. O token pode ser armazenado diretamente como texto simples ou no formato JSON.
Para gerar uma configuração OIDC de origem de arquivo, execute o seguinte comando:
# Generate an OIDC configuration file for file-sourced credentials.
gcloud iam workload-identity-pools create-cred-config
projects/ $PROJECT_NUMBER /locations/global/workloadIdentityPools/ $POOL_ID /providers/ $OIDC_PROVIDER_ID
--service-account $SERVICE_ACCOUNT_EMAIL
--credential-source-file $PATH_TO_OIDC_ID_TOKEN
# Optional arguments for file types. Default is "text":
# --credential-source-type "json"
# Optional argument for the field that contains the OIDC credential.
# This is required for json.
# --credential-source-field-name "id_token"
--output-file /path/to/generated/config.json
Onde as seguintes variáveis precisam ser substituídas:
$PROJECT_NUMBER
: o número do projeto do Google Cloud.$POOL_ID
: o ID do pool de identidades da carga de trabalho.$OIDC_PROVIDER_ID
: o ID do provedor OIDC.$SERVICE_ACCOUNT_EMAIL
: o e-mail da conta de serviço a ser representada.$PATH_TO_OIDC_ID_TOKEN
: O caminho do arquivo usado para recuperar o token OIDC.Isso gera o arquivo de configuração no arquivo de saída especificado.
Credenciais de origem de URL Para credenciais de origem de URL, um servidor local precisa hospedar um terminal GET para retornar o token OIDC. A resposta pode ser em texto simples ou JSON. Cabeçalhos de solicitação adicionais necessários também podem ser especificados.
Para gerar uma configuração de identidade de carga de trabalho OIDC de origem URL, execute o seguinte comando:
# Generate an OIDC configuration file for URL-sourced credentials.
gcloud iam workload-identity-pools create-cred-config
projects/ $PROJECT_NUMBER /locations/global/workloadIdentityPools/ $POOL_ID /providers/ $OIDC_PROVIDER_ID
--service-account $SERVICE_ACCOUNT_EMAIL
--credential-source-url $URL_TO_GET_OIDC_TOKEN
--credential-source-headers $HEADER_KEY = $HEADER_VALUE
# Optional arguments for file types. Default is "text":
# --credential-source-type "json"
# Optional argument for the field that contains the OIDC credential.
# This is required for json.
# --credential-source-field-name "id_token"
--output-file /path/to/generated/config.json
Onde as seguintes variáveis precisam ser substituídas:
$PROJECT_NUMBER
: o número do projeto do Google Cloud.$POOL_ID
: o ID do pool de identidades da carga de trabalho.$OIDC_PROVIDER_ID
: o ID do provedor OIDC.$SERVICE_ACCOUNT_EMAIL
: o e-mail da conta de serviço a ser representada.$URL_TO_GET_OIDC_TOKEN
: A URL do endpoint do servidor local a ser chamado para recuperar o token OIDC.$HEADER_KEY
e $HEADER_VALUE
: os pares chave/valor de cabeçalho adicionais para transmitir a solicitação GET para $URL_TO_GET_OIDC_TOKEN
, por exemplo, Metadata-Flavor=Google
.Agora você pode usar a biblioteca Auth para chamar recursos do Google Cloud de um provedor OIDC.
Credenciais de origem executável Para credenciais de origem executável, um executável local é usado para recuperar o token de terceiros. O executável deve fornecer um token de ID OIDC válido e não expirado ou uma declaração SAML no formato JSON para stdout.
Para usar credenciais de origem executável, a variável de ambiente GOOGLE_EXTERNAL_ACCOUNT_ALLOW_EXECUTABLES
deve ser definida como 1
.
Para gerar uma configuração de identidade de carga de trabalho de origem executável, execute o seguinte comando:
# Generate a configuration file for executable-sourced credentials.
gcloud iam workload-identity-pools create-cred-config
projects/ $PROJECT_NUMBER /locations/global/workloadIdentityPools/ $POOL_ID /providers/ $PROVIDER_ID
--service-account= $SERVICE_ACCOUNT_EMAIL
--subject-token-type= $SUBJECT_TOKEN_TYPE
# The absolute path for the program, including arguments.
# e.g. --executable-command="/path/to/command --foo=bar"
--executable-command= $EXECUTABLE_COMMAND
# Optional argument for the executable timeout. Defaults to 30s.
# --executable-timeout-millis=$EXECUTABLE_TIMEOUT
# Optional argument for the absolute path to the executable output file.
# See below on how this argument impacts the library behaviour.
# --executable-output-file=$EXECUTABLE_OUTPUT_FILE
--output-file /path/to/generated/config.json
Onde as seguintes variáveis precisam ser substituídas:
$PROJECT_NUMBER
: o número do projeto do Google Cloud.$POOL_ID
: o ID do pool de identidades da carga de trabalho.$PROVIDER_ID
: o ID do provedor OIDC ou SAML.$SERVICE_ACCOUNT_EMAIL
: o e-mail da conta de serviço a ser representada.$SUBJECT_TOKEN_TYPE
: O tipo de token do assunto.$EXECUTABLE_COMMAND
: O comando completo a ser executado, incluindo argumentos. Deve ser um caminho absoluto para o programa. O sinalizador --executable-timeout-millis
é opcional. Este é o tempo que a biblioteca de autenticação aguardará a conclusão do executável, em milissegundos. O padrão é 30 segundos quando não fornecido. O valor máximo permitido é de 2 minutos. O mínimo é 5 segundos.
O sinalizador --executable-output-file
é opcional. Se fornecido, o caminho do arquivo deverá apontar para a resposta da credencial 3PI gerada pelo executável. Isso é útil para armazenar as credenciais em cache. Ao especificar este caminho, as bibliotecas Auth verificarão primeiro sua existência antes de executar o executável. Ao armazenar em cache a resposta JSON executável para esse arquivo, ele melhora o desempenho, pois evita a necessidade de executar o executável até que as credenciais armazenadas em cache no arquivo de saída expirem. O executável deve lidar com a gravação neste arquivo - as bibliotecas de autenticação apenas tentarão ler neste local. O formato do conteúdo do arquivo deve corresponder ao formato JSON esperado pelo executável mostrado abaixo.
Para recuperar o token de terceiros, a biblioteca chamará o executável usando o comando especificado. A saída do executável deve seguir o formato de resposta especificado abaixo. Ele deve gerar a resposta para stdout.
Um exemplo de resposta executável do OIDC bem-sucedida:
{
"version" : 1 ,
"success" : true ,
"token_type" : " urn:ietf:params:oauth:token-type:id_token " ,
"id_token" : " HEADER.PAYLOAD.SIGNATURE " ,
"expiration_time" : 1620499962
}
Um exemplo de resposta SAML executável bem-sucedida:
{
"version" : 1 ,
"success" : true ,
"token_type" : " urn:ietf:params:oauth:token-type:saml2 " ,
"saml_response" : " ... " ,
"expiration_time" : 1620499962
}
Um exemplo de resposta de erro executável:
{
"version" : 1 ,
"success" : false ,
"code" : " 401 " ,
"message" : " Caller not authorized. "
}
Todos esses são campos obrigatórios para uma resposta de erro. Os campos de código e mensagem serão usados pela biblioteca como parte da exceção lançada.
Para respostas bem-sucedidas, o campo expiration_time
só é obrigatório quando um arquivo de saída é especificado na configuração da credencial.
Resumo dos campos de formato de resposta:
version
: a versão da saída JSON. Atualmente apenas a versão 1 é suportada.success
: quando verdadeiro, a resposta deve conter o token de terceiros e o tipo de token. A resposta também deverá conter o campo expiration_time se um arquivo de saída tiver sido especificado na configuração da credencial. O executável também deve sair com o código de saída 0. Quando falso, a resposta deve conter o código de erro e os campos de mensagem e sair com um valor diferente de zero.token_type
: o tipo de token de assunto de terceiros. Deve ser urn:ietf:params:oauth:token-type:jwt , urn:ietf:params:oauth:token-type:id_token ou urn:ietf:params:oauth:token-type:saml2 .id_token
: o token OIDC de terceiros.saml_response
: a resposta SAML de terceiros.expiration_time
: o tempo de expiração do token de terceiros em segundos (tempo da época unix).code
: a sequência do código de erro.message
: A mensagem de erro. Todos os tipos de resposta devem incluir os campos version
e success
.
token_type
e id_token
ou saml_response
. O campo expiration_time
também deverá estar presente se um arquivo de saída tiver sido especificado na configuração da credencial.code
e message
.A biblioteca preencherá as seguintes variáveis de ambiente quando o executável for executado:
GOOGLE_EXTERNAL_ACCOUNT_AUDIENCE
: o campo de público da configuração da credencial. Sempre presente.GOOGLE_EXTERNAL_ACCOUNT_TOKEN_TYPE
: este tipo de token de assunto esperado. Sempre presente.GOOGLE_EXTERNAL_ACCOUNT_IMPERSONATED_EMAIL
: o e-mail da conta de serviço. Presente apenas quando a representação da conta de serviço é usada.GOOGLE_EXTERNAL_ACCOUNT_OUTPUT_FILE
: o local do arquivo de saída da configuração da credencial. Presente apenas quando especificado na configuração da credencial.Essas variáveis de ambiente podem ser usadas pelo executável para evitar a codificação permanente desses valores.
As seguintes práticas de segurança são altamente recomendadas:
Dada a complexidade do uso de credenciais de origem executável, é recomendável usar os mecanismos suportados existentes (origem de arquivo/origem de URL) para fornecer credenciais de terceiros, a menos que elas não atendam aos seus requisitos específicos.
Agora você pode usar a biblioteca Auth para chamar recursos do Google Cloud de um provedor OIDC ou SAML.
Uma implementação personalizada de IdentityPoolSubjectTokenSupplier pode ser usada ao criar IdentityPoolCredentials para fornecer um token de assunto que pode ser trocado por um token de acesso do GCP. O fornecedor deve retornar um token de assunto válido e não expirado quando chamado pela credencial do GCP.
IdentityPoolCredentials não armazena em cache o token retornado, portanto, a lógica de cache deve ser implementada no fornecedor do token para evitar diversas solicitações para o mesmo token de assunto.
import java . io . IOException ;
public class CustomTokenSupplier implements IdentityPoolSubjectTokenSupplier {
@ Override
public String getSubjectToken ( ExternalAccountSupplierContext context ) throws IOException {
// Any call to the supplier will pass a context object with the requested
// audience and subject token type.
string audience = context . getAudience ();
string tokenType = context . getSubjectTokenType ();
try {
// Return a valid, unexpired token for the requested audience and token type.
// Note that IdentityPoolCredentials do not cache the subject token so
// any caching logic needs to be implemented in the token supplier.
return retrieveToken ( audience , tokenType );
} catch ( Exception e ) {
// If token is unavailable, throw IOException.
throw new IOException ( e );
}
}
private String retrieveToken ( string tokenType , string audience ) {
// Retrieve a subject token of the requested type for the requested audience.
}
}
CustomTokenSupplier tokenSupplier = new CustomTokenSupplier ();
IdentityPoolCredentials identityPoolCredentials =
IdentityPoolCredentials . newBuilder ()
. setSubjectTokenSupplier ( tokenSupplier ) // Sets the token supplier.
. setAudience (...) // Sets the GCP audience.
. setSubjectTokenType ( SubjectTokenTypes . JWT ) // Sets the subject token type.
. build ();
Onde está o público: //iam.googleapis.com/projects/$PROJECT_NUMBER/locations/global/workloadIdentityPools/$WORKLOAD_POOL_ID/providers/$PROVIDER_ID
Onde as seguintes variáveis precisam ser substituídas:
$PROJECT_NUMBER
: o número do projeto do Google Cloud.$WORKLOAD_POOL_ID
: o ID do pool de identidades da carga de trabalho.$PROVIDER_ID
: o ID do provedor.Os valores de público, URL de representação da conta de serviço e qualquer outro campo do construtor também podem ser encontrados gerando um arquivo de configuração de credencial com a CLI gcloud.
Uma implementação personalizada de AwsSecurityCredentialsSupplier pode ser fornecida ao inicializar AwsCredentials. Se fornecida, a instância AWSCredentials encaminhará ao fornecedor a recuperação das credenciais de segurança da AWS para troca por um token de acesso do GCP. O fornecedor deve retornar credenciais de segurança válidas e não expiradas da AWS quando chamado pela credencial do GCP.
AwsCredentials não armazena em cache as credenciais ou região de segurança da AWS retornadas, portanto, a lógica de armazenamento em cache deve ser implementada no fornecedor para evitar várias solicitações para os mesmos recursos.
class CustomAwsSupplier implements AwsSecurityCredentialsSupplier {
@ Override
AwsSecurityCredentials getAwsSecurityCredentials ( ExternalAccountSupplierContext context ) throws IOException {
// Any call to the supplier will pass a context object with the requested
// audience.
string audience = context . getAudience ();
try {
// Return valid, unexpired AWS security credentials for the requested audience.
// Note that AwsCredentials do not cache the AWS security credentials so
// any caching logic needs to be implemented in the credentials' supplier.
return retrieveAwsSecurityCredentials ( audience );
} catch ( Exception e ) {
// If credentials are unavailable, throw IOException.
throw new IOException ( e );
}
}
@ Override
String getRegion ( ExternalAccountSupplierContext context ) throws IOException {
try {
// Return a valid AWS region. i.e. "us-east-2".
// Note that AwsCredentials do not cache the region so
// any caching logic needs to be implemented in the credentials' supplier.
return retrieveAwsRegion ();
} catch ( Exception e ) {
// If region is unavailable, throw IOException.
throw new IOException ( e );
}
}
private AwsSecurityCredentials retrieveAwsSecurityCredentials ( string audience ) {
// Retrieve Aws security credentials for the requested audience.
}
private String retrieveAwsRegion () {
// Retrieve current AWS region.
}
}
CustomAwsSupplier awsSupplier = new CustomAwsSupplier ();
AwsCredentials credentials = AwsCredentials . newBuilder ()
. setSubjectTokenType ( SubjectTokenTypes . AWS4 ) // Sets the subject token type.
. setAudience (...) // Sets the GCP audience.
. setAwsSecurityCredentialsSupplier ( supplier ) // Sets the supplier.
. build ();
Onde está o público: //iam.googleapis.com/projects/$PROJECT_NUMBER/locations/global/workloadIdentityPools/$WORKLOAD_POOL_ID/providers/$PROVIDER_ID
Onde as seguintes variáveis precisam ser substituídas:
$PROJECT_NUMBER
: o número do projeto do Google Cloud.$WORKLOAD_POOL_ID
: o ID do pool de identidades da carga de trabalho.$PROVIDER_ID
: o ID do provedor.Os valores de público, URL de representação da conta de serviço e qualquer outro campo do construtor também podem ser encontrados gerando um arquivo de configuração de credencial com a CLI gcloud.
Ao criar uma configuração de credencial com federação de identidade de carga de trabalho usando representação de conta de serviço, você pode fornecer um argumento opcional para configurar o tempo de vida do token de acesso da conta de serviço.
Para gerar a configuração com vida útil do token configurável, execute o comando a seguir (este exemplo usa uma configuração da AWS, mas a vida útil do token pode ser configurada para todos os provedores de federação de identidade de carga de trabalho):
# Generate an AWS configuration file with configurable token lifetime.
gcloud iam workload-identity-pools create-cred-config
projects/ $PROJECT_NUMBER /locations/global/workloadIdentityPools/ $POOL_ID /providers/ $AWS_PROVIDER_ID
--service-account $SERVICE_ACCOUNT_EMAIL
--aws
--output-file /path/to/generated/config.json
--service-account-token-lifetime-seconds $TOKEN_LIFETIME
Onde as seguintes variáveis precisam ser substituídas:
$PROJECT_NUMBER
: o número do projeto do Google Cloud.$POOL_ID
: o ID do pool de identidades da carga de trabalho.$AWS_PROVIDER_ID
: o ID do provedor AWS.$SERVICE_ACCOUNT_EMAIL
: o e-mail da conta de serviço a ser representada.$TOKEN_LIFETIME
: a duração desejada do token de acesso da conta de serviço em segundos. A sinalização service-account-token-lifetime-seconds
é opcional. Se não for fornecido, o padrão será uma hora. O valor mínimo permitido é 600 (10 minutos) e o valor máximo permitido é 43200 (12 horas). Se for necessário um tempo de vida superior a uma hora, a conta de serviço deverá ser adicionada como um valor permitido em uma política da organização que impõe a restrição constraints/iam.allowServiceAccountCredentialLifetimeExtension
.
Observe que configurar um tempo de vida curto (por exemplo, 10 minutos) fará com que a biblioteca inicie todo o fluxo de troca de tokens a cada 10 minutos, o que chamará o provedor de tokens de terceiros mesmo que o token de terceiros não tenha expirado.
A federação de identidade da força de trabalho permite usar um provedor de identidade externo (IdP) para autenticar e autorizar uma força de trabalho (um grupo de usuários, como funcionários, parceiros e prestadores de serviços) usando o IAM, para que os usuários possam acessar os serviços do Google Cloud. A federação de identidade da força de trabalho amplia os recursos de identidade do Google Cloud para oferecer suporte ao logon único baseado em atributos e sem sincronização.
Com a federação de identidade da força de trabalho, sua força de trabalho pode acessar os recursos do Google Cloud usando um provedor de identidade externo (IdP) compatível com OpenID Connect (OIDC) ou SAML 2.0, como Azure Active Directory (Azure AD), Active Directory Federation Services (AD FS), Okta e outros.
Para acessar os recursos do Google Cloud de um provedor de identidade compatível com OpenID Connect (OIDC), são necessários os seguintes requisitos:
Siga as instruções detalhadas sobre como configurar a federação de identidades da força de trabalho.
Após configurar um provedor OIDC ou SAML 2.0, um arquivo de configuração de credencial precisa ser gerado. O arquivo de configuração de credenciais gerado contém metadados não confidenciais para instruir a biblioteca sobre como recuperar tokens de assunto externos e trocá-los por tokens de acesso do GCP. O arquivo de configuração pode ser gerado usando a CLI gcloud.
A biblioteca Auth pode recuperar tokens de assunto externos de um local de arquivo local (credenciais de origem de arquivo), de um servidor local (credenciais de origem de URL) ou chamando um executável (credenciais de origem de executável).
Credenciais de origem de arquivo Para credenciais de origem de arquivo, um processo em segundo plano precisa atualizar continuamente o local do arquivo com um novo token de assunto antes da expiração. Para tokens com vida útil de uma hora, o token precisa ser atualizado no arquivo a cada hora. O token pode ser armazenado diretamente como texto simples ou no formato JSON.
Para gerar uma configuração OIDC de origem de arquivo, execute o seguinte comando:
# Generate an OIDC configuration file for file-sourced credentials.
gcloud iam workforce-pools create-cred-config
locations/global/workforcePools/ $WORKFORCE_POOL_ID /providers/ $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
# Optional arguments for file types. Default is "text":
# --credential-source-type "json"
# Optional argument for the field that contains the OIDC credential.
# This is required for json.
# --credential-source-field-name "id_token"
--output-file=/path/to/generated/config.json
Onde as seguintes variáveis precisam ser substituídas:
$WORKFORCE_POOL_ID
: o ID do grupo de força de trabalho.$PROVIDER_ID
: o ID do provedor.$PATH_TO_OIDC_ID_TOKEN
: O caminho do arquivo usado para recuperar o token OIDC.$WORKFORCE_POOL_USER_PROJECT
: o número do projeto associado ao projeto do usuário dos grupos de força de trabalho.Para gerar uma configuração SAML de origem de arquivo, execute o seguinte comando:
# Generate a SAML configuration file for file-sourced credentials.
gcloud iam workforce-pools create-cred-config
locations/global/workforcePools/ $WORKFORCE_POOL_ID /providers/ $PROVIDER_ID
--credential-source-file= $PATH_TO_SAML_ASSERTION
--subject-token-type=urn:ietf:params:oauth:token-type:saml2
--workforce-pool-user-project= $WORKFORCE_POOL_USER_PROJECT
--output-file=/path/to/generated/config.json
Onde as seguintes variáveis precisam ser substituídas:
$WORKFORCE_POOL_ID
: o ID do grupo de força de trabalho.$PROVIDER_ID
: o ID do provedor.$PATH_TO_SAML_ASSERTION
: o caminho do arquivo usado para recuperar a asserção SAML codificada em base64.$WORKFORCE_POOL_USER_PROJECT
: o número do projeto associado ao projeto do usuário dos grupos de força de trabalho.Esses comandos geram o arquivo de configuração no arquivo de saída especificado.
Credenciais de origem de URL Para credenciais de origem de URL, um servidor local precisa hospedar um terminal GET para retornar o token OIDC. A resposta pode ser em texto simples ou JSON. Cabeçalhos de solicitação adicionais necessários também podem ser especificados.
Para gerar uma configuração de identidade da força de trabalho OIDC com origem em URL, execute o seguinte comando:
# Generate an OIDC configuration file for URL-sourced credentials.
gcloud iam workforce-pools create-cred-config
locations/global/workforcePools/ $WORKFORCE_POOL_ID /providers/ $PROVIDER_ID
--subject-token-type=urn:ietf:params:oauth:token-type:id_token
--credential-source-url= $URL_TO_RETURN_OIDC_ID_TOKEN
--credential-source-headers $HEADER_KEY = $HEADER_VALUE
--workforce-pool-user-project= $WORKFORCE_POOL_USER_PROJECT
--output-file=/path/to/generated/config.json
Onde as seguintes variáveis precisam ser substituídas:
$WORKFORCE_POOL_ID
: o ID do grupo de força de trabalho.$PROVIDER_ID
: o ID do provedor.$URL_TO_RETURN_OIDC_ID_TOKEN
: A URL do terminal do servidor local.$HEADER_KEY
e $HEADER_VALUE
: os pares chave/valor de cabeçalho adicionais para transmitir a solicitação GET para $URL_TO_GET_OIDC_TOKEN
, por exemplo, Metadata-Flavor=Google
.$WORKFORCE_POOL_USER_PROJECT
: o número do projeto associado ao projeto do usuário dos grupos de força de trabalho.Para gerar uma configuração SAML de origem URL, execute o seguinte comando:
# Generate a SAML configuration file for file-sourced credentials.
gcloud iam workforce-pools create-cred-config
locations/global/workforcePools/ $WORKFORCE_POOL_ID /providers/ $PROVIDER_ID
--subject-token-type=urn:ietf:params:oauth:token-type:saml2
--credential-source-url= $URL_TO_GET_SAML_ASSERTION
--credential-source-headers