Conectando EC2 ao S3

12 Abril 2025 por Harerama Costa.

A AWS possui diversos serviços que, naturalmente, interagem entre si. No entanto, mesmo que eles façam parte da mesma conta e rede, ainda assim, é necessário que haja autenticação para que possam trocar informações. Ou seja, uma instância EC2 (Elastic Compute Cloud) só terá acesso aos arquivos do S3 (Simple Storage Service) mediante autenticação.

Talvez a primeira forma de autenticação que venha a sua mente, seja configurar o CLI (Command Line Interface) dentro da EC2 com uma credencial de longo prazo. Sim, vai funcionar e muitas pessoas se autenticam dessa forma. Porém, não é a forma recomendada pela AWS (Amazon Web Services) por questões de segurança. Isso porque, dessa forma, você terá um arquivo de texto com as credenciais expostas. Essa credencial terá as mesmas permissões do usuário do IAM (Identity and Access Management) em que ela esteja associada. E qualquer pessoa de posse dessa credencial poderá utilizá-la em qualquer ambiente e pelo tempo em que ela estiver ativa. Você pode até atualizá-la regularmente, mas será necessário fazer isso manualmente em cada instância EC2, o que é trabalhoso e propenso a erros.

Uma das formas recomendadas pela AWS e a que vou abordar nessa matéria é utilizar uma função (role) do IAM. Já expliquei sobre funções na matéria AWS IAM (Básico) - Autenticação e autorização.

Simplesmente vamos criar uma função com o menor privilégio possível que terá acesso apenas ao bucket onde estão os arquivos que a EC2 precisa. Dessa forma, teremos uma função com uma política que terá uma única permissão que é ler determinado bucket e seus objetos. Ela pode ser associada a qualquer instância EC2 e podemos atualizar as permissões da política para aumentar ou diminuir o acesso de forma prática afetando todos que a utilizam.


Passos de criação e utilização


Vamos criar um cenário hipotético em que o setor financeiro da empresa Eco Natura precisa acessar o arquivo do balanço financeiro que está no bucket de nome eco-natura-financeiro. Partindo do princípio de que a instância EC2 e o bucket já estão criados, então precisamos apenas criar a política e a função para o EC2.


Criar política

Como já sabemos o serviço IAM é responsável pelo gerenciamento das identidades e acesso aos serviços da AWS, então temos que acessar o IAM e depois ir em políticas (IAM -> Gerenciamento de acesso -> Políticas (Policies)).

  • 1. Escolher a opção de criar política
  • 2. Escolher a opção JSON (JavaScript Object Notation)
  • 3. Preencher as permissões conforme a imagem abaixo



  • 4. Escolher o nome da política, por exemplo, PoliticaLerBucketEspecifico
Essa permissão dá apenas acesso a listar e buscar os objetos do bucket eco-natura-financeiro, pois é o privilégio mínimo necessário para o cenário atual.


Criar função

Ainda dentro do serviço do IAM devemos agora ir em funções (IAM -> Gerenciamento de acesso -> Funções).

  • 1. Escolher a opção de criar perfil
  • 2. Informar que é um serviço da AWS que executará ações na conta
  • 3. Escolher o serviço EC2
  • 4. Adicionar a política PoliticaLerBucketEspecifico que acabamos de criar no passo de criação de política
  • 5. Escolher o nome da função, por exemplo, FuncaoFinanceiroEcoNatura
Essa função terá o acesso que demos na política PoliticaLerBucketEspecifico. Se quisermos aumentar ou diminuir o acesso de quem utiliza essa função, então devemos modificar as permissões da política.


Associar a função à EC2

Agora que temos a função criada, precisamos atribuí-la à instância EC2 para que ela possa ter acesso ao bucket eco-natura-financeiro do S3.

  • 1. Acessar o serviço do EC2 (EC2 -> Instâncias)
  • 2. Selecionar a instância que precisa acessar o bucket
  • 3. Ir em ações -> segurança -> modificar função do IAM, conforme imagem abaixo


  • 4. Escolher a função que criamos com o nome FuncaoFinanceiroEcoNatura, conforme imagem abaixo

A partir desse momento podemos acessar a instância via SSH (Secure Shell) e realizar os comandos conforme documentação do CLI da AWS para verificar que temos acesso ao bucket e aos objetos dele.


Verificando acesso



Vou detalhar cada comando da imagem acima para demonstrar o acesso que realizei.

  • 1. aws s3 ls s3://eco-natura-financeiro
  • Primeiro demonstrei que a EC2 não tem acesso ao S3 sem a função associada. O retorno informa que não foi encontrada nenhuma credencial configurada para utilização pelo CLI.

  • 2. aws s3 ls s3://eco-natura-financeiro
  • Associei a função FuncaoFinanceiroEcoNatura e realizei o mesmo comando que lista objetos do bucket para demonstrar que agora o objeto balanco_financeiro.txt é listado, ou seja, o acesso da EC2 ao S3 foi permitido por causa da função associada.

  • 3. ls
  • Com o comando de listar arquivos e diretórios do Linux é possível ver que não há arquivos no diretório

  • 4. aws s3 cp s3://eco-natura-financeiro/balanco_financeiro.txt balanco_financeiro_copia.txt
  • Esse comando CLI realiza a cópia do objeto balanco_financeiro.txt que está no S3 para a EC2 com o nome balanco_financeiro_copia.txt

  • 5. ls
  • Rodando novamente o comando para listar os arquivos do diretório atual, podemos ver que o download foi realizado com sucesso.

  • 6. cat balanco_financeiro_copia.txt
  • Com esse comando, podemos ver o conteúdo do arquivo que foi copiado do S3 para a instância EC2

Fonte: Documentação AWS IAM - https://docs.aws.amazon.com/pt_br/IAM/latest/UserGuide/introduction.html . Acessado em: 12 abril 2025.
Fonte: Referência de comandos AWS CLI - https://docs.aws.amazon.com/cli/latest/reference/s3/. Acessado em: 12 abril 2025.