securing-s3-buckets

securing-s3-buckets

熱門

依照 AWS 最佳實務建立並保護 S3 儲存貯體,涵蓋存取控制、加密、監控及錯誤設定的修復。當使用者想要保護新儲存貯體、稽核現有儲存貯體、修復安全發現、設定加密或啟用記錄與監控時使用。請勿用於一般 S3 資料操作、S3 Tables 設定或探索現有資料資產。

2147星標
202分支
更新於 2026/7/27
SKILL.md
唯讀
名稱
securing-s3-buckets
描述

依照 AWS 最佳實務建立並保護 S3 儲存貯體,涵蓋存取控制、加密、監控及錯誤設定的修復。當使用者想要保護新儲存貯體、稽核現有儲存貯體、修復安全發現、設定加密或啟用記錄與監控時使用。請勿用於一般 S3 資料操作、S3 Tables 設定或探索現有資料資產。

版本
1

概覽

實作分層的 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

必要步驟(依序執行,不可跳過):

  1. 使用 --bucket-namespace account-regional 建立儲存貯體
  2. 啟用版本控制
  3. 啟用加密(SSE-S3 + Bucket Keys + 封鎖 SSE-C)
  4. 啟用記錄(詢問使用者選擇哪個選項——條件性)
  5. 透過 DenyInsecureTransport 儲存貯體政策強制僅使用 HTTPS
  6. 啟用 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:SecureTransportfalse 時拒絕 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: trueBlockedEncryptionTypes: [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]' 查詢。

其他資源