Existem muitos tutoriais na Internet que promovem hospedagem barata de websites estáticos via AWS S3 + AWS Cloudfront (+ Cloudflare).
Exemplo disso seria:
Eu estava olhando para a estrutura de preços dos serviços da AWS e no caso do S3 ou Cloudfront, acho que é impossível limitar os custos associados a solicitações inválidas, pois a Amazon também está cobrando tráfego e solicitações geradas por solicitações inválidas ou bloqueadas.
Mesmo o uso do Amazon WAF que pode bloquear intervalos de endereços IP específicos não deve ajudá-lo, pois o solicitante ainda deve receber uma mensagem "Acesso negado" ou algo similar.
Os pedidos inválidos implicam:
- solicitações de objetos que não estão presentes
- caso de uso "conteúdo privado"
- parâmetros ausentes para URLs assinados / cookies assinados
- credenciais de IAM / incógnito incorretas
Precificação (S3 em North-Virginia / Cloudfront USA; 2018-03-25)
---------------------------------------------------------------------------------------
- service - # requests type - pricing -
---------------------------------------------------------------------------------------
- S3 - 1000 PUT/COPY/POST requests - 0.0050 USD -
---------------------------------------------------------------------------------------
- S3 - 1000 GET and other requests - 0.0004 USD -
---------------------------------------------------------------------------------------
- Cloudfront - 10000 HTTP - 0.0075 USD -
---------------------------------------------------------------------------------------
- Cloudfront - 10000 HTTPS - 0.0100 USD -
---------------------------------------------------------------------------------------
Custos de um ataque DDoS com solicitações inválidas
-------------------------------------------------------------------------------------------------------------
- requests per second - service - type - costs per day - costs per month -
-------------------------------------------------------------------------------------------------------------
- 200 - S3 (North-Verginia) - POST - 86.400 USD - 2592.00 USD -
-------------------------------------------------------------------------------------------------------------
- 500 - S3 (North-Verginia) - POST - 216.000 USD - 6480.00 USD -
-------------------------------------------------------------------------------------------------------------
- 1000 - S3 (North-Verginia) - POST - 432.000 USD - 12960.00 USD -
-------------------------------------------------------------------------------------------------------------
- 200 - S3 (North-Verginia) - GET - 6.912 USD - 207.36 USD -
-------------------------------------------------------------------------------------------------------------
- 500 - S3 (North-Verginia) - GET - 17.280 USD - 518.40 USD -
-------------------------------------------------------------------------------------------------------------
- 1000 - S3 (North-Verginia) - GET - 34.560 USD - 1036.80 USD -
-------------------------------------------------------------------------------------------------------------
- 200 - Cloudfront (USA) - HTTPS - 17.000 USD - 518.40 USD -
-------------------------------------------------------------------------------------------------------------
- 500 - Cloudfront (USA) - HTTPS - 216.000 USD - 1296.00 USD -
-------------------------------------------------------------------------------------------------------------
- 1000 - Cloudfront (USA) - HTTPS - 432.000 USD - 2592.00 USD -
-------------------------------------------------------------------------------------------------------------
- 10000 - Cloudfront (USA) - HTTPS - 864.000 USD - 25920.00 USD -
-------------------------------------------------------------------------------------------------------------
- 200 - Cloudfront (USA) - HTTP - 12.960 USD - 388.80 USD -
-------------------------------------------------------------------------------------------------------------
- 500 - Cloudfront (USA) - HTTP - 32.400 USD - 972.00 USD -
-------------------------------------------------------------------------------------------------------------
- 1000 - Cloudfront (USA) - HTTP - 64.800 USD - 1944.00 USD -
-------------------------------------------------------------------------------------------------------------
- 10000 - Cloudfront (USA) - HTTP - 648.000 USD - 19440.00 USD -
-------------------------------------------------------------------------------------------------------------
Solução possível: usar um CDN?
A solução proposta para esse problema especificada por alguns tutoriais é usar o serviço gratuito do CloudNFN CDN que pode manipular todas essas solicitações, fornecendo-lhes um resultado em cache do AWS S3 ou da nuvem AWS.
O único problema, que ainda persiste com essa solução, é que ainda é possível gerar tantos pedidos inválidos quanto ele quiser.
Exemplos:
www.flare-example.com/iza7648hklto
www.flare-example.com/dsatnygp4851021
...
Nesse caso, o atacante ainda pode alcançar a origem com tantas solicitações inválidas quantas as que ele gosta, pois o Cloudflare perderá o cache todas as vezes.
Agora, finalmente, a minha pergunta:
Você só pode escapar desses custos durante um ataque DDoS ao excluir sua distribuição de nuvem ou o bucket do S3 o mais rápido possível?
Ou cometi um erro na estrutura de preços da AWS?