Credenciais em instâncias EC2 (IAM Role)

Francisco Edilton
3 min readOct 24, 2017

--

Com a enorme quantidade de recursos que AWS possui, mais o que vem por ai (eles não param :O), naturalmente nossas aplicações e servidores cada vez mais fazem chamadas aos serviços e API da AWS.

Para quem usa AWSCLI o caminho mais natural é rodar o comando:

aws configure

E colocar as credenciais.
Para quem programa as credenciais costumam ficar no código (hard coded) ou em algum arquivo de configuração.

Porém quando precisamos trocar essas credenciais o trabalho deixa de ser trivial. Pois tem credencial em ambiente de desenvolvimento, Q&A, produção e por ai vai.

Para facilitar nossa vida a AWS permite que a gente atribua a credencial a uma instância EC2. Assim não precisamos nos preocupar com credenciais armazenadas na máquina ou na aplicação. E a AWS se encarrega de rotacionar essas chaves diversas vezes por dia.

Vou fazer um passo a passo de como você pode começar a utilizar esse recurso.

Vamos criar uma policy IAM que pode fazer download de tudo no S3:

Temos três opções, copiar uma existente, gerar uma policy ou criar uma. Neste caso vamos criar uma, clique em Policy Generator.

Em AWS Service escolha Amazon S3 , em ações escolha SOMENTE GetObject em Amazon Resource Name coloque um *:

Sua tela ficará assim:

Clique em Add Statement:

Pronto, agora coloque um nome na sua policy e continue:

Agora vamos criar uma Role para a nossa instância EC2, escolha AWS Service:

Em seguinte EC2 e EC2 novamente:

Escolha a policy criada acima:

Dê um nome para a Role e salve:

Agora podemos criar uma instância nova e durante o processo de criação adicionar uma role:

Ou, a partir de fevereiro de 2017, podemos alterar a Role de uma instância já existente:

E Escolher a Role:

Pronto, a partir de agora sua instância tem a permissão de fazer download de qualquer objeto em qualquer Bucket S3 da sua conta. Isso tudo, sem você precisar fazer configuração de AWS CLI e/ou colocar credenciais no código.

IDÉIA: Caso você pretenda rodar isso em produção, recomendo que não deixe o ARN com *, coloque o ARN do Bucket S3 desejado e seu servidor terá somente a permissão de baixar objetos do Bucket escolhido. Que tal testar isso?

Espero ter ajudado a esclarecer o assunto. Caso tenha alguma dúvida, escreve aqui em baixo. Caso esteja testando, não esqueça de remover os recursos criados.

--

--