晚上好,我是 miruky。
有一天如果突然收到來自 AWS 的 $15,000(約 200 萬日圓 / 視匯率而定)的帳單,你會怎麼做?
2026 年 3 月,海外就發生了這樣的事件。某位個人開發者的 S3 儲存桶遭到 DDoS 攻擊,3 天內產生 160 TB 的資料傳輸,結果收到約 200 萬日圓的帳單。雖然向 AWS 申請部分減免並獲得同意,但仍遺留了難以負擔的金額。
可怕的是,這種情況可能發生在任何人身上。只要 S3 儲存桶設為公開、或沒有在 CloudFront 後端設定適當保護——你的 AWS 帳號就可能面臨同樣風險。
本文將基於 AWS 官方文件與計費規則,簡潔地整理出 防止 S3 / CloudFront 成本暴增的具體對策。
為何 S3 的資料傳輸會變成 200 萬日圓等級
防止策①:不要直接公開 S3 儲存桶
防止策②:以 CloudFront + OAC 進行發佈
防止策③:用 AWS WAF 設定速率限制
防止策④:用 AWS Budgets 設定警示
防止策⑤:使用 CloudFront 定額費率方案
防止策⑥:理解 AWS Shield
現在就要做的設定檢查清單

在 S3 的使用費用中,最可能高額的就是 資料傳輸(OUT)。
項目(東京區域價格,2026 年 3 月時點)
若實際傳輸 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% 來自資料傳輸費。
若 S3 儲存桶直接對外公開,攻擊者可以對桶內物件發送大量 GET 請求。
攻擊者 → S3 儲存桶(公開)→ 資料傳輸 OUT → 計費
↑
只要知道儲存桶名稱就能攻擊
重要:S3 本身沒有速率限制
S3 預設每秒支援每個前綴約 5,500 次 GET 請求,且並無內建限制機制。也就是說,對公開桶而言,攻擊者可以「事實上無限制地」持續發送請求。
這是 最基本且最重要的設定。自 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
2024 年 5 月,AWS 宣布 對於 S3 回傳的 403(Access Denied)與 404(Not Found)HTTP 錯誤碼,不會收取請求費用。
也就是說,只要啟用 Block Public Access,即使有大量不當請求到來,請求費用不會產生,同時因為存取被拒絕,也不會產生資料傳輸。
這是最具成本效益的防禦措施
Block Public Access 是免費的。只要設定好,就能切斷 S3 被直接攻擊的路徑,且不會因不當請求而產生計費。
若需要把 S3 的內容對外發佈,應該 不要直接公開 S3,而是在前端放置 CloudFront。
比較:
S3 直接發佈
經由 CloudFront
出處:Amazon CloudFront Pricing、Amazon S3 Pricing
當在前端放 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 區域。
將 AWS WAF 關聯至 CloudFront,可以 自動阻擋來自同一 IP 的過量請求。
建議設定:
月費估算:Web ACL 1 個 + Rate-based 規則 1 個 + Managed rule group 1 個 ≒ 約 $7–8/月
若用 $7/月 的成本來預防 200 萬日圓的帳單,費用效益非常高。
AWS WAF 管理式規則
加入 AWS 提供的免費管理式規則群組「AWS IP Reputation List」可以自動阻擋已知惡意的 IP。
即便所有防線被突破,仍需要能立即偵測成本異常的機制。
在 AWS Budgets 可設定以下警示:
出處:AWS Budgets
除了 Budgets,啟用 AWS Cost Anomaly Detection 可以使用機器學習的異常偵測功能。
範例:
通常: S3 資料傳輸 $5/日
異常: S3 資料傳輸 $500/日 ← 此時立即收到警示
注意:僅靠 Budgets 不足
AWS Budgets 的警示具有 數小時的延遲。對於像 DDoS 這種在短時間內產生大量成本的情境,僅靠 Budgets 可能來不及。因此務必搭配 CloudFront 的定額方案或 WAF 來「阻止攻擊本身」。
2024 年 AWS 推出 CloudFront 定額費率方案。除了傳統的依量計費,現在可選擇「月付固定、無超額費用」的方案。
方案摘要:
(上表為範例摘要,實際方案與價格請以 AWS 官方頁面為準)
比較:
重點:
Shield Standard
Shield Advanced
Shield Advanced 每月 $3,000,對個人或小型專案並不現實。
不過 Shield Standard 是免費且自動生效的。只要使用 CloudFront,就能自動獲得對 SYN Flood、UDP Reflection 等常見 L3/L4 DDoS 的防護。
對應應用層(L7)的防護,使用 AWS WAF 的 rate-based 規則是較具成本效益的方式。
將上述防護依優先度整理如下。
優先度 / 對策 / 成本效益
最小構成(現在就能免費做到的項目):
啟用 Cost Anomaly Detection
→ 僅靠這些設定就能將 200 萬日圓級帳單的風險幾乎降到零
感謝閱讀至此。
從這次案例可得的最重要教訓是:AWS 的成本暴增不是在「被攻擊之後」才開始,而是在「設定被疏忽的當下」就已經開始了。
這些設定大多數只要數分鐘到數十分鐘就能完成,且多數為免費項目。收到 200 萬日圓帳單以後就太晚了,讀完本文後請立刻檢查你的 AWS 帳號設定。
我們下次再見。
AWS 官方文件