

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
<a name="consolidate-amazon-s3-presigned-url-generation-and-object-downloads-by-using-an-endpoint-associated-with-static-ip-addresses"></a>

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

## Resumo
<a name="consolidate-amazon-s3-presigned-url-generation-and-object-downloads-by-using-an-endpoint-associated-with-static-ip-addresses-summary"></a>

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
<a name="consolidate-amazon-s3-presigned-url-generation-and-object-downloads-by-using-an-endpoint-associated-with-static-ip-addresses-prereqs"></a>

**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](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/). Para endpoints específicos, consulte [Service endpoints and quotas](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html) e clique no link correspondente ao serviço desejado.

## Arquitetura
<a name="consolidate-amazon-s3-presigned-url-generation-and-object-downloads-by-using-an-endpoint-associated-with-static-ip-addresses-architecture"></a>

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.\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/e19ebcb5-2138-481e-952e-3cfee9ad9e97/images/effd197c-d4d7-4990-8b66-3eb1c64aab4c.png)


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.

1. 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 [GetObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html)permissões).

## Ferramentas
<a name="consolidate-amazon-s3-presigned-url-generation-and-object-downloads-by-using-an-endpoint-associated-with-static-ip-addresses-tools"></a>

**Serviços da AWS**
+ [O Amazon API Gateway](https://docs.aws.amazon.com/apigateway/latest/developerguide/welcome.html) ajuda você a criar, publicar, manter, monitorar e proteger REST, HTTP e WebSocket APIs em qualquer escala.
+ Os [Application Load Balancers](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/) 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)](https://docs.aws.amazon.com/acm/latest/userguide/acm-overview.html) 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)](https://docs.aws.amazon.com/cdk/latest/guide/home.html)é uma estrutura de desenvolvimento de software que ajuda você a definir e provisionar Nuvem AWS infraestrutura em código.
+ O [AWS Global Accelerator](https://docs.aws.amazon.com/global-accelerator/latest/dg/what-is-global-accelerator.html) é 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)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) 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](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) é 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 PrivateLink](https://docs.aws.amazon.com/vpc/latest/privatelink/what-is-privatelink.html)ajuda você a criar conexões unidirecionais e privadas de suas nuvens privadas virtuais (VPCs) para serviços fora da VPC.
+ O [Amazon Route 53](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/Welcome.html) é um serviço web de DNS altamente disponível e escalável.
+ O [Amazon Simple Storage Service (Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) é 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](https://www.terraform.io/) é 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](#consolidate-amazon-s3-presigned-url-generation-and-object-downloads-by-using-an-endpoint-associated-with-static-ip-addresses-epics) 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:
+ **AWS CDK**— [s3- -cdk presignedurl-staticips-endpoint-with](https://github.com/aws-samples/s3-presignedurl-staticips-endpoint-with-cdk)
+ **Terraform** — [s3](https://github.com/aws-samples/s3-presignedurl-staticips-endpoint-with-terraform) - -terraform presignedurl-staticips-endpoint-with

## Práticas recomendadas
<a name="consolidate-amazon-s3-presigned-url-generation-and-object-downloads-by-using-an-endpoint-associated-with-static-ip-addresses-best-practices"></a>
+ Para reforçar a segurança no ambiente de produção, é fundamental implementar mecanismos de autorização, como o [Amazon Cognito](https://docs.aws.amazon.com/cognito/latest/developerguide/what-is-amazon-cognito.html), 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](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#grant-least-priv) e [Práticas recomendadas de segurança](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html) na documentação do IAM.

## Épicos
<a name="consolidate-amazon-s3-presigned-url-generation-and-object-downloads-by-using-an-endpoint-associated-with-static-ip-addresses-epics"></a>

### Prepare o ambiente
<a name="prepare-the-environment"></a>


| Tarefa | Description | Habilidades 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](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/CreatingHostedZone.html) 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](https://docs.aws.amazon.com/acm/latest/userguide/acm-public-certificates.html) ou [importar](https://docs.aws.amazon.com/acm/latest/userguide/import-certificate.html) um certificado SSL para o domínio do seu aplicativo web. | Administrador da AWS e administrador de rede | 

### Implantação do padrão com o Terraform
<a name="deploy-the-pattern-with-terraform"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Configure o ambiente de desenvolvimento do Terraform. | Para configurar o ambiente de desenvolvimento, realize as seguintes ações:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/consolidate-amazon-s3-presigned-url-generation-and-object-downloads-by-using-an-endpoint-associated-with-static-ip-addresses.html) | Administrador da AWS, administrador de nuvem | 
| Modifique os arquivos `.tfvars` e** **`provider.tf`. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/consolidate-amazon-s3-presigned-url-generation-and-object-downloads-by-using-an-endpoint-associated-with-static-ip-addresses.html)**Observe o seguinte:**[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/consolidate-amazon-s3-presigned-url-generation-and-object-downloads-by-using-an-endpoint-associated-with-static-ip-addresses.html) | Administrador da AWS, administrador de nuvem | 
| Provisione os recursos de rede. | Para provisionar recursos de rede, execute os seguintes comandos:<pre>cd ./2.vpc_alb_ga<br />terraform init<br />terraform plan --var-file=apg.tfvars<br />terraform apply --var-file=apg.tfvars</pre>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:<pre>cd ./2.apigw_s3_lambda<br />terraform init<br />terraform plan --var-file=apg.tfvars<br />terraform apply --var-file=apg.tfvars</pre> | Administrador da AWS, administrador de nuvem | 

### Implante o padrão com AWS CDK
<a name="deploy-the-pattern-with-cdk"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Configure o ambiente AWS CDK de desenvolvimento. | Para configurar o ambiente de desenvolvimento, realize as seguintes ações:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/consolidate-amazon-s3-presigned-url-generation-and-object-downloads-by-using-an-endpoint-associated-with-static-ip-addresses.html) | 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:<pre>export const options = {<br />    certificateArn: '{arn of the acm which created before}',<br />    dnsAttr: {<br />        zoneName: '{public hosted zone name}',<br />        hostedZoneId: 'hosted zone Id',<br />    },<br />    domainNamePrefix: '{Prefix for the domain}',<br />    presignPath: 'presign',<br />    objectsPath: 'objects',<br />};</pre>Nos comandos, substitua cada espaço reservado pelas suas próprias informações:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/consolidate-amazon-s3-presigned-url-generation-and-object-downloads-by-using-an-endpoint-associated-with-static-ip-addresses.html) | 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:<pre>$ npm install <br />$ cdk synth <br />$ cdk deploy --all</pre> | Administrador da AWS, administrador de nuvem | 

### Teste do padrão
<a name="test-the-pattern"></a>


| Tarefa | Description | Habilidades 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:<pre>nslookup ${s3-bucket-prefix}.${domain}</pre> | 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](https://www.postman.com/product/what-is-postman/)) usando o seguinte formato:<pre>https://${s3-bucket-prefix}.${domain}/presign/objects/${uploaded-filename}</pre>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 | 

### Limpeza com o Terraform
<a name="clean-up-with-terraform"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Remova os recursos do API Gateway, do Amazon S3 e do Lambda. | Para excluir recursos, use os seguintes comandos:<pre>cd ./2.apigw_s3_lambda<br />terraform init<br />terraform plan --destroy --var-file=apg.tfvars<br />terraform destroy --var-file=apg.tfvars<br /></pre> | Administrador da AWS, administrador de nuvem | 
| Remova os recursos de rede. | Para excluir recursos de rede, use os seguintes comandos:<pre>cd ./1.vpc_alb_ga<br />terraform init<br />terraform plan --destroy --var-file=apg.tfvars<br />terraform destroy --var-file=apg.tfvars<br /></pre> | Administrador da AWS, administrador de nuvem | 

### Limpe com AWS CDK
<a name="clean-up-with-cdk"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Remova as pilhas. | Para remover as pilhas da VPC e da aplicação, use o seguinte comando:<pre>$ cdk destroy --all</pre> | Administrador da AWS, administrador de nuvem | 
| Esvazie e exclua os buckets do Amazon S3. | [Esvazie](https://docs.aws.amazon.com/AmazonS3/latest/userguide/empty-bucket.html) e [exclua](https://docs.aws.amazon.com/AmazonS3/latest/userguide/delete-bucket.html) 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)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) para excluir os buckets, execute os seguintes comandos:<pre>$ aws s3 rm s3://${s3-bucket-prefix}.${domain} --recursive<br />$ aws s3 rb s3://${s3-bucket-prefix}.${domain} --force<br />$ aws s3 rm s3://${s3-bucket-prefix}.${domain}-logs --recursive<br />$ aws s3 rb s3://${s3-bucket-prefix}.${domain}-logs --force</pre>Substitua `${s3-bucket-prefix}` e `${domain}` pelos valores que você definiu nas etapas anteriores.,/p> | Administrador da AWS, administrador de nuvem | 

## Recursos relacionados
<a name="consolidate-amazon-s3-presigned-url-generation-and-object-downloads-by-using-an-endpoint-associated-with-static-ip-addresses-resources"></a>

**AWS Blogs**
+ [Acessando um Amazon API Gateway por meio de endereços IP estáticos fornecidos por AWS Global Accelerator](https://aws.amazon.com/blogs/networking-and-content-delivery/accessing-an-aws-api-gateway-via-static-ip-addresses-provided-by-aws-global-accelerator/) 
+ [Gere um URL pré-assinado em formato modular AWS CDK para JavaScript](https://aws.amazon.com/blogs/developer/generate-presigned-url-modular-aws-sdk-javascript/) 
+ [Hospedagem de sites estáticos HTTPS internos com ALB, S3 e PrivateLink](https://aws.amazon.com/blogs/networking-and-content-delivery/hosting-internal-https-static-websites-with-alb-s3-and-privatelink/) 