View a markdown version of this page

Consolidação da geração de URLs assinados previamente do Amazon S3 e o download de objetos por meio de um endpoint associado a endereços IP estáticos - 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á.

Consolidação da geração de URLs assinados previamente do Amazon S3 e o download de objetos por meio de um endpoint associado a endereços IP estáticos

Song Jin, Eunhye Jo e Jun Soung Lee, Amazon Web Services

Resumo

Esse padrão simplifica o acesso ao Amazon Simple Storage Service (Amazon S3) criando um padrão seguro e personalizado para downloads de objetos. URLs A solução fornece um único endpoint com um domínio exclusivo e endereços IP estáticos. É voltada para clientes que precisam consolidar tanto endpoints de API quanto do Amazon S3 sob um domínio unificado com endereços IP estáticos. O caso de uso consiste em usuários que adotam uma política de firewall com lista de permissões de IPs e domínios, restringindo o acesso à API a domínios e endereços IP específicos.

A arquitetura emprega chaves Serviços da AWS, incluindo AWS Global Accelerator Amazon API Gateway AWS Lambda, Application Load Balancer AWS PrivateLink e Amazon S3. Esse design centraliza a API para gerar o endpoint pré-assinado URLs e o Amazon S3 em um único domínio, vinculado a um acelerador com dois endereços IP estáticos. Consequentemente, os usuários podem facilmente solicitar objetos pré-assinados do Amazon S3 URLs e baixá-los por meio de um endpoint de domínio unificado com endereços IP estáticos.

Essa arquitetura é especialmente útil para clientes com políticas rigorosas ou requisitos de conformidade, como os dos setores público, médico e financeiro.

Pré-requisitos e limitações

Pré-requisitos

  • Um ativo Conta da AWS

  • Uma zona hospedada pública para o seu domínio personalizado

  • Um domínio importado em AWS Certificate Manager (ACM) no Região da AWS de sua escolha

Limitações

  • O bucket do Amazon S3 deve ter um nome que coincida com o nome de domínio do endpoint. Esse requisito garante que o endpoint do Amazon S3 possa ser disponibilizado por meio de um único endpoint de API.

  • O nome de domínio personalizado usado no API Gateway deve estar alinhado com o nome de domínio do endpoint único da API.

  • Alguns Serviços da AWS não estão disponíveis em todos Regiões da AWS. Para conferir a disponibilidade de uma região, consulte AWS Services by Region. Para endpoints específicos, consulte Service endpoints and quotas e clique no link correspondente ao serviço desejado.

Arquitetura

O diagrama apresentado a seguir ilustra a arquitetura de destino e o fluxo de trabalho para este padrão.

Componentes e fluxo de trabalho para geração de URL assinado previamente e download de objetos.

O diagrama ilustra o seguinte conceito e fluxo de trabalho:

  1. Um usuário inicia uma solicitação para gerar um URL pré-assinado usando o endpoint personalizado servido por meio do AWS Global Accelerator nome de domínio personalizado e os endereços IP associados.

  2. Uma função do Lambda gera o URL assinado previamente e direcionado ao endpoint personalizado. A resposta consiste em um redirecionamento 301 que contém o URL assinado previamente gerado. Por meio do URL assinado previamente e redirecionado, o usuário realiza o download do objeto automaticamente pelo endpoint personalizado que é fornecido pelo Global Accelerator.

Os componentes da arquitetura geral para a geração de URL assinado previamente e o fluxo de download de objetos são os seguintes:

  • Provisionamento de endereços IP estáticos pelo Global Accelerator.

  • Registro do alias do acelerador como um registro A na zona hospedada pública do Amazon Route 53 com o nome de domínio personalizado.

  • Criação de um bucket do Amazon S3 com um nome de bucket que corresponda ao nome de domínio personalizado registrado.

  • Criação de endpoints da VPC para o API Gateway e para o serviço Amazon S3.

  • Configuração de um Application Load Balancer voltado para uso interno, conectado ao Global Accelerator.

  • Atribuição de um domínio personalizado para o API Gateway, com certificado do ACM associado.

  • Implantação de um API Gateway privado integrado com uma função do Lambda.

  • A função Lambda é equipada com uma função AWS Identity and Access Management (IAM) anexada (com GetObjectpermissões).

