Amazon CloudFront
Tags: cloud, aws, devops, security
Published: 2023-05-19 14:20:25

**Anotações sobre o Amazon CloudFront para ajudar na preparação das certificações AWS.**

Até o momento as anotações são para as certificações abaixo:

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/se0sqtegn424nami6rz8.png)

- [Link oficial](https://aws.amazon.com/pt/cloudfront/)
- [FAQ](https://aws.amazon.com/pt/cloudfront/faqs/?nc=sn&loc=5&dn=2)

##**Definição do fornecedor**

- _O Amazon CloudFront é um serviço da web que acelera a distribuição do conteúdo estático e dinâmico da web, como arquivos **.html, .css, .js** e arquivos de imagem, para os usuários._
- _O Amazon CloudFront é um serviço Web que oferece às empresas e aos desenvolvedores de aplicações Web uma maneira fácil e de baixo custo de distribuir conteúdo com **baixa latência e altas velocidades de transferência de dados**._

---


##**Anotações gerais**

- Pode usar TTL para habilitar o cache de conteúdo dinâmico
- 216 Point Of Presense (Edge Location)
- Serviço Global
- **Para deletar, primeiro tem que DESATIVAR e somente depois pode ser DELETADO**
- **Ajuda conta ataques de DDoS Protection**
- Escolhe o Price Class - 3 opções
- **Integrado com Shield e AWS WAF**
- Pode ser S3, EC2, ELB, Route53
- Usa Edge Location para distribuir conteúdo
- Dados, vídeos aplicações e API
- Arquivos estáticos
- **NÃO usa UNICAST**
- **X-Cache** - Indica se o arquivo está no cache do CDN ou na origem
- **Origin Access identity** - Restrinja o acesso ao conteúdo nos buckets do S3 para impedir que os usuários usem a URL direta do arquivo.

---
##**Usar ACM c/ CloudFront**
- Para usar um ACM com Amazon CloudFront, você deve solicitar ou importar o certificado na **região US East (N. Virginia)**. 
- Os certificados ACM nesta região associados a uma distribuição do CloudFront são distribuídos para todos os locais geográficos configurados para essa distribuição.

---
##**Signed URL´s**
[Documentação oficial](https://docs.aws.amazon.com/pt_br/AmazonCloudFront/latest/DeveloperGuide/private-content-signed-urls.html)

_Um Signed URL inclui informações adicionais, por exemplo, uma data e hora de expiração, que proporcionam a você mais controle sobre o acesso a seu conteúdo._

- Ao criar um Signed URL, você grava uma declaração de política no formato JSON que especifica as restrições no Signed URL, por exemplo, por quanto tempo o URL é válido. 
- Pode utilizar uma política padrão ou personalizada. 
- Veja uma comparação entre as duas:

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/7qu8yrgj2h3uvygmyrmy.png)

**Criar um signed URL usando uma política padrão**
[Documentação oficial](https://docs.aws.amazon.com/pt_br/AmazonCloudFront/latest/DeveloperGuide/private-content-creating-signed-url-canned-policy.html)

`aws cloudfront sign --url "url do arquivo no cdn" --key-pair-id "id" --private-key "file" --date-less-that "data da expiração"`
A saída será uma URL para ser utiliza baseada nas regras acima.

---
##**Atendendo a solicitações HTTPS usando a SNI - Server Name Indication**
- SNI Custom SSL depende da extensão SNI do protocolo TLS, que permite que vários domínios sejam servidos no mesmo endereço IP, incluindo o nome do host, os visualizadores estão tentando se conectar
- Com o método SNI, o CloudFront associa um endereço IP ao nome de domínio alternativo, mas o endereço IP não é dedicado.

---
##**Field-Level Encryption**
[Documentação oficial](https://docs.aws.amazon.com/pt_br/AmazonCloudFront/latest/DeveloperGuide/field-level-encryption.html)

_Com o Amazon CloudFront, é possível impor conexões seguras de ponta a ponta a servidores de origem usando HTTPS._


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/q3405qfu1j4h0zd86wez.png)




---
##**Edge Locations**
[Documentação oficial](https://docs.amazonaws.cn/en_us/AmazonCloudFront/latest/DeveloperGuide/cache-hit-ratio-explained.html)

- Cache
- Conforme Price Class - **Use All Edge Location - Best Performence (veem por padrão)**

**Price Class**
[Documentação oficial](https://docs.aws.amazon.com/pt_br/AmazonCloudFront/latest/DeveloperGuide/PriceClass.html)


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/pzsyg5217rixbg5y5ztv.png)

**Links importantes**

- [O que é um ponto de presença na AWS? Uma explicação simples](https://www.lastweekinaws.com/blog/what-is-an-edge-location-in-aws-a-simple-explanation/)

---

##**CloudFront Origins**
[Documentação oficial](https://docs.aws.amazon.com/pt_br/cloudfront/latest/APIReference/API_Origin.html)

Use **_S3OriginConfig _**para especificar um bucket do Amazon S3 que não está configurado com hospedagem de site estático.

Use **_CustomOriginConfig _**para especificar todos os outros tipos de origens, incluindo:

- Um bucket do Amazon S3 configurado com hospedagem de site estático
- Um balanceador de carga do Elastic Load Balancing
- Um endpoint do AWS Elemental MediaPackage
- Um contêiner do AWS Elemental MediaStore
- Qualquer outro servidor HTTP, executado em uma instância do Amazon EC2 ou qualquer outro tipo de host

**S3 Bucket**

- **OAI (_Origin Access identity_) + S3 Bucket Policy**
- Upload S3
- **S3 bucket access** - para habilitar durante a configuração do CDN
- Pode-se optar por fazer o update do bucket durante a criação do CDN
- O CND cria a bucket policy no S3 quando solicitado na criação do OAI
- **Com OAI habilitado não precisa mais do bucket com acesso público**

**Custom Origin (HTTP)**

- ALB
- EC2
- S3 website
- Any HTTP backend



---
##**Global Accelerator**
[Documentação oficial](https://aws.amazon.com/pt/global-accelerator/?blogs-global-accelerator.sort-by=item.additionalFields.createdDate&blogs-global-accelerator.sort-order=desc&aws-global-accelerator-wn.sort-by=item.additionalFields.postDateTime&aws-global-accelerator-wn.sort-order=desc)

- Usam a rede global AWS de alta velocidade e as técnicas de roteamento Anycast
- Para melhorar a disponibilidade e desempenho do app do cliente
- Não inclui recursos de cache de conteudo
- São adequados para VOIP, MTTQ e Jogos
- Edge Locations envia tráfego para ambiente
- 2 IP Anycast
- DDoS e AWS Shield
- No Cache
- TCP/UDP/HTTP

---
##**Segurança no S3**

- Restrict access bucket vem DENY por padrão
- Origin
- Restric bucket Access - Yes
- Origin Access Identity - Create a new Identity

---
##**SSL Certificates**
**Default Cloudfront**

- Veem c/ nome aleatório
- domínio cloudfront.net

**Custom SSL**

- Tem que importar certificado
- seu domínio
- ACM somente em us-east-1

---
##**Restrictions**
**Geo Restrictions**
[Documentação oficial](https://docs.aws.amazon.com/pt_br/AmazonCloudFront/latest/DeveloperGuide/georestrictions.html)

_Para impedir que usuários em localizações geográficas específicas acessem o conteúdo que você está distribuindo por meio de uma distribuição do CloudFront._

- No Restrictions (_Padrão_)
- Allow List
- Block List (_Seleciona o país que deseja bloquear_)

---
##**Permitir que vários domínios atendam ao tráfego SSL no mesmo endereço IP**
[Documentação oficial](https://aws.amazon.com/pt/about-aws/whats-new/2014/03/05/amazon-cloudront-announces-sni-custom-ssl/)

1. Crie uma distribuição na web do CloudFront e gere um certificado SSL no AWS Certificate Manager
2. Associe o certificado à distribuição do CloudFront e habilite o Server Name Indication (SNI).



---
##**Referências**
- [SSL personalizado no Amazon CloudFront](https://aws.amazon.com/pt/cloudfront/custom-ssl-domains/)