依照 AWS 最佳實務建立並保護 S3 儲存貯體,涵蓋存取控制、加密、監控及錯誤設定的修復。當使用者想要保護新儲存貯體、稽核現有儲存貯體、修復安全發現、設定加密或啟用記錄與監控時使用。請勿用於一般 S3 資料操作、S3 Tables 設定或探索現有資料資產。
概覽
實作分層的 S3 安全控制,涵蓋五個工作流程:保護新儲存貯體、稽核現有設定、修復發現、設定加密及啟用監控。遵循 AWS Well-Architected 安全最佳實務。
連線至 AWS MCP 伺服器時,使用其執行命令(沙箱執行、稽核記錄、可觀測性)。否則回退至 AWS CLI 或 shell。
常見任務
0. 驗證相依項目
開始前檢查所需工具。
限制:
- 若缺少必要工具,您必須告知使用者
- 您應使用
aws sts get-caller-identity確認憑證
各工作流程的 IAM 權限請參閱 references/iam-permissions.md。
1. 分類請求
| 使用者意圖 | 工作流程 |
|---|---|
| 保護新儲存貯體 | A:保護新儲存貯體 |
| 稽核/檢視現有儲存貯體 | B:稽核現有儲存貯體 |
| 修復特定發現 | C:修復問題 |
| 設定加密 | D:設定加密 |
| 啟用記錄/監控 | E:啟用監控 |
限制:
- 您必須事先詢問所有必要參數
- 在任何寫入操作前,您必須確認儲存貯體名稱與區域
- 若使用者明確提及區域,您可推斷該區域
- 在寫入操作前,您應執行
aws iam simulate-principal-policy驗證權限 - 您應顯示寫入命令並等待確認後再執行
put-bucket-policy 安全規則
以下規則適用於所有呼叫 put-bucket-policy 的工作流程:
- 您必須先嘗試擷取現有政策(
aws s3api get-bucket-policy)——put-bucket-policy會取代整個政策 - 若政策存在,您必須先備份:
aws s3api get-bucket-policy --bucket <name> --output text > backup-policy-$(date +%s).json - 若回傳
NoSuchBucketPolicy,則直接建立新政策,無需備份 - 您必須將新陳述合併至現有政策的 Statement 陣列中(若存在)
- 套用前,您必須驗證合併後的 JSON 語法(例如
echo '<policy>' | python3 -m json.tool) - 您應顯示完整的
put-bucket-policy命令並等待確認
2. 工作流程 A — 保護新儲存貯體
完整 CLI 步驟請參閱 references/workflows.md。
必要步驟(依序執行,不可跳過):
- 使用
--bucket-namespace account-regional建立儲存貯體 - 啟用版本控制
- 啟用加密(SSE-S3 + Bucket Keys + 封鎖 SSE-C)
- 啟用記錄(詢問使用者選擇哪個選項——條件性)
- 透過
DenyInsecureTransport儲存貯體政策強制僅使用 HTTPS - 啟用 ABAC
限制:
-
在
create-bucket呼叫中,您必須傳遞--bucket-namespace account-regional——這是必要參數,非選用。範例:aws s3api create-bucket --bucket <name> --bucket-namespace account-regional --region <region> -
您不得變更 Block Public Access——S3 預設在新儲存貯體上啟用此功能
-
您不得變更 ACL 擁有權控制——S3 預設停用 ACL(
BucketOwnerEnforced) -
您必須套用包含
DenyInsecureTransport陳述的儲存貯體政策,該陳述在aws:SecureTransport為false時拒絕s3:*——這是必要項目,非選用。範例:aws s3api put-bucket-policy --bucket <name> --policy '{"Version":"2012-10-17","Statement":[{"Sid":"DenyInsecureTransport","Effect":"Deny","Principal":"*","Action":"s3:*","Resource":["arn:aws:s3:::<name>/*","arn:aws:s3:::<name>"],"Condition":{"Bool":{"aws:SecureTransport":"false"}}}]}' -
在步驟 4 之前,您必須詢問使用者想要的記錄選項
-
對於步驟 4 和 5,您必須遵循 put-bucket-policy 安全規則
-
您應確認每個步驟成功後再繼續
3. 工作流程 B — 稽核現有儲存貯體
完整檢查清單請參閱 references/audit-checklist.md。
限制:
- 在報告發現之前,您必須執行所有唯讀稽核命令
- 稽核期間,您不得執行任何寫入或修改命令
- 您必須將每個控制項報告為 PASS / FAIL / NOT CONFIGURED,並附上嚴重性
- 對於記錄:若啟用了 S3 伺服器存取記錄或 CloudTrail 資料事件,則報告 PASS;若兩者皆未啟用,則報告 NOT CONFIGURED
4. 工作流程 C — 修復問題
各問題類型的修復命令請參閱 references/remediation.md。
限制:
- 在套用任何修復前,您必須識別問題類型
- 修改政策時,您必須遵循 put-bucket-policy 安全規則
- 套用修復後,您必須重新執行相關稽核檢查以確認問題已解決
5. 工作流程 D — 設定加密
加密選項與命令請參閱 references/encryption.md。
限制:
- 除非使用者明確要求 KMS,否則您應預設使用 SSE-S3 搭配 S3 Bucket Keys 並封鎖 SSE-C
- 使用 SSE-KMS 時,您必須使用客戶管理金鑰——絕不可使用 AWS 管理的
aws/s3金鑰 - 您必須以完整 ARN(而非別名)指定客戶管理的 KMS 金鑰
- 在所有設定中,您必須包含
BucketKeyEnabled: true和BlockedEncryptionTypes: [SSE-C] - 注意:S3 API 會接受
aws/s3和別名而不報錯——此為代理程式強制的限制。套用後請使用get-bucket-encryption驗證。
6. 工作流程 E — 啟用監控
完整 CLI 步驟請參閱 references/workflows.md。
限制:
- 在建立 GuardDuty 偵測器之前,您必須檢查是否已存在
- CloudTrail 命令必須使用追蹤的 home 區域(而非儲存貯體的區域)
- 您應啟用所有四個核心建議的 AWS Config 規則
疑難排解
ObjectLockConfigurationNotFoundError — 未啟用物件鎖定。視為 NOT CONFIGURED,而非失敗。
稽核命令出現 AccessDenied — 檢查 IAM 政策、儲存貯體政策、Block Public Access、VPC 端點政策及 SCP/RCP。使用 aws iam simulate-principal-policy 診斷。
put-bucket-policy 無聲移除現有陳述 — 請參閱 put-bucket-policy 安全規則。
GuardDuty BadRequestException: detector already exists — 先執行 aws guardduty list-detectors;僅在結果為空時才呼叫 create-detector。
CloudTrail 變更未生效 — 確認您使用的是 --region <trail-home-region>,而非儲存貯體的區域。使用 aws cloudtrail describe-trails --query 'trailList[*].[Name,HomeRegion]' 查詢。
其他資源
- references/iam-permissions.md — 各工作流程的 IAM 權限
- references/audit-checklist.md — 各控制項的檢查清單,含嚴重性與通過條件
- references/encryption.md — 加密選項、KMS 指引、SSE-C 封鎖
- references/remediation.md — 常見發現的修復命令
- references/workflows.md — 工作流程 A 和 E 的完整 CLI 命令序列
- AWS S3 安全最佳實務
- AWS Well-Architected 安全支柱