Ferramentas

Serviços da AWS

  • O Amazon API Gateway ajuda você a criar, publicar, manter, monitorar e proteger REST, HTTP e WebSocket APIs em qualquer escala.

  • Os Application Load Balancers distribuem o tráfego de entrada do aplicativo em vários destinos, como instâncias do Amazon Elastic Compute Cloud (Amazon EC2), em várias zonas de disponibilidade.

  • AWS Certificate Manager (ACM) ajuda você a criar, armazenar e renovar certificados e chaves SSL/TLS X.509 públicos e privados que protegem seus AWS sites e aplicativos.

  • AWS Cloud Development Kit (AWS CDK)é uma estrutura de desenvolvimento de software que ajuda você a definir e provisionar Nuvem AWS infraestrutura em código.

  • O AWS Global Accelerator é um serviço global com suporte para endpoints em várias Regiões da AWS. Você pode criar aceleradores que direcionam o tráfego para endpoints ideais na rede AWS global. Isso melhora a disponibilidade e o desempenho de seus aplicativos da Internet que são usados por um público global.

  • AWS Identity and Access Management (IAM) ajuda você a gerenciar com segurança o acesso aos seus AWS recursos controlando quem está autenticado e autorizado a usá-los.

  • O AWS Lambda é um serviço de computação que ajuda a executar código sem exigir provisionamento ou gerenciamento de servidores. Ele executa o código somente quando necessário e dimensiona automaticamente, assim, você paga apenas pelo tempo de computação usado.

  • AWS PrivateLinkajuda você a criar conexões unidirecionais e privadas de suas nuvens privadas virtuais (VPCs) para serviços fora da VPC.

  • O Amazon Route 53 é um serviço web de DNS altamente disponível e escalável.

  • O Amazon Simple Storage Service (Amazon S3) é um serviço de armazenamento de objetos baseado na nuvem que ajuda você a armazenar, proteger e recuperar qualquer quantidade de dados.

Outras ferramentas

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

Repositório de código

Você pode implantar esse padrão usando o AWS CDK ou o Terraform de acordo com sua preferência. A seção Épicos contém instruções para ambos os métodos de implantação. O código desse padrão está disponível nos seguintes GitHub repositórios:

Práticas recomendadas

  • Para reforçar a segurança no ambiente de produção, é fundamental implementar mecanismos de autorização, como o Amazon Cognito, para restringir o acesso à API de geração PresignedUrl.

  • Respeite o princípio de privilégio mínimo, garantindo somente as permissões estritamente necessárias para a execução de uma tarefa. Para obter mais informações, consulte Concessão de privilégio mínimo e Práticas recomendadas de segurança na documentação do IAM.

Épicos

TarefaDescriptionHabilidades necessárias

Defina qual será o nome de domínio.

Decida qual nome de domínio público será usado para o endpoint unificado do Amazon S3. O nome de domínio também é usado como o nome do bucket do Amazon S3.

Administrador da AWS e administrador de rede

Crie uma zona hospedada pública.

Crie uma zona hospedada pública no Amazon Route 53. O nome de domínio deve corresponder ao nome de domínio usado no API Gateway.

Administrador da AWS e administrador de rede

Providencie um certificado SSL.

Use AWS Certificate Manager (ACM) para solicitar ou importar um certificado SSL para o domínio do seu aplicativo web.

Administrador da AWS e administrador de rede
TarefaDescriptionHabilidades necessárias

Configure o ambiente de desenvolvimento do Terraform.

Para configurar o ambiente de desenvolvimento, realize as seguintes ações:

  1. Instale o Terraform na versão 1.0 ou em versões posteriores.

  2. Clone o repositório GitHub s3- presignedurl-staticips-endpoint-with -terraform executando o seguinte comando em uma janela de terminal:

    git clone https://github.com/aws-samples/s3-presignedurl-staticips-endpoint-with-terraform.git

Administrador da AWS, administrador de nuvem

Modifique os arquivos .tfvars e provider.tf.

  1. Crie os arquivos .tfvars necessários: crie os arquivos apg.tfvars nos diretórios 1.vpc_alb_ga e 2.apigw_s3_lambda. Esses arquivos conterão os valores de variáveis que são específicos para o seu ambiente.

    • Para 1.vpc_alb_ga/apg.tfvars, crie um arquivo com o seguinte modelo:

      hcl environment_name = "test" domain = "your-domain.com" s3_bucket_prefix = "your-bucket-prefix" aws_region = "ap-northeast-2" # Change to your preferred region
    • Para 2.apigw_s3_lambda/apg.tfvars, crie um arquivo com o seguinte modelo (entretanto, você precisará atualizar o vpc_id após concluir a etapa 1):

      hcl vpc_id = "vpc-xxxxxxxxx" # Update this with the VPC ID output from step 1 environment_name = "test" domain = "your-domain.com" s3_bucket_prefix = "your-bucket-prefix" aws_region = "ap-northeast-2" # Change to your preferred region
  2. Modifique os provider.tf arquivos Nas 2.apigw_s3_lambda pastas 1.vpc_alb_ga e, edite os provider.tf arquivos para que correspondam à sua AWS configuração local:

    hcl provider "aws" { region = "ap-northeast-2" # Change to your preferred region profile = "apg" # Change to your AWS profile name }

Observe o seguinte:

  • Substitua os valores de espaço reservado nos arquivos .tfvars pelos valores reais.

  • Após concluir a primeira implantação do Terraform (1.vpc_alb_ga), atualize o valor de vpc_id em 2.apigw_s3_lambda/apg.tfvars com a ID da VPC obtida na saída.

  • Certifique-se de que o nome AWS do seu perfil no provider.tf arquivo corresponda a um perfil existente no seu ~/.aws/credentials arquivo.

  • O valor do domínio deve corresponder ao domínio da sua zona hospedada no Route 53.

  • O s3_bucket_prefix combinado com o domínio formará o nome do bucket do Amazon S3 (por exemplo: your-bucket-prefix.your-domain.com).

  • Se você alterar aws_region, talvez seja necessário atualizar também as zonas de disponibilidade definidas diretamente nos arquivos main.tf para que correspondam à Região da AWS escolhida.

Administrador da AWS, administrador de nuvem

Provisione os recursos de rede.

Para provisionar recursos de rede, execute os seguintes comandos:

cd ./2.vpc_alb_ga terraform init terraform plan --var-file=apg.tfvars terraform apply --var-file=apg.tfvars

Durante a execução do comando apply , digite sim quando solicitado.

Administrador da AWS, administrador de nuvem

Provisione o API Gateway, o Amazon S3 e o Lambda.

Para provisionar recursos de rede, use os seguintes comandos:

cd ./2.apigw_s3_lambda terraform init terraform plan --var-file=apg.tfvars terraform apply --var-file=apg.tfvars
Administrador da AWS, administrador de nuvem
TarefaDescriptionHabilidades necessárias

Configure o ambiente AWS CDK de desenvolvimento.

Para configurar o ambiente de desenvolvimento, realize as seguintes ações:

  1. Instale AWS CDK o.

  2. Clone o repositório GitHub s3- presignedurl-staticips-endpoint-with -cdk executando o seguinte comando em uma janela de terminal:

    git clone https://github.com/aws-samples/s3-presignedurl-staticips-endpoint-with-cdk.git

Administrador da AWS, administrador de nuvem

Defina as configurações de domínio no arquivo config/index.ts.

Para editar as opções da variável constante, use os seguintes comandos:

export const options = { certificateArn: '{arn of the acm which created before}', dnsAttr: { zoneName: '{public hosted zone name}', hostedZoneId: 'hosted zone Id', }, domainNamePrefix: '{Prefix for the domain}', presignPath: 'presign', objectsPath: 'objects', };

Nos comandos, substitua cada espaço reservado pelas suas próprias informações:

  • Substitua '{arn of the acm which created before}' pelo nome do recurso da Amazon (ARN) do certificado ACM.

  • Substitua '{public hosted zone name}' pelo nome do domínio.

  • Substitua 'hosted zone Id' pela ID da zona hospedada no Route 53.

  • Substitua '{Prefix for the domain}' pelo prefixo de domínio que você deseja usar.

  • Opcionalmente, modifique os caminhos 'presign' e 'objects', se necessário, para o seu caso de uso específico.

Administrador da AWS, administrador de nuvem

Implante as pilhas.

Para implantar duas pilhas, uma para a nuvem privada virtual (VPC) e outra para a aplicação, use o seguinte comando:

$ npm install $ cdk synth $ cdk deploy --all
Administrador da AWS, administrador de nuvem
TarefaDescriptionHabilidades necessárias

Verifique os endereços IP do endpoint.

Para verificar se o domínio deste padrão conta com endereços IP estáticos, use o seguinte comando:

nslookup ${s3-bucket-prefix}.${domain}
Administrador de rede

Faça o upload de um arquivo de teste que você poderá baixar posteriormente.

Faça o upload do arquivo de teste para a pasta '/objects' no bucket do Amazon S3.

Administrador da AWS, administrador de nuvem

Invoque a API para gerar um URL assinado previamente.

Para gerar um URL assinado previamente, acesse o URL por meio de um navegador ou de um cliente de API (por exemplo, o Postman) usando o seguinte formato:

https://${s3-bucket-prefix}.${domain}/presign/objects/${uploaded-filename}

Substitua os valores de espaço reservado em ${s3-bucket-prefix} e ${domain} pelos valores que você definiu nas etapas anteriores.

Proprietário do App

Verifique o resultado.

O resultado esperado é a obtenção do código de status de redirecionamento 301 (Movido permanentemente). Essa resposta conterá o URL assinado previamente, que deverá iniciar automaticamente o download do arquivo de teste.

Engenheiro de testes
TarefaDescriptionHabilidades necessárias

Remova os recursos do API Gateway, do Amazon S3 e do Lambda.

Para excluir recursos, use os seguintes comandos:

cd ./2.apigw_s3_lambda terraform init terraform plan --destroy --var-file=apg.tfvars terraform destroy --var-file=apg.tfvars
Administrador da AWS, administrador de nuvem

Remova os recursos de rede.

Para excluir recursos de rede, use os seguintes comandos:

cd ./1.vpc_alb_ga terraform init terraform plan --destroy --var-file=apg.tfvars terraform destroy --var-file=apg.tfvars
Administrador da AWS, administrador de nuvem
TarefaDescriptionHabilidades necessárias

Remova as pilhas.

Para remover as pilhas da VPC e da aplicação, use o seguinte comando:

$ cdk destroy --all
Administrador da AWS, administrador de nuvem

Esvazie e exclua os buckets do Amazon S3.

Esvazie e exclua o bucket de objetos do Amazon S3 e o bucket de logs do Amazon S3 que não são excluídos por padrão.

Os nomes dos buckets do Amazon S3 são ${s3-bucket-prefix}.${domain} e ${s3-bucket-prefix}.${domain}-logs.

Se você preferir usar a AWS Command Line Interface (AWS CLI) para excluir os buckets, execute os seguintes comandos:

$ aws s3 rm s3://${s3-bucket-prefix}.${domain} --recursive $ aws s3 rb s3://${s3-bucket-prefix}.${domain} --force $ aws s3 rm s3://${s3-bucket-prefix}.${domain}-logs --recursive $ aws s3 rb s3://${s3-bucket-prefix}.${domain}-logs --force

Substitua ${s3-bucket-prefix} e ${domain} pelos valores que você definiu nas etapas anteriores.,/p>

Administrador da AWS, administrador de nuvem

Recursos relacionados

AWS Blogs