Cadeia de fornecedores de credenciais padrão no AWS SDK for Java 2.x
A cadeia de provedores de credenciais padrão no AWS SDK for Java 2.x pesquisa automaticamente as credenciais da AWS em uma sequência predefinida de locais, permitindo que as aplicações se autentiquem com Serviços da AWS sem especificar explicitamente as origens das credenciais.
A cadeia de fornecedores de credenciais padrão é implementada pela classe DefaultCredentialsProvider
Para usar a cadeia de provedores de credenciais padrão para fornecer credenciais temporárias, crie um compilador de clientes de serviço, mas não especifique um provedor de credenciais. O trecho de código a seguir cria um DynamoDbClient que usa a cadeia de provedores de credenciais padrão para localizar e recuperar as configurações.
// Any external Region configuration is overridden. // The SDK uses the default credentials provider chain because no specific credentials provider is specified. Region region = Region.US_WEST_2; DynamoDbClient ddb = DynamoDbClient.builder() .region(region) .build();
Ordem de recuperação das configurações de credenciais
A cadeia de fornecedores de credenciais padrão do SDK para Java 2.x pesquisa a configuração em seu ambiente usando uma sequência predefinida.
-
Propriedades do sistema Java
-
O SDK usa a classe SystemPropertyCredentialsProvider
para carregar credenciais temporárias das propriedades do sistema Java aws.accessKeyId,aws.secretAccessKeyeaws.sessionToken.nota
Para mais informações sobre como definir as propriedades de sistema do Java, consulte o tutorial Propriedades do sistema
no site Tutoriais do Java oficial.
-
-
Variáveis de ambiente
-
O SDK usa a classe EnvironmentVariableCredentialsProvider
para carregar credenciais temporárias das variáveis de ambiente AWS_ACCESS_KEY_ID,AWS_SECRET_ACCESS_KEYeAWS_SESSION_TOKEN.
-
-
Token de identidade da web e ARN do perfil do IAM
-
O SDK usa a classe WebIdentityTokenFileCredentialsProvider
para carregar credenciais assumindo um perfil usando um token de identidade da web. -
O provedor de credenciais procura as seguintes variáveis de ambiente ou propriedades do sistema de JVM:
-
AWS_WEB_IDENTITY_TOKEN_FILE oraws.webIdentityTokenFile -
AWS_ROLE_ARNouaws.roleArn -
AWS_ROLE_SESSION_NAMEouaws.roleSessionName(opcional)
-
-
Depois que o SDK adquire os valores, ele chama o AWS Security Token Service (STS) e usa as credenciais temporárias que retorna para assinar as solicitações.
-
Ambientes de runtime, como o Amazon Elastic Kubernetes Service (EKS), disponibilizam automaticamente tokens de identidade da web para AWS SDKs, permitindo que as aplicações obtenham credenciais temporárias da AWS.
-
-
Os arquivos
credentialseconfigcompartilhados-
O SDK usa o ProfileCredentialsProvider
para carregar as configurações de login único do IAM Identity Center ou credenciais temporárias do perfil [default]nos arquivoscredentialseconfigcompartilhados.O Guia de referência de AWS SDKs e ferramentas tem informações detalhadas sobre como o SDK para Java funciona com o token de login único do IAM Identity Center para obter credenciais temporárias que o SDK usa para chamar Serviços da AWS.
nota
Os arquivos
credentialseconfigsão compartilhados por vários AWS SDKs e ferramentas. Para obter mais informações, consulte Os arquivos .aws/credentials e .aws/config no Guia de referência de AWS SDKs e ferramentas. -
Como um perfil nos arquivos de
credentialseconfigcompartilhados pode conter muitos conjuntos diferentes de configurações, oProfileCredentialsProviderdelega a uma série de outros provedores para procurar as configurações no perfil[default]:-
Credenciais básicas (classe
StaticCredentialsProvider): quando o perfil contémaws_access_key_ideaws_secret_access_key. -
Credenciais de sessão (classe
StaticSessionCredentialsProvider): quando o perfil contémaws_access_key_id,aws_secret_access_keyeaws_session_token. -
Credenciais de processo (classe
ProcessCredentialsProvider): quando o perfil contémcredential_process. -
Credenciais de SSO (classe
SsoCredentialsProvider): quando o perfil contém propriedades relacionadas ao SSO, comosso_role_nameesso_account_id. -
Credenciais de token de identidade da web (classe
WebIdentityTokenCredentialsProvider): quando o perfil contémrole_arneweb_identity_token_file. -
Credenciais baseadas em perfis com perfil de origem (classe
StsAssumeRoleCredentialsProvider): quando o perfil contémrole_arnesource_profile. -
Credenciais baseadas em perfis com origem de credenciais (classe
StsAssumeRoleWithSourceCredentialsProvider): quando o perfil contémrole_arnecredential_source.-
Quando
credential_source = Environment: é usada uma cadeia deSystemPropertyCredentialsProvidereEnvironmentVariableCredentialsProvider -
Quando
credential_source = Ec2InstanceMetadata: é usadoInstanceProfileCredentialsProvider -
Quando
credential_source = EcsContainer: é usadoContainerCredentialsProvider
-
-
-
-
Credenciais de contêiner do Amazon ECS
-
O SDK usa a classe ContainerCredentialsProvider
para carregar credenciais temporárias usando as seguintes variáveis de ambiente: -
AWS_CONTAINER_CREDENTIALS_RELATIVE_URIouAWS_CONTAINER_CREDENTIALS_FULL_URI -
AWS_CONTAINER_AUTHORIZATION_TOKEN_FILEouAWS_CONTAINER_AUTHORIZATION_TOKEN
-
O agente de contêiner do ECS define automaticamente a variável de ambiente
AWS_CONTAINER_CREDENTIALS_RELATIVE_URI, que aponta para o endpoint de credenciais do ECS. As outras variáveis de ambiente geralmente são definidas em cenários específicos em que o endpoint padrão da credencial do ECS não é usado. -
-
Amazon EC2credenciais fornecidas pelo perfil do IAM da instância
-
O SDK usa a classe InstanceProfileCredentialsProvider
para carregar credenciais temporárias do serviço de metadados Amazon EC2.
-
-
Se o SDK não conseguir encontrar as configurações necessárias por meio de todas as etapas listadas acima, ele lançará uma exceção com uma saída semelhante à seguinte:
software.amazon.awssdk.core.exception.SdkClientException: Unable to load credentials from any of the providers in the chain AwsCredentialsProviderChain(credentialsProviders=[SystemPropertyCredentialsProvider(), EnvironmentVariableCredentialsProvider(), WebIdentityTokenCredentialsProvider(), ProfileCredentialsProvider(), ContainerCredentialsProvider(), InstanceProfileCredentialsProvider()])
Usar o DefaultCredentialsProvider no código
Você pode usar explicitamente a cadeia de provedores de credenciais padrão no código. Funcionalmente, isso equivale a você não especificar nenhum provedor de credenciais, já que o SDK usa DefaultCredentialsProvider por padrão. No entanto, o uso explícito pode tornar seu código mais legível e autodocumentado. Isso mostra claramente sua intenção de usar a cadeia de credenciais padrão.
import software.amazon.awssdk.auth.credentials.DefaultCredentialsProvider; import software.amazon.awssdk.regions.Region; import software.amazon.awssdk.services.s3.S3Client; public class ExplicitDefaultCredentialsExample { public static void main(String[] args) { // Explicitly create the DefaultCredentialsProvider. DefaultCredentialsProvider defaultCredentialsProvider = DefaultCredentialsProvider .builder().build(); // Use it with any service client. S3Client s3Client = S3Client.builder() .region(Region.US_WEST_2) .credentialsProvider(defaultCredentialsProvider) .build(); // Now you can use the client with the default credentials chain. s3Client.listBuckets(); } }
Ao criar o provedor de credenciais padrão, você pode fornecer mais configurações:
DefaultCredentialsProvider customizedProvider = DefaultCredentialsProvider.builder() .profileName("custom-profile") // Use a specific profile if the chain gets to the `ProfileCredentialsProvider` stage. .asyncCredentialUpdateEnabled(true) // Enable async credential updates. .build();
Essa abordagem oferece mais controle e, ao mesmo tempo, fornece a conveniência da cadeia de credenciais padrão.