Configure o acesso privado a um bucket do Amazon S3 por meio de um endpoint 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á.

Configure o acesso privado a um bucket do Amazon S3 por meio de um endpoint VPC

Criado por Martin Maritsch (AWS), Gabriel Rodriguez Garcia (), Shukhrat Khodjaev (AWS), Nicolas Jacob Baer (), Mohan Gowda AWS Purushothama () e Joaquin Rinaudo () AWS AWS AWS

Repositório de código: Private S3 VPCE

Ambiente: produção

Tecnologias: sem servidor

AWSserviços: Amazon API Gateway; Amazon S3; AmazonVPC; Elastic Load Balancing () ELB

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 por meio do Amazon API Gateway e de um endpoint de nuvem privada virtual (VPC) para o bucket S3. A AWS Lambda função gera arquivos pré-assinados URLs para download por meio do VPC endpoint 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 AWS Direct Connect de).

Limitações

  • O bucket do S3 deve ter o mesmo nome do domínio, por isso recomendamos que você verifique as regras de nomenclatura do bucket do Amazon S3.

  • Esse exemplo de arquitetura não inclui recursos de monitoramento para a infraestrutura implantada. Se seu caso de uso exigir monitoramento, considere adicionar serviços AWS de monitoramento.

  • Esse exemplo de arquitetura não inclui validação de entrada. Se seu caso de uso exigir validação de entrada e um maior nível de segurança, considere usá-lo AWS WAF para proteger seu API.

  • Esse exemplo de arquitetura não inclui o registro de acesso com o Application Load Balancer. Se seu caso de uso exigir registro de acesso, considere habilitar os registros de acesso do balanceador de carga.

Versões

  • Python versão 3.11 ou posterior

  • Terraform versão 1.6 ou posterior

Arquitetura

Pilha de tecnologias de destino

Os seguintes AWS serviços são usados na pilha de tecnologia de destino:

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

  • O Amazon API Gateway expõe recursos e endpoints para interagir com o bucket 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 Lambda é chamada pelo API Gateway.

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

  • O Application Load Balancer roteia o tráfego de API entrada para o Gateway ou para o VPC endpoint do bucket S3. Ele permite que os usuários da rede corporativa acessem recursos internamente.

  • VPCO endpoint do Amazon S3 permite a comunicação direta e privada entre recursos no Amazon S3 e VPC no Amazon S3 sem atravessar 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 o API e outros serviços.

Arquitetura de destino

Configurando o acesso privado a um bucket do S3 por meio de um endpoint 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 AWS Direct Connect conexão).

  2. O Application Load Balancer roteia o tráfego de API entrada para o Gateway para gerar dados pré-assinados URLs para download ou upload para o Amazon S3 ou para o endpoint do bucket do VPC S3. Em ambos os cenários, as solicitações são roteadas internamente e não precisam atravessar a Internet.

  3. APIO Gateway expõe recursos e endpoints para interagir com o bucket do S3. Neste exemplo, fornecemos um endpoint para baixar arquivos do bucket do S3, mas isso também pode ser estendido para fornecer a funcionalidade de upload.

  4. A função Lambda gera o pré-assinado URL para baixar 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 recebe o pré-assinado URL e o usa para baixar o arquivo do Amazon S3 usando o Application Load Balancer. O balanceador de carga inclui uma rota padrão para enviar tráfego que não é API destinado ao VPC endpoint do bucket S3.

  6. O VPC endpoint encaminha o preassinado URL com o nome de domínio personalizado para o bucket do S3. O bucket do S3 deve ter 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 um. 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 desse padrão usa IAMpermissões para controlar o acesso aoAPI. Qualquer pessoa que tenha IAM credenciais válidas pode ligar para o. API Se seu caso de uso exigir um modelo de autorização mais complexo, talvez você queira usar um mecanismo de controle de acesso diferente.

Épicos

TarefaDescriçãoHabilidades 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, Geral AWS

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, Geral AWS

Configure variáveis.

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

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

AWS DevOps, Geral AWS

Implemente a solução.

  1. Na terraform pasta, execute o Terraform e passe as variáveis que você personalizou:

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

AWS DevOps, Geral AWS
TarefaDescriçãoHabilidades 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, Geral AWS

Teste a URL funcionalidade pré-assinada.

  1. Envie uma solicitação ao Application Load Balancer para criar um arquivo pré-assinado URL para o teste usando awscurl:

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

    Essa etapa cria uma assinatura válida a partir de suas credenciais, que será validada pelo API Gateway.

  2. Analise o link da resposta que você recebeu da etapa anterior e abra o pré-assinado URL para baixar o arquivo.

AWS DevOps, Geral AWS

Limpeza.

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

terraform destroy
AWS DevOps, Geral AWS

Solução de problemas

ProblemaSolução

Os nomes de chaves de objetos do S3 com caracteres especiais, como sinais numéricos (#), quebram URL os parâmetros e causam erros.

Codifique URL os parâmetros corretamente e certifique-se de que o nome da chave do objeto S3 siga as diretrizes do Amazon S3.

Recursos relacionados

Amazon S3:

Amazon API Gateway:

Application Load Balancer: