
インターネットには、AWS S3 + AWS Cloudfront (+ Cloudflare) を介した静的 Web サイトの安価なホスティングを推奨するチュートリアルが多数あります。
たとえば次のようなものが挙げられます。
AWS サービスの価格体系を調べたところ、S3 または Cloudfront の場合、Amazon は無効なリクエストやブロックされたリクエストによって生成されたトラフィックやリクエストにも課金するため、無効なリクエストに関連するコストを制限することは不可能だと思います。
特定の IP アドレス範囲をブロックできる Amazon WAF を使用しても、リクエスタは「アクセス拒否」メッセージまたは同様のメッセージを受信するため、役に立ちません。
無効なリクエストには次のものが含まれます:
- 存在しないオブジェクトの要求
- 使用事例「プライベートコンテンツの提供」
- 署名付き URL / 署名付き Cookie のパラメータが不足しています
- 間違った IAM / シークレット認証情報
料金 (ノースバージニアの S3 / 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 -
---------------------------------------------------------------------------------------
無効なリクエストによる DDoS 攻撃のコスト
-------------------------------------------------------------------------------------------------------------
- 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 -
-------------------------------------------------------------------------------------------------------------
考えられる解決策: CDN を使用する?
いくつかのチュートリアルで指定されているこの問題の解決策として提案されているのは、AWS S3 または AWS CloudFront からキャッシュされた結果を提供することで、これらすべてのリクエストを処理できる Cloudflare CDN の無料サービスを使用することです。
このソリューションで依然として残る唯一の問題は、無効なリクエストを好きなだけ生成できることです。
例:
www.flare-example.com/iza7648hklto
www.flare-example.com/dsatnygp4851021
...
その場合、Cloudflare は毎回キャッシュミスを起こすため、攻撃者は無効なリクエストを好きなだけ送信して配信元に到達できます。
さて、最後に私の質問です。
DDoS 攻撃中にこれらのコストを回避するには、CloudFront ディストリビューションまたは S3 バケットをできるだけ早く削除するしかありませんか?
それとも、AWS の料金体系を間違えたのでしょうか?
答え1
非常に興味深い分析です。唯一の方法は、トラフィックとコストを厳密に監視することだと思います。また、AWS Shield advanced も検討してください。月額追加料金はかかりますが、DDOS によるスケーリング料金を吸収します。
AWS Shield Advanced を使用すると、「DDoS コスト保護」機能が利用できるようになります。これは、DDoS 攻撃による EC2、Elastic Load Balancing (ELB)、Amazon CloudFront、Amazon Route 53 の使用量の急増から AWS の請求を保護する機能です。