S3
S3
S3(Simple Storage Service)是 AWS 的物件儲存服務。每個檔案(object)放在一個 bucket 裡、用 key(路徑)定址。S3 的持久性設計為 99.999999999%(11 個 9),資料自動跨多個可用區複製,不需要手動備份 S3 本身——要保護的是「物件被覆寫或刪除」的風險,而非「S3 服務掛掉」的風險。
概念位置
S3 在 infra 系列裡有三個角色:Terraform state 的存放處(remote state backend)、應用程式的靜態檔案儲存(上傳內容、備份歸檔)、以及 log 的長期保存目的地。模組一(state backend)、模組五(storage)、模組八(治理)都涉及 S3。
可觀察訊號
需要理解 S3 的情境包括:設定 Terraform 的 remote state backend、管理使用者上傳的檔案、設計備份歸檔策略、或評估儲存成本。
設計責任
使用 S3 時要決定的關鍵設定:
| 設定 | 決定什麼 | 影響 |
|---|---|---|
| versioning | 是否保留物件的歷史版本 | 覆寫或刪除後能回溯(state bucket 必開) |
| encryption | 靜態加密方式(SSE-S3 / SSE-KMS) | 合規與金鑰管理 |
| public access block | 是否封鎖公開存取 | 安全(預設全封鎖) |
| lifecycle rules | 自動移到低成本儲存類或過期刪除 | 成本控制(如 30 天後移到 Glacier) |
| bucket policy | 跨帳號或跨服務的存取規則 | 權限邊界 |
versioning 開啟後,刪除物件只是加一個 delete marker、實際資料還在。要真正刪除需要刪除 delete marker 和所有歷史版本。這是保護 state 檔的關鍵機制——誤寫 state 後可以回捲到上一個版本。