前言

晚上好,我是 miruky。

有一天如果突然收到來自 AWS 的 $15,000(約 200 萬日圓 / 視匯率而定)的帳單,你會怎麼做?

2026 年 3 月,海外就發生了這樣的事件。某位個人開發者的 S3 儲存桶遭到 DDoS 攻擊,3 天內產生 160 TB 的資料傳輸,結果收到約 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. 現在就要做的設定檢查清單

  9. 為何 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(至 10 TB):$0.114/GB
  • 資料傳輸 OUT(10 TB〜50 TB):$0.089/GB
  • 資料傳輸 OUT(50 TB〜150 TB):$0.086/GB
  • 資料傳輸 OUT(超過 150 TB):$0.084/GB

出處:Amazon S3 Pricing

1-2. 160 TB 傳輸的試算

若實際傳輸 160 TB,概算如下:

最初的 10 TB:   10,000 GB × $0.114 = $1,140
接下來的 40 TB: 40,000 GB × $0.089 = $3,560
接下來的 100 TB:100,000 GB × $0.086 = $8,600
剩餘的 10 TB:    10,000 GB × $0.084 = $840

合計: 約 $14,140(約 200 萬日圓)

實際帳單還會加上請求費用等,於是前面提到的案例達到了 約 $15,000。也就是說,成本幾乎 100% 來自資料傳輸費

1-3. 為何 DDoS 會造成大量傳輸

若 S3 儲存桶直接對外公開,攻擊者可以對桶內物件發送大量 GET 請求。

攻擊者 → S3 儲存桶(公開)→ 資料傳輸 OUT → 計費
  ↑
  只要知道儲存桶名稱就能攻擊

重要:S3 本身沒有速率限制
S3 預設每秒支援每個前綴約 5,500 次 GET 請求,且並無內建限制機制。也就是說,對公開桶而言,攻擊者可以「事實上無限制地」持續發送請求。

  1. 防止策①:不要直接公開 S3 儲存桶

2-1. 啟用 S3 Block Public Access(封鎖公開存取)

這是 最基本且最重要的設定。自 2023 年 4 月起,新建立的 S3 儲存桶預設會啟用 Block Public Access,但舊的桶可能還沒啟用。

可設定如下(將所有選項打開):

