130
131

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万円に!S3・CloudFrontで絶対やるべきコスト爆発防止策 6選

130
Posted at

はじめに

こんばんは、mirukyです。

ある日突然、AWSから $15,000(約200万円)の請求書 が届いたらどうしますか?

2026年3月、海外でまさにこの事態が発生しました。個人開発者のS3バケットがDDoS攻撃を受け、3日間で160TBのデータ転送が発生。結果として約200万円の請求が来たのです。AWS側に減額を申し出て一部減額は受けたものの、それでも到底払えない金額が残りました。

怖いのは、この事態は誰にでも起こりうるということです。S3バケットをパブリックに公開している、あるいはCloudFrontの背後に適切な保護を設定していない——それだけで、あなたのAWSアカウントも同じリスクを抱えています。

本記事では、AWS公式ドキュメントと料金体系に基づき、S3/CloudFrontのコスト爆発を防ぐための具体的な防止策をコンパクトにまとめます。

目次

  1. なぜS3のデータ転送で200万円になるのか
  2. 防止策①:S3バケットを直接公開しない
  3. 防止策②:CloudFront + OACで配信する
  4. 防止策③:AWS WAFでレート制限をかける
  5. 防止策④:AWS Budgetsでアラートを設定する
  6. 防止策⑤:CloudFront定額料金プランを使う
  7. 防止策⑥:AWS Shield を理解する
  8. 今すぐやるべき設定チェックリスト

1. なぜS3のデータ転送で200万円になるのか

1-1. S3のデータ転送料金の仕組み

スクリーンショット 2026-03-26 23.22.26.png

S3の利用料金で最も高額になりがちなのは、データ転送(OUT) です。

項目 東京リージョン料金(2026年3月時点)
S3ストレージ $0.025/GB/月(S3 Standard)
GET リクエスト $0.00037/1,000リクエスト
データ転送 OUT(10TBまで) $0.114/GB
データ転送 OUT(10TB〜50TB) $0.089/GB
データ転送 OUT(50TB〜150TB) $0.086/GB
データ転送 OUT(150TB超) $0.084/GB

出典:Amazon S3 料金表

1-2. 160TB転送の試算

実際に160TBが転送された場合の概算です。

最初の10TB:   10,000 GB × $0.114 = $1,140
次の40TB:     40,000 GB × $0.089 = $3,560
次の100TB:   100,000 GB × $0.086 = $8,600
残りの10TB:   10,000 GB × $0.084 = $840

合計: 約 $14,140(約200万円)

実際の請求にはリクエスト料金等も加算されるため、冒頭で紹介したケースでは約$15,000に達しました。つまり、コストのほぼ100%がデータ転送料金です。

1-3. なぜDDoSで転送が発生するのか

S3バケットが直接インターネットに公開されている場合、攻撃者はバケット内のオブジェクトに対して大量のGETリクエストを送信できます。

攻撃者 → S3バケット(パブリック)→ データ転送 OUT → 課金
  ↑
  バケット名さえ分かれば攻撃可能

重要:S3にはレート制限がない
S3はデフォルトで毎秒5,500 GETリクエスト(プレフィックスあたり)をサポートしており、レート制限の仕組みがありません。つまり、パブリックバケットに対しては事実上無制限にリクエストを送り続けられます

2. 防止策①:S3バケットを直接公開しない

2-1. S3 Block Public Access を有効にする

最も基本的かつ最重要の設定です。2023年4月以降、新規作成されたS3バケットはデフォルトでBlock Public Accessが有効になっていますが、古いバケットでは無効のままの場合があります。

// S3 Block Public Access の設定(すべてONにする)
{
  "BlockPublicAcls": true,
  "IgnorePublicAcls": true,
  "BlockPublicPolicy": true,
  "RestrictPublicBuckets": true
}

AWS CLIで確認する方法:

aws s3api get-public-access-block --bucket YOUR_BUCKET_NAME

出典:Amazon S3 Block Public Access

2-2. S3の403エラーリクエストは課金されない

2024年5月、AWSは 「S3が返す403(Access Denied)および404(Not Found)のHTTPエラーコードについてはリクエスト料金を課金しない」 と発表しました。

つまり、Block Public Accessを有効にしていれば、不正なリクエストが大量に来ても リクエスト料金は発生しません。そしてアクセスが拒否されるため データ転送も発生しません

これが最もコスパの良い防御策
Block Public Accessは無料です。設定するだけでS3が直接攻撃される経路を遮断でき、不正リクエストに対する課金も発生しません。

3. 防止策②:CloudFront + OACで配信する

3-1. なぜCloudFrontを前に置くべきか

S3のコンテンツをインターネットに配信する必要がある場合、S3を直接公開するのではなく、CloudFrontを前段に配置すべきです。

項目 S3直接配信 CloudFront経由
データ転送料金 $0.114/GB $0.114/GB(日本向け)
S3→CloudFrontの転送 無料
キャッシュヒット なし キャッシュされたリクエストはS3にアクセスしない
DDoS保護 なし AWS Shield Standard(自動・無料)
レート制限 なし AWS WAFと連携可能
地理的制限 なし Geo Restrictionで国単位でブロック可能

出典:Amazon CloudFront 料金表Amazon S3 料金表

3-2. OAC(Origin Access Control)の設定

CloudFrontを前段に置く場合、S3への直接アクセスを完全にブロックし、CloudFront経由のみ許可する必要があります。これがOAC(Origin Access Control)です。

// S3バケットポリシー(CloudFront OAC用)
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "AllowCloudFrontServicePrincipalReadOnly",
      "Effect": "Allow",
      "Principal": {
        "Service": "cloudfront.amazonaws.com"
      },
      "Action": "s3:GetObject",
      "Resource": "arn:aws:s3:::YOUR_BUCKET_NAME/*",
      "Condition": {
        "StringEquals": {
          "AWS:SourceArn": "arn:aws:cloudfront::YOUR_ACCOUNT_ID:distribution/YOUR_DISTRIBUTION_ID"
        }
      }
    }
  ]
}

これにより、構成は以下のようになります。

攻撃者 → S3バケット → ❌ アクセス拒否(課金なし)
攻撃者 → CloudFront → キャッシュヒット → レスポンス(S3へのリクエストなし)
攻撃者 → CloudFront → AWS WAF → ❌ レート制限でブロック

出典:Restricting access to an Amazon S3 origin

OAI(Origin Access Identity)は非推奨
以前使われていたOAI は現在はレガシーです。新規設定では必ずOACを使用してください。OACはSSE-KMS暗号化やすべてのS3リージョンをサポートしています。

4. 防止策③:AWS WAFでレート制限をかける

4-1. レートベースルールの設定

CloudFrontにAWS WAFを関連付けて、同一IPからの過剰なリクエストを自動ブロックできます。

設定項目 推奨値
ルールタイプ Rate-based rule
レート制限 5分間で2,000リクエスト(用途に応じて調整)
アクション Block
評価ウィンドウ 5分

4-2. AWS WAFの料金

項目 料金
Web ACL $5.00/月
ルール $1.00/月/ルール
リクエスト処理 $0.60/100万リクエスト

出典:AWS WAF 料金表

月額の目安: Web ACL 1つ + レートベースルール1つ + マネージドルールグループ1つ = 約$7〜8/月

$7/月のコストで200万円の請求を防げると考えれば、費用対効果は圧倒的です。

AWS WAFマネージドルール
AWSが提供する無料のマネージドルールグループ「AWS IP Reputation List」を追加すると、既知の悪意あるIPアドレスからのリクエストを自動的にブロックできます。

5. 防止策④:AWS Budgetsでアラートを設定する

5-1. コスト異常の早期検知

すべての防御を突破された場合に備え、コストの異常を即座に検知する仕組みが必要です。

AWS Budgetsでは、以下のようなアラートを設定できます。

アラート設定 内容
月次予算 例: $50を超えたらメール通知
予測アラート 月末予測が$100を超えたら通知
サービス別フィルタ S3のデータ転送のみを監視
アクション 予算超過時にIAMポリシーを適用(S3へのアクセスを制限)

出典:AWS Budgets

5-2. AWS Cost Anomaly Detection

AWS Budgetsに加えて、AWS Cost Anomaly Detectionを有効にすることで、機械学習ベースの異常検知が利用できます。

  • 過去の利用パターンを学習し、異常な支出を自動検知
  • 通知先としてメール、SNS、Slackなどを指定可能
  • 追加料金なし
通常: S3データ転送 $5/日
異常: S3データ転送 $500/日 ← ここで即座にアラート

