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
O bucket do S3 deve ter o mesmo nome do domínio, portanto, recomendamos que você verifique as regras de nomenclatura para buckets do Amazon S3.
Essa arquitetura de amostra não inclui recursos de monitoramento para a infraestrutura implantada. Se o seu caso de uso exigir monitoramento, considere adicionar os serviços de monitoramento da AWS.
Essa arquitetura de amostra não inclui validação de entradas. Se seu caso de uso exigir validação de entrada e um maior nível de segurança, considere usar AWS WAF para proteger sua API.
Essa arquitetura de amostra não inclui registro em log de acesso com o Application Load Balancer. Se o seu caso de uso exigir registro em log de acessos, considere habilitar os logs 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 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

O diagrama ilustra o seguinte:
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).
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.
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.
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.
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.
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
| Tarefa | Description | Habilidades 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:
| AWS DevOps, AWS geral |
Configure as variáveis. |
| AWS DevOps, AWS geral |
Implante a solução. |
| AWS DevOps, AWS geral |
| Tarefa | Description | Habilidades 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
| AWS DevOps, AWS geral |
Teste a funcionalidade do URL assinado previamente. |
| AWS DevOps, AWS geral |
Limpeza. | Certifique-se de remover os recursos quando não forem mais necessários:
| AWS DevOps, AWS geral |
Solução de problemas
| Problema | Soluçã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:
Hospedagem de sites estáticos HTTPS internos com ALB, S3 e PrivateLink
(AWS postagem do blog)