Origin Cloaking
Visão geral
O Origin Cloaking é um conjunto de técnicas que visa reduzir a superfície de ataque de aplicações Web. É uma prática recomendada usar o CloudFront como um único ponto de entrada para aplicações Web, onde controles de segurança, como proteções contra ataques de DDoS e bots indesejados, são aplicados. A Ocultação da origem impede que agentes mal-intencionados contornem o CloudFront e seus controles de segurança para atacar diretamente a origem, usando regras de firewall para bloquear qualquer tráfego que não venha do ponto de entrada do CloudFront. A Ocultação da origem pode ser obtida em várias camadas do modelo OSI.
Na camada de aplicação
A Ocultação da origem na camada de rede protege sua origem de todos os ataques direcionados diretamente à sua origem. No entanto, um invasor pode configurar uma distribuição do CloudFront com seu nome de domínio de origem descoberto e direcionar sua origem com ataques na camada de aplicação por meio da distribuição do CloudFront, contornando efetivamente os controles de segurança configurados em sua própria distribuição do CloudFront.
Além de ofuscar seu nome de domínio de origem (por exemplo, evite origin.example.com!) , você pode adicionar controles de acesso à camada de aplicação entre o CloudFront e sua origem para mitigar os riscos acima. Isso pode ser implementado de maneiras diferentes, de acordo com o tipo de origem e o requisito de segurança.
Controle de acesso baseado em solicitações de assinatura
O OAC é uma funcionalidade do CloudFront que permite assinar solicitações para determinados tipos de origens de forma nativa usando o algoritmo AWS Signature Version 4 (sigv4) com base em políticas do IAM. No momento, o OAC é compatível com S3, MediaStore, MediaPackage, URLs de funções do Lambda e S3 Object Lambda. Quando o OAC é usado com o S3, é possível manter seu bucket do S3 privado, com acesso exclusivo ao CloudFront com base nas políticas de bucket do S3.
Quando o tipo de origem não é suportado pelo OAC, você pode assinar solicitações para sua origem usando funções de borda. Exemplos de implementações são explicados nos seguintes blogs:
Chave secreta compartilhada baseada em controle de acesso
Se a sua origem não oferece suporte à assinatura de solicitações ou você não considera que esse nível de controle de acesso é necessário para sua aplicação, você pode configurar o CloudFront para enviar um cabeçalho personalizado contendo um segredo compartilhado com sua origem, que pode ser validado pela sua origem para processar a solicitação. Considere o seguinte exemplo de implementação:
- Origem baseada em ALB. Você pode validar o cabeçalho secreto em uma origem baseada em ALB usando uma regra de ALB ou usando uma regra do AWS WAF se o seu ALB já estiver associado a uma WebACL do AWS WAF.
- Origem baseada no API Gateway. Você pode validar o cabeçalho secreto em um API Gateway usando chaves de API.
- Origem baseada em NGINX. Supondo que o CloudFront envie um cabeçalho personalizado X-CloudFront com o valor abc123, você pode validar o cabeçalho secreto no servidor Web baseado em Nginx (baseado na nuvem ou on-premises) adicionando o seguinte código na etiqueta do servidor do arquivo de configuração /etc/nginx/nginx.conf:
if ($http_x_cloudfront != "abc123") {
return 403;
} - Origem baseada em Apache. Supondo que o CloudFront envie um cabeçalho personalizado X-CloudFront com o valor abc123, você pode validar o cabeçalho secreto no servidor Web baseado em Apache (baseado na nuvem ou on-premises) adicionando o seguinte código no arquivo de configuração httpd.conf (e no arquivo ssl.conf, se usado):
RewriteEngine On
RewriteCond %{HTTP:x-cloudfront} !^abc123$ [NC]
RewriteRule ^ - [F]
Em todos os casos, é recomendável alternar esse segredo compartilhado regularmente para reduzir o risco de segredos vazados. Nas implementações de exemplo compartilhadas acima, tanto a com API Gateway quanto a com ALB incluem uma automação para alternância secreta.
Na camada de rede
O CloudFront publica os endereços IP usados para estabelecer conexões TCP com sua origem, com o valor CLOUDFRONT_ORIGIN_FACING do campo de serviço. Você pode implementar uma ACL no firewall de sua origem para bloquear o tráfego não proveniente de IPs voltados para a origem do CloudFront. Com essa abordagem, você precisa assinar alterações de IP para atualizar sua ACL. Confira esta postagem do blog para saber como implementar a ocultação de origem em servidores Web on-premises usando firewalls de terceiros.
Se sua origem estiver hospedada em uma Amazon VPC, você pode simplesmente implementar a Ocultação da origem adicionando a lista de prefixos gerenciada pela AWS do Amazon CloudFront ao grupo de segurança anexado à sua origem (EC2, NLB, ALB, etc...).
Em ambos os casos, é recomendável estabelecer conexões seguras via TLS entre o CloudFront e sua origem.
Na camada física
Se sua origem estiver on-premises, considere configurar o AWS Direct Connect entre sua infraestrutura on-premises e a AWS usando interfaces virtuais públicas na conexão do Direct Connect. Dessa forma, o tráfego entre sua origem e o CloudFront é transportado em uma rede gerenciada de forma privada, não acessível pela Internet.