View a markdown version of this page

Configuração do acesso privado a um bucket do Amazon S3 por meio de um endpoint da VPC - Recomendações da AWS

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Configuração do acesso privado a um bucket do Amazon S3 por meio de um endpoint da VPC

Martin Maritsch, Nicolas Jacob Baer, Gabriel Rodriguez Garcia, Shukhrat Khodjaev, Mohan Gowda Purushothama e Joaquin Rinaudo, Amazon Web Services

Resumo

No Amazon Simple Storage Service (Amazon S3), os URLs pré-assinados permitem que você compartilhe arquivos de tamanho arbitrário com os usuários-alvo. Por padrão, os Amazon S3 pré-assinados podem ser URLs acessados pela Internet dentro de um prazo de validade, o que os torna fáceis de usar. No entanto, ambientes corporativos geralmente exigem que o acesso ao Amazon S3 pré-assinado URLs seja limitado apenas a uma rede privada.

Esse padrão apresenta uma solução sem servidor para interagir com segurança com objetos do S3 usando URLs pré-assinados de uma rede privada sem passagem pela Internet. Na arquitetura, os usuários acessam um Application Load Balancer por meio de um nome de domínio interno. O tráfego é roteado internamente pelo Amazon API Gateway e por um endpoint da nuvem privada virtual (VPC) para o bucket do S3. A AWS Lambda função gera arquivos pré-assinados URLs para download por meio do endpoint VPC privado, o que ajuda a aumentar a segurança e a privacidade de dados confidenciais.

Pré-requisitos e limitações

Pré-requisitos

  • Uma VPC que inclui uma sub-rede implantada em uma Conta da AWS que está conectada à rede corporativa (por exemplo, por meio de). AWS Direct Connect

Limitações

Versões

  • Python versão 3.11 ou posterior

  • Terraform versão 1.6 ou posterior

Arquitetura

Pilha de tecnologias de destino

Os seguintes serviços da AWS fazem parte da pilha de tecnologia de destino:

  • O Amazon S3 é o serviço principal de armazenamento, usado para fazer upload, download e armazenar arquivos com segurança.

  • O Amazon API Gateway disponibiliza recursos e endpoints para interagir com o bucket do S3. Esse serviço desempenha um papel na geração de dados pré-assinados URLs para download ou upload.

  • AWS Lambdagera arquivos pré-assinados URLs para baixar arquivos do Amazon S3. A função do Lambda é acionada pelo API Gateway.

  • A Amazon VPC implanta recursos dentro de uma VPC para fornecer isolamento de rede. A VPC inclui sub-redes e tabelas de rotas para controlar o fluxo de tráfego.

  • O Application Load Balancer roteia o tráfego de entrada para o API Gateway ou para o endpoint da VPC do bucket do S3. Isso permite o acesso interno a recursos por parte de usuários da rede corporativa.

  • O endpoint da VPC para o Amazon S3 permite comunicação direta e privada entre os recursos na VPC e o Amazon S3, sem usar a internet pública.

  • AWS Identity and Access Management (IAM) controla o acesso aos AWS recursos. As permissões são configuradas para garantir interações seguras com a API e com outros serviços.

Arquitetura de destino

Configuração do acesso privado a um bucket do S3 por meio de um endpoint da VPC

O diagrama ilustra o seguinte:

  1. Os usuários da rede corporativa podem acessar o Application Load Balancer por meio de um nome de domínio interno. Supomos que exista uma conexão entre a rede corporativa e a sub-rede da intranet no Conta da AWS (por exemplo, por meio de uma Direct Connect conexão).

  2. O Application Load Balancer encaminha o tráfego de entrada para o API Gateway para gerar dados pré-assinados URLs para download ou upload para o Amazon S3 ou para o endpoint VPC do bucket do S3. Em ambos os cenários, as solicitações são tratadas internamente, sem a necessidade de usar a internet.

  3. O API Gateway disponibiliza recursos e endpoints para interagir com o bucket do S3. Neste exemplo, fornecemos um endpoint para download de arquivos do bucket do S3, mas a funcionalidade poderia ser ampliada para incluir uploads.

  4. A função do Lambda gera o URL assinado previamente para fazer o download de um arquivo do Amazon S3 usando o nome de domínio do Application Load Balancer em vez do domínio público do Amazon S3.

  5. O usuário obtém o URL assinado previamente e o usa para fazer o download do arquivo do Amazon S3 por meio do Application Load Balancer. O balanceador de carga inclui uma rota padrão para enviar o tráfego que não se destina à API para o endpoint da VPC do bucket do S3.

  6. O endpoint da VPC roteia o URL assinado previamente com o nome de domínio personalizado para o bucket do S3. É necessário que o bucket do S3 tenha o mesmo nome do domínio.

