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!

Como proteger a sua aplicação web na AWS usando WAF (Web Application Firewall)

Atualmente na era digital, a segurança online se tornou uma prioridade, especialmente quando se trata da proteção de aplicações web contra ameaças cibernéticas. No ecossistema da Amazon Web Services (AWS), a implementação de medidas robustas de segurança é fundamental para garantir a integridade e disponibilidade de seus recursos na nuvem. Neste post, exploraremos em detalhes a utilização do WAF (Web Application Firewall) na AWS, uma ferramenta essencial para fortificar a segurança de suas aplicações web. Descubra como o WAF pode ser uma barreira eficaz contra ameaças do tipo: ataques DDoS, injeção de SQL e outros exploits comuns, proporcionando uma camada adicional de proteção para o seu site hospedado na AWS. Prepare-se para aprofundar seus conhecimentos e elevar o nível de segurança de sua presença online na nuvem.

Essa publicação demonstrará como configurar o WAF como a primeira camada de proteção da aplicação, trabalhando em conjunto com o CloudFront (CDN).

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 (PoPs) Pontos de Presença espalhados pelo mundo.  
Mais detalhes sobre esse serviço aqui: https://aws.amazon.com/pt/cloudfront/

Acessando a console do WAF pela primeira vez, será exibida uma janela similar a essa abaixo, clique no botão laranja Create web ACL:

Será carregada uma janela de configuração da Web ACL, nessa primeira etapa será necessário informar o tipo de recurso que você irá associar a essa ACL, existem duas opções CloudFront distributions (opção padrão) ou recursos regionais, por exemplo: Application Load Balancers, API Gateway entre outros serviços.

Nessa demonstração iremos criar a ACL para o CloudFront, inserindo o nome da Web ACL, o campo CloudWatch metric name será automaticamente preenchido, esse nome será para indentificar as métricas da Web ACL no Cloud Watch:

No próximo bloco de configurações podemos definir o Body size limit que o WAF irá inspecionar, esse limite se aplica ao request body, headers e cookies. Para essa demonstração, iremos deixar a opção Default (Padrão) que é 16 KB, pagando um valor adicional, esse valor pode ser alterado até 64 KB conforme imagem abaixo:

Definido o Body size limit, iremos selecionar o CloudFront Distribution que iremos associar a Web ACL que estamos criando.

Clicando no botão Add AWS resource conforme imagem acima, irá carregar uma janela com as Distributions existentes, selecione o Distribution e clique no botão Add conforme imagem abaixo:

Irá voltar para a tela anterior (imagem abaixo), clique no botão Next:

Nessa etapa, iremos definir as regras conforme os comportamentos das requisições web e de acordo com o que for identificado na requisição, a ação que será tomada. Por exemplo, se será liberado (Allow) ou bloqueado (Block).

Clicando em Add rules e depois em Add managed rule groups, será carregado uma tela com as regras gerenciadas, existem regras da própria AWS (que iremos usar aqui) e também de outros diversos fabricantes. Clicando em AWS managed rule groups vai expandir as regras gerenciadas pela AWS…

Iremos selecionar as regras gratuitas da AWS chamada Core rule set, que inclui proteções para aplicações Web incluindo OWASP publications (publicações OWASP) e Amazon IP reputation list que é baseada na Amazon threat intelligence (Inteligência de Ameaças Amazon) e irá bloquear IPs associados a bots entre outras ameaças já conhecidas pela AWS.

Após selecionar as regras desejadas, basta clicar no botão Add rules no final da página.

Um ponto importante que deve ser considerado é que cada regra (Rules) tem um limite de capacidade que é de 5000 WCUs, mas usando acima de 1500 WCUs existirá um custo adicional.
O WCU é basicamente uma unidade de medida de capacidade da Web ACL, que a AWS utiliza para calcular e controlar os recursos necessários para executar as regras.
Para saber dos custos envolvidos nas regras, acesse: https://aws.amazon.com/waf/pricing/

Entendendo a regra abaixo, no nosso cenário usamos somente duas regras que utilizam uma capacidade de 725 WCUs e estaremos liberando o tráfego das requisições que o comportamento não for o esperado nas regras adicionadas na sessão Rules:

Clique no botão Next.

Após configurar as regras e seu comportamento, iremos definir a prioridade de processamento delas no WAF, quando uma requisição chegar eles serão avaliadas de cima para baixo.

No cenário da nossa Web ACL, é necessário que o WAF faça o bloqueio de qualquer IP que esteja na lista AWS-AWSManagedRulesAmazonIpReputationList, antes que ele faça a análise da regra AWS-AWSManagedRulesCommonRuleSet, com isso será alterada a ordem de processamento. Observe no vídeo abaixo:

Nessa etapa, iremos configurar o nome que as métricas serão enviadas para o CloudWatch para monitoramento, deixaremos com as opções padrão:

Ao clicar no botão Next será exibida a tela de Review (análise), onde você poderá visualizar o que foi configurado em todas as etapas da configuração da Web ACL, caso esteja de acordo, é só clicar no botão Create web ACL para criar a Web ACL.

Finalizada a criação da Web ACL, navegaremos pelo Dashboards e analisaremos o tráfego. Para popular os Dashboards, foi realizado um teste online através de sites gratuitos para gerar tráfego e conseguirmos ver o WAF em funcionamento.
Acessando a Web ACL criada, iremos selecionar a aba Traffic overview. Conforme janela abaixo:

Na primeira parte temos o resumo com a quantidade total do tráfego, o que foi liberado (allow), bloqueado (blocked) e em qual regra foi bloqueado:

Na segunda parte (Traffic characteristics), conseguimos ver a característica do tráfego que são informações importantes, tais como: o tipo do cliente, os tipos de ataques, se é tráfego de Bot ou não e o país de origem do tráfego.

Já nessa última parte, é possível ver em qual regra / grupo de regra a requisição foi categorizada.

A partir de agora, teremos mais uma camada de proteção na aplicação web.

É fundamental destacar que nessa demonstração, foram empregadas apenas duas regras. Isso se deu com o propósito de elucidar o funcionamento da solução de WAF da AWS. No entanto, ao lidar com um ambiente que envolva uma aplicação real e crítica, é imperativo realizar uma análise detalhada da aplicação. Essa análise permitirá identificar quais regras (proteções) devem ser configuradas na WebACL, garantindo uma abordagem personalizada e eficaz para a segurança do ambiente.

Abaixo, observe algumas regras que poderiam ser adicionadas a WebACL:

Espero que essa publicação possa ser uma contribuição valiosa para a comunidade da AWS, como um auxílio para quem está buscando conhecimento na área de Cloud.

Até breve!!