Credenciais de perfil de instância usando o Spring Cloud
1. Introdução
Neste artigo rápido, vamos construir um aplicativo Spring Cloud que usa credenciais de perfil de instância para se conectar a um bucket S3.
2. Provisionando Nosso Ambiente de Nuvem
Os perfis de instância são um recurso da AWS que permite que as instâncias do EC2 se conectem a outros recursos da AWS com credenciais temporárias. Essas credenciais são de curta duração e são rotacionadas automaticamente pela AWS.
Os usuários podem solicitar credenciais temporárias apenas de instâncias do EC2. No entanto, podemos usar essas credenciais de qualquer lugar até que elas expirem.
Para obter mais ajuda especificamente eminstance profile configuration, verifique a documentação da AWS.
2.1. Desdobramento, desenvolvimento
Primeiro de tudo, precisamos de um ambiente da AWS que tenha a configuração apropriada.
Para o exemplo de código abaixo, precisamos levantar uma instância do EC2, um bucket do S3 e as funções apropriadas do IAM. Para fazer isso, podemos usarthe CloudFormation template no exemplo de código ou simplesmente manter esses recursos por conta própria.
2.2. Verificação
Em seguida, devemos garantir que nossa instância do EC2 possa recuperar credenciais do perfil da instância. Substitua<InstanceProfileRoleName> pelo nome real da função do perfil da instância:
curl http://169.254.169.254/latest/meta-data/iam/security-credentials/
Se tudo estiver configurado corretamente, a resposta JSON conterá as propriedadesAccessKeyId,SecretAccessKey,Token eExpiration.
3. Configurando Spring Cloud
Agora, para nosso aplicativo de amostra. Precisamos configurar o Spring Boot para usar perfis de instância, o que podemos fazer em nosso arquivo de configuração do Spring Boot:
cloud.aws.credentials.instanceProfile=true
E é isso! Se esse aplicativo Spring Boot for implantado em uma instância do EC2, cada cliente tentará usar automaticamente as credenciais do perfil da instância para se conectar aos recursos da AWS.
Isso ocorre porque o Spring Cloud usaEC2ContainerCredentialsProviderWrapper do SDK da AWS. Isso irá procurar as credenciais em ordem de prioridade,automatically ending with instance profile credentials if it can’t find any others in the system.
Se precisarmos especificar que o Spring Cloud use apenas perfis de instância, podemos instanciar nossa própria instânciaAmazonS3.
Podemos configurá-lo com umInstanceProfileCredentialsProvidere publicá-lo como um bean:
@Bean
public AmazonS3 amazonS3() {
InstanceProfileCredentialsProvider provider
= new InstanceProfileCredentialsProvider(true);
return AmazonS3ClientBuilder.standard()
.withCredentials(provider)
.build();
}
Isso substituirá a instância padrãoAmazonS3 fornecida pelo Spring Cloud.
4. Conectando-se ao nosso balde S3
Agora, podemos conectar-se ao nosso bucket S3 usando o Spring Cloud normalmente, mas sem a necessidade de configurar credenciais permanentes:
@Component
public class SpringCloudS3Service {
// other declarations
@Autowired
AmazonS3 amazonS3;
public void createBucket(String bucketName) {
// log statement
amazonS3.createBucket(bucketName);
}
}
Lembre-se de que, como os perfis de instância são emitidos apenas para instâncias EC2,this code only works when running on an EC2 instance.
Obviamente, podemos repetir o processo para qualquer serviço da AWS ao qual nossa instância do EC2 se conecte, incluindo EC2, SQS e SNS.
5. Conclusão
Neste tutorial, vimos como usar credenciais de perfil de instância com Spring Cloud. Além disso, criamos um aplicativo simples que se conecta a um bucket S3.
Como sempre, a fonte completa pode ser encontradaover on GitHub.