Automação e escala

Esse padrão usa o Terraform para implantar a infraestrutura do repositório de código em uma Conta da AWS.

Ferramentas

Ferramentas

  • O Python é uma linguagem de programação de computador de uso geral.

  • O Terraform é uma ferramenta de infraestrutura como código (IaC) HashiCorp que ajuda você a criar e gerenciar recursos na nuvem e no local.

  • AWS Command Line Interface (AWS CLI) é uma ferramenta de código aberto que ajuda você a interagir com AWS serviços por meio de comandos em seu shell de linha de comando.

Repositório de código

O código desse padrão está disponível em um GitHub repositório em https://github.com/aws-samples/private-s3-vpce.

Práticas recomendadas

A arquitetura de amostra para esse padrão usa permissões do IAM para controlar o acesso à API. Qualquer pessoa com credenciais válidas do IAM pode chamar a API. Se o seu caso de uso exigir um modelo de autorização mais complexo, talvez você precise usar um mecanismo de controle de acesso diferente.

Épicos

TarefaDescriptionHabilidades necessárias

Obtenha AWS credenciais.

Revise suas AWS credenciais e seu acesso à sua conta. Para obter instruções, consulte Configurações e configurações do arquivo de credenciais na AWS CLI documentação.

AWS DevOps, AWS geral

Clonar o repositório.

Clone o GitHub repositório fornecido com esse padrão:

git clone https://github.com/aws-samples/private-s3-vpce
AWS DevOps, AWS geral

Configure as variáveis.

  1. No seu computador, no GitHub repositório, abra a terraform pasta:

    cd terraform
  2. Abra o arquivo example.tfvars e personalize os parâmetros conforme suas necessidades.

AWS DevOps, AWS geral

Implante a solução.

  1. Na pasta terraform, execute o Terraform fornecendo as variáveis que você configurou:

    terraform apply -var-file="example.tfvars"
  2. Confirme se os recursos apresentados no diagrama da arquitetura foram implantados com êxito.

AWS DevOps, AWS geral
TarefaDescriptionHabilidades necessárias

Crie um arquivo de teste.

Faça upload de um arquivo para o Amazon S3 para criar um cenário de teste para o download do arquivo. Você pode usar o console do Amazon S3 ou o seguinte comando: AWS CLI

aws s3 cp /path/to/testfile s3://your-bucket-name/testfile
AWS DevOps, AWS geral

Teste a funcionalidade do URL assinado previamente.

  1. Envie uma solicitação para o Application Load Balancer a fim de criar um URL assinado previamente para o arquivo de teste usando awscurl:

    awscurl https://your-domain-name/api/get_url?key=testfile

    Nesta etapa, é gerada uma assinatura válida usando suas credenciais, a qual será verificada pelo API Gateway.

  2. Analise o link da resposta recebida na etapa anterior e abra o URL assinado previamente para fazer o download do arquivo.

AWS DevOps, AWS geral

Limpeza.

Certifique-se de remover os recursos quando não forem mais necessários:

terraform destroy
AWS DevOps, AWS geral

Solução de problemas

ProblemaSolução

Os nomes de chaves de objetos do S3 com caracteres especiais, como o símbolo de cerquilha (#), quebram os parâmetros da URL e causam erros.

Faça a codificação adequada dos parâmetros do URL e garanta que o nome da chave do objeto S3 esteja em conformidade com as diretrizes do Amazon S3.

Recursos relacionados

Amazon S3:

Amazon API Gateway:

Application Load Balancer: