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
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 AWS Direct Connect conexão).
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.
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.
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.
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.
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
Tarefa | Descrição | 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, Geral AWS |
Clonar o repositório. | Clone o GitHub repositório fornecido com esse padrão:
| AWS DevOps, Geral AWS |
Configure variáveis. |
| AWS DevOps, Geral AWS |
Implemente a solução. |
| AWS DevOps, Geral AWS |
Tarefa | Descrição | 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, Geral AWS |
Teste a URL funcionalidade pré-assinada. |
| AWS DevOps, Geral AWS |
Limpeza. | Certifique-se de remover os recursos quando eles não forem mais necessários:
| AWS DevOps, Geral AWS |
Solução de problemas
Problema | Soluçã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:
Hospedagem de sites HTTPS estáticos internos comALB, S3 e PrivateLink
(postagem AWS do blog)