Budgetsだけでは不十分
AWS Budgetsのアラートは数時間の遅延があります。DDoS攻撃のように短時間で大量のコストが発生するケースでは、Budgetsだけでは間に合わない場合があります。CloudFrontの定額プランやWAFによる「攻撃そのものを防ぐ」対策と必ず併用してください。

6. 防止策⑤:CloudFront定額料金プランを使う

6-1. 超過料金なしの新料金体系

2024年にAWSは CloudFront定額料金プラン を発表しました。従来の従量課金に加えて、月額固定・超過料金なしのプランが選べます。

プラン 月額 リクエスト データ転送 WAF・DDoS保護
Free $0 1M 100 GB 基本保護
Starter $15 10M 50 TB ユースケース保護
Standard $200 125M 50 TB 高度な保護
Premium $1,000 500M 50 TB 高度な保護

出典:Amazon CloudFront 料金表

6-2. 定額プランの最大のメリット

従量課金の場合 定額プラン(Standard)の場合
DDoSで160TB転送 → $14,140 DDoSで160TB転送 → $200/月のまま
使った分だけ無制限に課金される 超過料金なし(※使用量超過時はスロットリング等の可能性あり)
予算の見通しを立てにくい 毎月の支出が確定している

ブロックされたDDoS攻撃は使用許容量に含まれない
CloudFront定額プランでは、AWS Shield/WAFによってブロックされたDDoS攻撃やWAFでブロックしたリクエストは使用許容量にカウントされません。つまり、攻撃を受けても正当なトラフィックの枠を消費しません。

7. 防止策⑥:AWS Shield を理解する

7-1. Shield Standard vs Shield Advanced

項目 Shield Standard Shield Advanced
料金 無料(自動有効) $3,000/月 + データ転送料
保護レイヤー L3/L4(ネットワーク・トランスポート層) L3/L4 + L7(アプリケーション層)
対象サービス CloudFront, Route 53, ELB等 同左 + EC2, Global Accelerator
DDoSコスト保護 なし あり(DDoS起因のスケーリングコストを返金)
SRT(Shield Response Team) なし 24/7対応
WAF費用 別途課金 保護対象リソースのWAFは含まれる

出典:AWS Shield 料金表

7-2. 個人・小規模プロジェクトの場合

Shield Advancedは月額$3,000なので、個人開発や小規模プロジェクトには現実的ではありません。

しかし、Shield Standardは無料で自動的に有効です。CloudFrontを使用するだけで、SYN Flood、UDP Reflection等の一般的なL3/L4 DDoS攻撃からは自動保護されます。

アプリケーション層(L7)の保護はAWS WAFのレートベースルールで対応するのがコスパの良い選択です。

8. 今すぐやるべき設定チェックリスト

上記の防止策を優先度順にまとめました。

優先度 対策 コスト 効果
最優先 S3 Block Public Accessを全バケットで有効化 無料 S3への直接攻撃を遮断
最優先 CloudFront + OACでコンテンツを配信 CloudFront従量課金 or 定額$0〜 S3を非公開にしつつ配信可能
強く推奨 AWS WAFのレートベースルールを設定 約$7〜8/月 L7 DDoS攻撃をブロック
強く推奨 AWS Budgets + Cost Anomaly Detectionを設定 無料 コスト異常の早期検知
推奨 CloudFront定額料金プランの検討 $0〜$200/月 超過料金なしでコスト上限を確定
大規模向け AWS Shield Advanced $3,000/月 DDoSコスト保護 + SRT
最小構成(無料で今すぐできること):
  ・S3 Block Public Access を有効化
  ・CloudFront + OAC を設定(Freeプラン: $0/月)
  ・AWS Budgets でアラートを設定
  ・Cost Anomaly Detection を有効化

  → これだけで200万円の請求リスクをほぼゼロにできる

おわりに

ここまでお読みいただきありがとうございます。

今回のケースから学べる最も重要な教訓は、AWSのコスト爆発は「攻撃された後」ではなく「設定を怠った時点」で始まっているということです。

  • S3バケットを直接公開しない(Block Public Access)
  • CloudFront + OACで配信する
  • AWS WAFでレート制限をかける
  • AWS Budgetsで異常を検知する

これらはすべて数分〜数十分で設定でき、ほとんどが無料です。200万円の請求書が届いてからでは遅いので、この記事を読んだらすぐに自分のAWSアカウントを確認してみてください。

ではまた、お会いしましょう。

参考リンク

AWS公式ドキュメント

130
131
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
130
131

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?