Fornecer credenciais no código usando o AWS SDK for Java 2.x
Se a cadeia de credenciais padrão, um provedor personalizado ou específico ou a cadeia de fornecedores não funcionar para seu aplicativo, você poderá fornecer as credenciais temporárias diretamente no código. Elas podem ser credenciais de perfil do IAM, conforme descrito acima, ou credenciais temporárias recuperadas do AWS Security Token Service (AWS STS). Se você recuperou credenciais temporárias usando o AWS STS, forneça-as a um cliente AWS service (Serviço da AWS) conforme mostrado no exemplo de código a seguir.
-
Assuma um perfil chamando
StsClient.assumeRole(). -
Crie um objeto StaticCredentialsProvider
e forneça o objeto AwsSessionCredentialsa ele. -
Configure o construtor de cliente de serviço com o
StaticCredentialsProvidere construa o cliente.
O exemplo a seguir cria um cliente de serviço do Amazon S3 usando credenciais temporárias retornadas pelo AWS STS para uma função assumida do IAM.
// The AWS IAM Identity Center identity (user) who executes this method does not have permission to list buckets. // The identity is configured in the [default] profile. public static void assumeRole(String roleArn, String roleSessionName) { // The IAM role represented by the 'roleArn' parameter can be assumed by identities in two different accounts // and the role permits the user to only list buckets. // The SDK's default credentials provider chain will find the single sign-on settings in the [default] profile. // The identity configured with the [default] profile needs permission to call AssumeRole on the STS service. try { Credentials tempRoleCredentials; try (StsClient stsClient = StsClient.create()) { AssumeRoleRequest roleRequest = AssumeRoleRequest.builder() .roleArn(roleArn) .roleSessionName(roleSessionName) .build(); AssumeRoleResponse roleResponse = stsClient.assumeRole(roleRequest); tempRoleCredentials = roleResponse.credentials(); } // Use the following temporary credential items for the S3 client. String key = tempRoleCredentials.accessKeyId(); String secKey = tempRoleCredentials.secretAccessKey(); String secToken = tempRoleCredentials.sessionToken(); // List all buckets in the account associated with the assumed role // by using the temporary credentials retrieved by invoking stsClient.assumeRole(). StaticCredentialsProvider staticCredentialsProvider = StaticCredentialsProvider.create( AwsSessionCredentials.create(key, secKey, secToken)); try (S3Client s3 = S3Client.builder() .credentialsProvider(staticCredentialsProvider) .build()) { List<Bucket> buckets = s3.listBuckets().buckets(); for (Bucket bucket : buckets) { System.out.println("bucket name: " + bucket.name()); } } } catch (StsException | S3Exception e) { logger.error(e.getMessage()); System.exit(1); } }
O seguinte conjunto de permissões definido no AWS IAM Identity Center permite que a identidade (usuário) execute as duas operações a seguir
-
A operação
GetObjectdo Amazon Simple Storage Service. -
A operação
AssumeRoledo AWS Security Token Service.
Sem assumir o perfil, o método s3.listBuckets() mostrado no exemplo falharia.
Política de permissões do perfil assumido
A política de permissões a seguir é anexada ao perfil assumido no exemplo anterior. Essa política de permissões permite listar todos os buckets na mesma conta do perfil.
Política de confiança do perfil assumido
A política de confiança a seguir é anexada ao perfil assumido no exemplo anterior. A política permite que o perfil seja assumido por identidades (usuários) em duas contas.