{
  "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 被直接攻擊的路徑,且不會因不當請求而產生計費。

  1. 防止策②:以 CloudFront + OAC 進行發佈

3-1. 為何應該把 CloudFront 放在前端

若需要把 S3 的內容對外發佈,應該 不要直接公開 S3,而是在前端放置 CloudFront

比較:

  • S3 直接發佈

    • 資料傳輸:$0.114/GB
    • S3→CloudFront 的傳輸:—
    • 快取命中:無
    • DDoS 保護:無
    • 速率限制:無
    • 地理限制:無
  • 經由 CloudFront

    • 資料傳輸:$0.114/GB(針對日本流量)
    • S3→CloudFront:免費
    • 快取命中:命中時不會存取 S3
    • DDoS 保護:AWS Shield Standard(自動、免費)
    • 速率限制:可與 AWS WAF 整合
    • 地理限制:可用 Geo Restriction 針對國家阻擋

出處:Amazon CloudFront PricingAmazon S3 Pricing

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 區域。

  1. 防止策③:用 AWS WAF 設定速率限制

4-1. 設定 Rate-based 規則

將 AWS WAF 關聯至 CloudFront,可以 自動阻擋來自同一 IP 的過量請求

建議設定:

  • 規則類型:Rate-based rule
  • 速率限制:5 分鐘內 2,000 請求(視情境調整)
  • 動作:Block
  • 評估視窗:5 分鐘

4-2. AWS WAF 的費用

  • Web ACL:$5.00 / 月
  • 規則:$1.00 / 月 / 規則
  • 請求處理:$0.60 / 100 萬請求

出處:AWS WAF Pricing

月費估算:Web ACL 1 個 + Rate-based 規則 1 個 + Managed rule group 1 個 ≒ 約 $7–8/月

若用 $7/月 的成本來預防 200 萬日圓的帳單,費用效益非常高

AWS WAF 管理式規則
加入 AWS 提供的免費管理式規則群組「AWS IP Reputation List」可以自動阻擋已知惡意的 IP。

  1. 防止策④:用 AWS Budgets 設定警示

5-1. 及早偵測成本異常

即便所有防線被突破,仍需要能立即偵測成本異常的機制。

在 AWS Budgets 可設定以下警示:

  • 月度預算:例如達到 $50 時發送郵件
  • 預測警示:若月末預測超過 $100 則通知
  • 服務別過濾:只監控 S3 的資料傳輸
  • 動作:當預算超出時套用 IAM policy(限制對 S3 的存取)

出處:AWS Budgets

5-2. AWS Cost Anomaly Detection

除了 Budgets,啟用 AWS Cost Anomaly Detection 可以使用機器學習的異常偵測功能。

  • 學習過去使用模式,自動偵測異常支出
  • 通知可以透過電子郵件、SNS、Slack 等發送
  • 無額外費用

範例:

通常: S3 資料傳輸 $5/日
異常: S3 資料傳輸 $500/日 ← 此時立即收到警示

注意:僅靠 Budgets 不足
AWS Budgets 的警示具有 數小時的延遲。對於像 DDoS 這種在短時間內產生大量成本的情境,僅靠 Budgets 可能來不及。因此務必搭配 CloudFront 的定額方案或 WAF 來「阻止攻擊本身」。

  1. 防止策⑤:使用 CloudFront 定額費率方案

6-1. 無超額費用的新費率體系

2024 年 AWS 推出 CloudFront 定額費率方案。除了傳統的依量計費,現在可選擇「月付固定、無超額費用」的方案。

方案摘要:

  • Free:$0/月,1M 請求,100 GB 傳輸,基本保護
  • Starter:$15/月,10M 請求,50 TB 傳輸,含基本 WAF/DDoS 防護
  • Standard:$200/月,125M 請求,50 TB 傳輸,高度保護
  • Premium:$1,000/月,500M 請求,50 TB 傳輸,高度保護

出處:Amazon CloudFront Pricing

(上表為範例摘要,實際方案與價格請以 AWS 官方頁面為準)

6-2. 定額方案的最大優點

比較:

  • 従量計費情況:若 DDoS 造成 160 TB 傳輸 → $14,140
  • 定額方案(Standard)情況:即使 DDoS 造成 160 TB 傳輸 → 每月仍維持 $200

重點:

  • 定額方案不會因超量而額外計費(※實際情況可能在超量時進行節流等控制)
  • 定額方案能讓預算可預測,每月支出固定
  • CloudFront 定額方案中,經由 AWS Shield / WAF 被「阻擋」的 DDoS 或被 WAF 阻擋的請求,不會計入使用配額。因此攻擊流量不會消耗到正當流量的額度
  1. 防止策⑥:理解 AWS Shield

7-1. Shield Standard vs Shield Advanced

  • Shield Standard

    • 費用:免費(自動啟用)
    • 保護層級:L3 / L4(網路層 / 傳輸層)
    • 適用服務:CloudFront、Route 53、ELB 等
    • DDoS 成本保護:無
    • SRT(Shield Response Team):無
    • WAF 費用:另計
  • Shield Advanced

    • 費用:$3,000 / 月 + 資料傳輸費
    • 保護層級:L3 / L4 + L7(應用層)
    • 適用服務:上述同左 + EC2、Global Accelerator
    • DDoS 成本保護:有(可退還因 DDoS 引起的擴展成本)
    • SRT:24/7 支援
    • WAF:保護的資源其 WAF 成本包含在內(但視方案而定)

出處:AWS Shield Pricing

7-2. 個人或小規模專案的情況

Shield Advanced 每月 $3,000,對個人或小型專案並不現實。

不過 Shield Standard 是免費且自動生效的。只要使用 CloudFront,就能自動獲得對 SYN Flood、UDP Reflection 等常見 L3/L4 DDoS 的防護。

對應應用層(L7)的防護,使用 AWS WAF 的 rate-based 規則是較具成本效益的方式。

  1. 現在就要做的設定檢查清單

將上述防護依優先度整理如下。

優先度 / 對策 / 成本效益

  • 最優先:在所有儲存桶啟用 S3 Block Public Access — 免費 — 阻斷對 S3 的直接攻擊
  • 最優先:以 CloudFront + OAC 發佈內容 — CloudFront 按量計費或定額 $0~ — 能在不公開 S3 的情況下發佈
  • 強烈建議:設定 AWS WAF 的 rate-based 規則 — 約 $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 官方文件


原文出處:https://qiita.com/miruky/items/b996e374c91923141178


精選技術文章翻譯,幫助開發者持續吸收新知。

共有 0 則留言


精選技術文章翻譯,幫助開發者持續吸收新知。
🏆 本月排行榜
🥇
站長阿川
📝12   💬10   ❤️2
361
🥈
我愛JS
📝2   💬9   ❤️2
93
🥉
💬1  
4
評分標準:發文×10 + 留言×3 + 獲讚×5 + 點讚×1 + 瀏覽數÷10
本數據每小時更新一次
📢 贊助商廣告 · 我要刊登