※以下 EDoS(DoS/DDoS)をまとめてDoSと表記します
料金などは2024/12/06時点のもの
記事の目的
APIGatewayをDoS攻撃から保護するノウハウの収集と共有
筆者の知識
サーバーサイドエンジニアとしては実務3年程度の経験があります。
今回の記事のようなインフラ部分については、最近勉強し始めました。(AWS試験のSAAやIPAの応用情報を取得しおり、その基準の知識はあります。)
API Gatewayについて
AWSが提供するサービス。Lambdaなどを呼ぶことができますが、100万アクセス当たり\$3.5(HttpAPIなら\$1)かかります。(以後はRESTAPI想定)。このAPIGatewayがDoS攻撃を受け、異常な課金をされたという記事もあり、このような事を防ぐにはどうすればいいのか考察します。
今回は、1秒間に1000アクセス×1日(約86Mアクセス) の場合を想定してみます。
この場合、何も対策をしないと約\$300の課金が発生し、個人開発の場合はかなり痛手になります。
CloudFlareでの保護
CloudFlareでは、DNS解決の際に、自動的なDDoSの防御機能や、IP毎のレート制限(10秒間に〇〇アクセス以上された時に自動的にブロック)を設定することができる機能が無料プランでも提供されています。
ただし、DNSで使用するドメインの料金は必要です。(種類にもよりますが年2000円程?)
これを用いることで、DoSを大幅に軽減できます(例えば、レート制限で秒間10アクセスまでと定めれば、想定ケースでは日100万アクセス程度まで軽減できます。(同一IPからの場合))ただ、複数のIPアドレスから攻撃されると、レート制限だけでは十分に防げないかもしれないです。
WAFについての検討
WAFはAWS公式のセキュリティ機能。CloudFlareのようなレート制限が可能。
ただし、設定したルールや、処理するアクセス数に応じた課金が発生する。
特にDoSの対策としてはアクセス毎の課金がかさむと思われるので、微妙かもしれないです。
AWS Shield Advancedについての検討
AWS Shield AdvancedはAWS公式のDDoS対策機能。CloudFrontと組み合わせることでAPIGatewayの保護もできる。
DoSによって発生した課金も返金してもらえる可能性があります。 API gateway は返金対応ではなさそう…?
もちろん使えるなら使いたいですが、月あたり\$3000はとても個人では手が出ないです。
より厳密な対策の考察
APIGatewayへのアクセス数を監視して、一定以上のアクセスがされたらAPIGateway自体を削除してしまうような仕組みを入れると、一定以上の課金は防げるかもしれない。ただしサービスは止まってしまう。
それでもDoSによって破産してしまうという最悪の結果は防げそう。
追記しましたがスロットリングのほうがよさそうです。
追記 Cloudflare + Workers
CloudflareWorkersを経由してリクエストするようにすれば、worker>バインディング>Rate limiterからより柔軟なレート制限ができそうかも 調べ中です。
追記 スロットリング
確信がなかったので、記載していなかったのでが、chatGPTのDeepResearchを使ってスロットリングされたリクエストは課金対象外というドキュメントを見つけました
厳しめにスロットリングしておけば大丈夫そうです
本当にAIは優秀ですね…
https://web.archive.org/web/20211202141251/https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-pricing.html
後この手の話はサポートに問い合わせるのが一番適切ですよね、ちょっと思考から抜けてました。大反省です
おわりに
上記は実際にサービスを組む前の検討ですので、間違っている部分もあるかと思います。
間違っている点の指摘や、何かより良い方法があればコメントいただけると助かります。