25
23

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【実例】DDoS攻撃でAWSの請求が200万円になった時の緊急対応マニュアル ─ 防御設定6選

25
Posted at

ある朝、AWS Cost Explorerを開いたら前日のデータ転送費用が18万円になっていた。通常は1日3,000円程度のサービスだ。CloudFrontのアクセスログを見ると、特定のエンドポイントに対して秒間8,000リクエスト以上のトラフィックが流れていた。結果、月末の請求額は約210万円。この記事では、同じ状況に陥った時に何を最優先で実行すべきか、そして事前に設定しておくべき防御策6つを具体的な手順と共に記載する。

気づいた時にはもう遅い ─ DDoSコストの恐怖

DDoS攻撃の厄介な点は、AWSのインフラが攻撃トラフィックを「正常に処理してしまう」ことにある。オートスケーリングは忠実にインスタンスを増やし、CloudFrontはデータ転送量に応じて課金する。攻撃を受けている間、AWSから見れば「アクセスが増えた正常なサービス」にすぎない。

緊急対応: 最初の30分でやること

1. 攻撃元IPのブロック

# WAF IPセットを作成してブロック
aws wafv2 create-ip-set \
  --name "DDoS-Block-List" \
  --scope CLOUDFRONT \
  --ip-address-version IPV4 \
  --addresses "203.0.113.0/24" "198.51.100.0/24"

# 既存のWeb ACLにIPブロックルールを追加
aws wafv2 update-web-acl \
  --name "my-web-acl" \
  --scope CLOUDFRONT \
  --default-action '{"Allow":{}}' \
  --rules '[{"Name":"BlockDDoS","Priority":0,"Statement":{"IPSetReferenceStatement":{"ARN":"arn:aws:wafv2:..."}},"Action":{"Block":{}},"VisibilityConfig":{"SampledRequestsEnabled":true,"CloudWatchMetricsEnabled":true,"MetricName":"BlockDDoS"}}]'

2. CloudFrontのGeo制限(国外からの攻撃の場合)

aws cloudfront update-distribution \
  --id E1234567890 \
  --distribution-config '...' # Restrictionsで国コードをWhitelist指定

3. AWSサポートへの連絡

Business以上のサポートプランであれば、DDoS攻撃に起因するコスト増の免除申請(DDoS cost protection)が可能。Shield Advancedを契約している場合はSRTチーム(Shield Response Team)に直接エスカレーションできる。

事前に設定しておくべき防御策6選

防御1: AWS Budget Alertsの設定

最も基本的かつ見落とされがちな設定。日次予算アラートを設定し、通常の3倍を超えた時点で通知する。

aws budgets create-budget \
  --account-id 123456789012 \
  --budget '{
    "BudgetName": "DailySpendAlert",
    "BudgetLimit": {"Amount": "10000", "Unit": "USD"},
    "TimeUnit": "DAILY",
    "BudgetType": "COST"
  }' \
  --notifications-with-subscribers '[{
    "Notification": {"NotificationType":"ACTUAL","ComparisonOperator":"GREATER_THAN","Threshold":300,"ThresholdType":"PERCENTAGE"},
    "Subscribers": [{"SubscriptionType":"EMAIL","Address":"ops@example.com"}]
  }]'

防御2: WAFレートベースルール

同一IPからの過剰リクエストを自動ブロックする。5分間で2,000リクエストを超えたIPを自動遮断するルールが現実的な閾値。

# WAFルール内にレートベースステートメントを作成
aws wafv2 create-web-acl \
  --name "rate-limit-acl" \
  --scope CLOUDFRONT \
  --default-action '{"Allow":{}}' \
  --rules '[{"Name":"RateLimit","Priority":1,"Statement":{"RateBasedStatement":{"Limit":2000,"AggregateKeyType":"IP"}},"Action":{"Block":{}},"VisibilityConfig":{"SampledRequestsEnabled":true,"CloudWatchMetricsEnabled":true,"MetricName":"RateLimit"}}]'

防御3: CloudFrontのOrigin Shield有効化

Origin Shieldを有効にすると、キャッシュレイヤーが1つ増え、オリジンサーバーへのリクエスト数を劇的に減らせる。これだけでDDoS時のバックエンド負荷とコストが大幅に下がる。

防御4: AWS Shield Advanced

月額3,000ドルと高額だが、DDoSによるコスト増加分の補填を受けられるDDoS cost protectionが付く。本番サービスを運用しているなら投資対効果は十分にある。

防御5: CloudFront Function でのボットフィルタリング

// CloudFront Functionでブラウザ以外のUser-Agentをブロック
function handler(event) {
  var ua = event.request.headers['user-agent']
    ? event.request.headers['user-agent'].value : '';
  if (!ua || ua.length < 10) {
    return { statusCode: 403, statusDescription: 'Forbidden' };
  }
  return event.request;
}

防御6: オートスケーリングの上限設定

EC2やECSのオートスケーリングに上限を設定していないと、DDoS時に無限にスケールしてコストが爆発する。最大インスタンス数を明示的に制限する。

aws autoscaling update-auto-scaling-group \
  --auto-scaling-group-name my-asg \
  --max-size 10

請求の免除交渉

Shield AdvancedのDDoS cost protectionを使えば、DDoS攻撃に起因するスケーリングコストの免除が可能だ。Shield Advancedを契約していなくても、AWSサポートに状況を説明し、CloudTrailとVPCフローログを証拠として提出することで一部免除が認められたケースもある。ただし確約はされていないため、事前の防御設定が最重要であることに変わりはない。

まとめ

DDoS対策は「攻撃を防ぐ」ことよりも「コストを制御する」ことが本質だ。AWSは攻撃トラフィックも正常トラフィックとして課金する。Budget Alerts、WAFレートリミット、オートスケーリング上限の3つは最低限今日中に設定してほしい。200万円の請求書を受け取ってからでは遅い。

25
23
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
25
23

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?