Usando o VPC Origins no CloudFront para publicar aplicações web com segurança.

Com o CloudFront VPC Origins é possível publicar uma aplicação Web em uma VPC privada, sem a necessidade de nenhuma rota direta para a internet e garantirmos que o CloudFront seja a única forma de acesso para sua apliçação e que todas as requisições passem por ele (CloudFront).

Criando um VPC Origin será possível usar o CloudFront para publicar aplicações que estão em sub-redes privadas evitando o uso de IP público ou a necessidade de colocar a sua aplicação em uma sub-rede pública.

O Cloud Front é uma CDN (Content Delivery Network) da AWS para entrega de conteúdo com alta velocidade e baixa latência, devido a sua quantidade de Pontos de Presença (PoPs) espalhados pelo mundo.  
Mais detalhes sobre esse serviço aqui: https://aws.amazon.com/pt/cloudfront/

Usando o CloudFront ainda contamos com a proteção contra ataques de Denial of Service (DoS) que é disponibilizado por padrão no serviço.

Vamos analisar um pouco sobre a arquitetura do cenário proposto…

Qual foi a base dessa demonstração?

Foi criada uma instância EC2 com o Amazon Linux 2 em uma subnet privada sem nenhuma rota de acesso a internet, instalado o Apache e configurada uma página simples (Hello World) no caminho /var/www/html/index.html. Após a criação da instância, foi criado um Elastic Load Balancer do tipo ALB interno (Application Load Balancer). Utilizaremos esse ALB como a origem (apontamento) do VPC origin e assim teremos acesso público na aplicação através do CloudFront sem a instância ser exposta na internet.

Acessando a console do CloudFront pela primeira vez, será exibida uma janela similar a essa abaixo, clique no menu no canto superior esquerdo e depois em VPC origin.

Será exibida a janela abaixo com o botão Create VPC origin:

Após clicar no botão carregará a janela para criação do VPC origin, conforme a imagem a seguir. Nessa janela iremos preencher com as seguintes informações, no primeiro campo (Name) deverá ser preenchido o nome que identifique o recurso (VPC origin).
No segundo campo (Origin ARN) preencher com o ARN (Amazon Resource Name) de uma Instância EC2 ou de um Elastic Load Balancer.
Agora, será preciso selecionar o protoloco (Protocol), deixaremos a opção padrão Match viewer com o TLSv1.2 que já vem selecionada, com as configurações realizadas, clique no botão Create VPC origin.

Falando um pouco sobre o ARN (Amazon Resource Name), ele é basicamente um identificador único utilizado para nomear os recursos no ambiente da AWS.
Mais detalhes aqui:
https://docs.aws.amazon.com/pt_br/IAM/latest/UserGuide/reference-arns.html

Após clicar no botão Create VPC origin uma página similiar a janela abaixo será carregada:

Com o VPC origin criado, iremos criar a Distribution para que o CloudFront possa realizar a entrega de conteúdo com alta velocidade e baixa latência. Na console do CloudFront clique no botão Create a CloudFront distribution.

Abrirá uma janela para criação do Distribution, clique no campo Origin domain e selecione o VPC origin criado anteriormente.

Os campos VPC origin domain e Name serão preenchidos automaticamente conforme podemos ver na imagem abaixo:

Na sessão Default cache behavior é possível configurar o comportamento do cache, métodos HTTP permitidos e a política de protocolo, mas para essa demonstração deixaremos todas as opções como padrão e seguiremos para a próxima parte.

Em Function associations, podemos ignorar essa sessão, pois não estaremos trabalhando com CloudFront Functions ou Lambda@Edge nessa aplicação. A próxima sessão será a Web Application Firewall (WAF) onde iremos simplesmente, selecionar Do not enable security protections para não ativar o WAF. Pois não iremos focar no WAF nesse tutorial.

Caso tenha interesse em aprender como proteger uma Aplicação Web com o WAF na AWS. Confira no link abaixo:
https://brenocarvalho.cloud/2023/12/31/como-proteger-a-sua-aplicacao-web-na-aws-usando-waf-web-application-firewall/

Após selecionar a opção Do not enable security protections e desabilitar o WAF, clique no botão Create distribution e o Distribution será criado no CloudFront.

Acessando o Distribution criado na console do CloudFront, será possível ter acesso ao endereço do CloudFront para acessar a página de exemplo:

Ao entrar no endereço será possível visualizar o site abaixo:

Consideramos que o novo recurso do CloudFront facilitou a publicação de Aplicações Web com segurança. Esperamos que esse tutorial possa contribuir positivamente na comunidade da AWS.

Até breve!