O AWS SDK para Java 1.x entrou no modo de manutenção em 31 de julho de 2024 e o fim do suporte
Fornecer credenciais temporárias ao AWS SDK para Java
Para fazer solicitações à Amazon Web Services, você deve fornecer credenciais da AWS temporárias para que o AWS SDK para Java use ao chamar os serviços. Isso pode ser feito das seguintes maneiras:
-
Use a cadeia de fornecedores de credenciais padrão (recomendado).
-
Use um fornecedor de credenciais específico ou uma cadeia de fornecedores (ou crie a própria).
-
Forneça você mesmo as credenciais temporárias em código.
Usar a cadeia de fornecedores de credenciais padrão
Quando você inicializa um novo cliente de serviço sem fornecer argumentos, o AWS SDK para Java tenta encontrar credenciais temporárias usando a cadeia de fornecedores de credenciais padrão implementada pela classe DefaultAWSCredentialsProviderChain. A cadeia de fornecedores de credenciais padrão procura credenciais nesta ordem:
-
Variáveis de ambiente:
AWS_ACCESS_KEY_ID,AWS_SECRET_KEYouAWS_SECRET_ACCESS_KEYeAWS_SESSION_TOKEN. O AWS SDK para Java usa a classe EnvironmentVariableCredentialsProvider para carregar essas credenciais. -
Propriedades do sistema Java:
aws.accessKeyId,aws.secretKey(mas nãoaws.secretAccessKey) eaws.sessionToken. O AWS SDK para Java usa o SystemPropertiesCredentialsProvider para carregar essas credenciais. -
Credenciais de token de identidade da Web do ambiente ou contêiner.
-
O arquivo de perfis de credencial padrão: normalmente localizado em
~/.aws/credentials(local pode variar de acordo com a plataforma) e compartilhado por muitos dos SDKs da AWS e pela AWS CLI. O AWS SDK para Java usa a classe ProfileCredentialsProvider para carregar essas credenciais.Você pode criar um arquivo de credenciais usando o comando
aws configurefornecido pela AWS CLI ou criá-lo ao editar o arquivo com um editor de textos. Para obter mais informações sobre o formato do arquivo de credenciais, consulte Formato do arquivo de credenciais da AWS. -
Credenciais de contêiner do Amazon ECS: carregadas pelo Amazon ECS se a variável de ambiente
AWS_CONTAINER_CREDENTIALS_RELATIVE_URIestiver definida. O AWS SDK para Java usa a classe ContainerCredentialsProvider para carregar essas credenciais. É possível especificar o endereço IP para esse valor. -
Credenciais de perfil de instância: usadas em instâncias do EC2 e distribuídas pelo serviço de metadados do Amazon EC2. O AWS SDK para Java usa a classe InstanceProfileCredentialsProvider para carregar essas credenciais. É possível especificar o endereço IP para esse valor.
nota
As credenciais de perfil de instância serão usadas somente se
AWS_CONTAINER_CREDENTIALS_RELATIVE_URInão estiver definido. Consulte EC2ContainerCredentialsProviderWrapper para obter mais informações.
Configurar credenciais temporárias
Para usar as credenciais da AWS temporárias, elas devem estar definidas em pelo menos um dos locais anteriores. Para obter informações sobre como configurar credenciais, consulte os seguintes tópicos:
-
Para especificar credenciais no ambiente ou no arquivo de perfis de credencial padrão, consulte Configurar credenciais temporárias.
-
Para definir as propriedades de sistema do Java, consulte o tutorial Propriedades do sistema
no site Tutoriais do Java oficial. -
Para configurar e usar credenciais de perfil de instância com as instâncias do EC2, consulte Usar perfis do IAM para conceder acesso a recursos da AWS no Amazon EC2.
Configurar um perfil de credenciais alternativo
O AWS SDK para Java usa o perfil padrão por padrão, mas existem maneiras de personalizar de qual perfil se origina o arquivo de credenciais.
Você pode usar a variável de ambiente do perfil da AWS para alterar o perfil carregado pelo SDK.
Por exemplo, no Linux, no macOS ou no Unix, você executaria o comando a seguir a fim de alterar o perfil para myProfile.
export AWS_PROFILE="myProfile"
No Windows, você usaria o seguinte.
set AWS_PROFILE="myProfile"
Configurar a variável de ambiente AWS_PROFILE afeta o carregamento da credencial em todos os SDKs e ferramentas da AWS compatíveis oficialmente (inclusive a AWS CLI e o AWS Tools for Windows PowerShell). Para alterar somente o perfil de um aplicativo Java, você pode usar a propriedade do sistema aws.profile em seu lugar.
nota
A variável de ambiente tem precedência sobre a propriedade do sistema.
Configurar um local de arquivo de credenciais alternativo
O AWS SDK para Java carrega credenciais da AWS automaticamente do local de arquivo de credenciais padrão. No entanto, você também pode especificar o local configurando a variável de ambiente AWS_CREDENTIAL_PROFILES_FILE com o caminho completo para o arquivo de credenciais.
Você pode usar esse recurso para alterar temporariamente o local onde o AWS SDK para Java procura o arquivo de credenciais (por exemplo, configurando essa variável com a linha de comando). Ou você pode definir a variável de ambiente no ambiente de usuário ou sistema a fim de alterá-la para o usuário ou o sistema.
Para substituir o local do arquivo de credenciais padrão
-
Defina a variável de ambiente
AWS_CREDENTIAL_PROFILES_FILEcomo o local do arquivo de credenciais da AWS.-
No Linux, macOS ou Unix, use:
export AWS_CREDENTIAL_PROFILES_FILE=path/to/credentials_file -
No Windows, use:
set AWS_CREDENTIAL_PROFILES_FILE=path/to/credentials_file
-
Formato do arquivo Credentials
Seguindo as instruções na Configuração básica deste guia, seu arquivo de credenciais deve ter o seguinte formato básico.
[default] aws_access_key_id=<value from AWS access portal>aws_secret_access_key=<value from AWS access portal>aws_session_token=<value from AWS access portal>[profile2] aws_access_key_id=<value from AWS access portal>aws_secret_access_key=<value from AWS access portal>aws_session_token=<value from AWS access portal>
O nome do perfil é especificado entre colchetes (por exemplo, [default]), seguido dos campos configuráveis nesse perfil como pares de chave/valor. Você pode ter vários perfis no arquivo credentials, que podem ser adicionados ou editados usando-se aws configure --profile
PROFILE_NAME
para selecionar o perfil a ser configurado.
Você pode especificar campos adicionais, como metadata_service_timeout e metadata_service_num_attempts. Eles não são configuráveis com a CLI. Você deverá editar o arquivo manualmente se quiser usá-los. Para obter mais informações sobre o arquivo de configuração e os campos disponíveis, consulte Configurar a AWS Command Line Interface no Guia do usuário da AWS Command Line Interface.
Carregar credenciais
Depois que definir as credenciais temporárias, o SDK as carrega usando a cadeia de fornecedores de credenciais padrão.
Para isso, você instancia um cliente do AWS service (Serviço da AWS) sem fornecer explicitamente credenciais para o compilador da maneira a seguir.
AmazonS3 s3Client = AmazonS3ClientBuilder.standard() .withRegion(Regions.US_WEST_2) .build();
Especificar um fornecedor de credenciais ou uma cadeia de fornecedores
Você pode especificar um fornecedor de credenciais diferente do fornecedor de credenciais padrão usando o compilador de cliente.
Você fornece uma instância de um provedor de credenciais ou uma cadeia de fornecedores para um compilador de cliente que utiliza uma interface AWSCredentialsProvider como entrada. O exemplo a seguir mostra como usar credenciais de ambiente mais especificamente.
AmazonS3 s3Client = AmazonS3ClientBuilder.standard() .withCredentials(new EnvironmentVariableCredentialsProvider()) .build();
Para obter a lista completa de cadeias de fornecedores e fornecedores de credenciais fornecidos pelo AWS SDK para Java, consulte Todas as classes de implementação conhecidas em AWSCredentialsProvider.
nota
Você pode usar essa técnica para oferecer fornecedores de credenciais ou cadeias de fornecedores criados por você usando o fornecedor de credenciais que implementa a interface AWSCredentialsProvider ou por meio da subclasse da classe AWSCredentialsProviderChain.
Especificar explicitamente credenciais temporárias
Se a cadeia de credenciais padrão ou um fornecedor personalizado ou específico ou a cadeia de fornecedores não funcionar para o código, será possível definir credenciais fornecidas explicitamente. Se você tiver recuperado credenciais temporárias usando o AWS STS, use esse método para especificar as credenciais para acesso à AWS.
-
Instancie a classe BasicSessionCredentials e forneça a ela a chave de acesso da AWS, a chave secreta da AWS e o token de sessão da AWS que o SDK usará para a conexão.
-
Crie um AWSStaticCredentialsProvider com o objeto
AWSCredentials. -
Configure o compilador de cliente com o
AWSStaticCredentialsProvidere compilar o cliente.
Veja um exemplo a seguir.
BasicSessionCredentials awsCreds = new BasicSessionCredentials("access_key_id", "secret_key_id", "session_token"); AmazonS3 s3Client = AmazonS3ClientBuilder.standard() .withCredentials(new AWSStaticCredentialsProvider(awsCreds)) .build();