Problema inicial
Tivemos a necessidade de acessar um recurso da AWS (mais específicamente uma tabela do DynamoDB), que estava na conta do time à partir de uma aplicação rodando dentro do System Lake (um PaaS interno da empresa), que fica em outra conta da AWS.
Explicando melhor a situação, alguns serviços da AWS, como Secrets Manager, DynamoDB, S3, entre alguns outros, necessitam que a aplicação se autentique na API da AWS para que possa acessar o recurso.
Quando executamos a aplicação em uma instância EC2 na mesma conta, basta que a role
desta instância tenha a permissão de acesso ao recurso. Porém quando a aplicação é executada fora desta conta (ou dentro de outra conta) essa solução não é tão simples.
Solução encontrada
Foi criado um usuário que teria acesso à tabela do DynamoDB, com credenciais (secret key e access id), para ser utilizado pela aplicação.
Código da criação do recurso e do usuário da aplicação
Abaixo, segue um resumo do código para a criação da tabela em si:
Aqui criamos o usuário da nossa aplicação
Já aqui, criamos as credenciais (access key e secret key) para o usuário criado:
E por último concedemos as permissões necessárias ao usuário da aplicação, que no caso eram referentes apenas ao acesso a uma tabela específica do DynamoDB
E para exibir as credenciais do usuário da aplicação:
Configuração da aplicação
Todo os SDKs da AWS utilizam algumas por padrão variáveis de ambiente específicas para sua configuração, caso elas existam, como é o caso das variáveis `AWS_SECRET_KEY`, `AWS_SECRET_ID` e `AWS_REGION`, que configuram as credenciais de acesso e a região onde os recursos utilizados se encontram. Referências para o SDK Java (os links a seguir são específicos para Java, mas pelo que pude observar parece ser um padrão para os SDKs em qualquer linguagem) estão aqui Working with AWS Credentials e aqui Set up AWS Credentials and Region for Development .
A aplicação em questão utiliza o Spring Data DynamoDB (referências em derjust/spring-data-dynamodb e DynamoDB in a Spring Boot Application Using Spring Data), que não foge à regra de configuração citada anteriormente, pois foi criado por cima do SDK da AWS.
Para configurar a aplicação propriamente dita, foi necessário apenas adicionar as variáveis de ambiente no container da aplicação.