前言
我們在前一篇文章中,提到 S3 Bucket 架設靜態網站,就兩種做法。
- 如果桶子裡放靜態網頁,直接對外接收網頁請求,那就必須關掉 BPA (Block Public Access)。:
Client <--> S3 Bucket
- 或者是根據最佳實踐原則,用 CDN 夾在中間:
Client <--> CDN <--> S3 Bucket
關掉 BPA 會怎麼樣?
- 如果你確定桶裡面只放單純的靜態網頁,也確認只做單純的事情,那就關吧!
- Static Website 本來就要 讓任何人 GET Object。
- Bucket Policy 通常會寫成「只允許 s3:GetObject」。
缺點 / 潛在風險
- 人為錯誤風險提高
- 只要 BPA 關掉,之後誰都可以寫一個 更寬鬆的 Bucket Policy (新方法) 或 ACL (舊方法建議慢慢棄用)
- 如
s3:*
或 Principal: *
這種寬鬆 Bucket Policy,那 S3 不會再幫你擋。
- 意外把
s3:PutObject
、s3:DeleteObject
開放給匿名使用者
- 合規 / 安全掃描會報警告
- 很多資安工具(AWS Security Hub、Trusted Advisor、外部稽核)會看到「S3 BPA 關掉 + Public Bucket Policy」,就會亮紅燈。
- 即使這是你刻意設的「public website」,審計人員或 SOC 會認為是弱點,需要額外解釋。
- 沒使用 CDN 的壞處
- HTTPS(S3 website endpoint 只能 http,沒有 https)
- WAF / 防火牆規則(不能擋惡意請求)
- 快取與加速(全球訪客可能速度慢)
- 防盜鏈(不能限制 Referer / 簽名 URL)
- 容易被爬蟲掃描
- 雖然只是公開網頁檔案,但安全掃描器(Shodan、GreyNoise)會自動把 Public S3 bucket 列入可見清單。
- 雖然檔案內容沒什麼機密,但你的 Bucket 名稱 和 結構 會被知道(可能帶來額外攻擊面)。
結論
- 使用 CDN 可以改善使用者體驗。
- 不過依照經驗,用量低的時候會有比較貴一點點的傳輸費單價。
- 月用量超過 10TB 傳出,開始打折,會變便宜。