Credenciais de perfil de instância usando o Spring Cloud

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.