examlab .net 用最有效率的方法,考取最有價值的證照
本篇導覽 約 26 分鐘

Parameter Store、Secrets Manager 與 KMS 金鑰管理

5,040 字 · 約 26 分鐘閱讀 ·

精通 DOP-C02 任務 6.1/6.2 的 SSM Parameter Store 與 Secrets Manager:SecureString 與 Secrets Manager 的區別、Lambda 自動輪換、透過資源政策進行跨帳戶共享、階層路徑、進階參數以及 CodePipeline 秘密注入。

立即做 20 題練習 → 免費 · 不用註冊 · DOP-C02

SSM Parameter Store 和 Secrets Manager 輪換 (rotation) 是 DevOps 團隊用來儲存、分發和輪換應用程式運作所需秘密 (secrets) —— 資料庫密碼、API 金鑰、OAuth 權杖、授權字串 —— 而無需將其嵌入程式碼的兩項 AWS 服務。在 DOP-C02 考試中,SSM Parameter Store 和 Secrets Manager 輪換出現在網域 6 任務 6.1 和 6.2(以及網域 1 任務 1.1 的管道秘密)的各個角落。常見情境包括:「每 30 天輪換一次資料庫憑證」、「跨 50 個帳戶共享 API 金鑰」、「ECS 任務需要秘密且不能洩漏環境變數」或「CodeBuild 必須在建置時獲取授權且不能提交它」。正確答案總是將正確的服務(Parameter Store 用於階層 + 低成本;Secrets Manager 用於輪換 + 跨帳戶共享)、正確的加密(KMS CMK 用於合規)以及正確的使用模式(CloudFormation 動態參照、ECS 任務秘密、受 IAM 保護的執行時獲取)組合成一個無秘密程式碼的架構。

本指南深入探討你在 DOP-C02 中會遇到的所有 SSM Parameter Store 和 Secrets Manager 輪換基本元件:Parameter Store 標準與進階層級、配合 KMS 的 SecureString、階層和基於 IAM 路徑的存取、參數標籤與版本控制、配合 Lambda 的 Secrets Manager 自動輪換、RDS/Aurora 多使用者輪換策略、透過資源政策進行跨帳戶秘密共享、多區域複寫、與 ECS 任務定義及 CodeBuild 環境變數的整合、使用 {{resolve:...}} 的 CloudFormation 動態參照、兩項服務之間的成本差異,以及典型的專業級情境 —— 跨多帳戶暫存/生產環境的管道驅動 30 天輪換。

什麼是 SSM Parameter Store 與 Secrets Manager 輪換?

SSM Parameter Store 是免費層級(標準層級)的階層式鍵值儲存庫,用於配置和秘密,具備選用的 KMS 加密 (SecureString) 和受 IAM 控制的存取。Secrets Manager 是成本較高、專門用於秘密的服務,具備透過 Lambda 進行的自動憑證輪換、原生 RDS/Aurora/Redshift/DocumentDB 整合、透過資源政策進行的跨帳戶共享、多區域複寫以及 7 天的軟刪除恢復期。兩者皆可使用 KMS 加密;兩者皆整合了 ECS、CodeBuild、CloudFormation、Lambda;兩者之間的選擇取決於輪換需求、跨帳戶需求以及單個秘密的成本。

為什麼 SSM Parameter Store 與 Secrets Manager 輪換對 DOP-C02 很重要

DOP-C02 任務 6.1 明確要求「自動化機器身分(例如 AWS Secrets Manager)的憑證輪換」作為必備技能。任務 1.1 要求「管理建置與部署秘密(例如 AWS Secrets Manager、AWS Systems Manager Parameter Store)」。任務 6.2 要求「資料管理(例如資料分類、加密、金鑰管理、存取控制)」。專業級情境測試精確了解權衡取捨 —— 何時使用哪種服務、何時兩者都需要,以及輪換如何與快取憑證的應用程式互動。

六個決策維度

在 SSM Parameter Store 與 Secrets Manager 輪換之間做選擇需要評估六個維度:輪換需求(Secrets Manager 內建;Parameter Store 沒有)、成本(Parameter Store 標準版免費;Secrets Manager 每個秘密每月 0.40 美元 + 每 1 萬次 API 呼叫 0.05 美元)、跨帳戶共享(Secrets Manager 具備資源政策;Parameter Store 進階層級支援有限的共享)、階層(Parameter Store 具備豐富的路徑階層;Secrets Manager 是平面的)、多區域(Secrets Manager 具備自動複寫;Parameter Store 需要 CloudFormation StackSets 或腳本)以及整合深度(RDS/Aurora 原生輪換僅在 Secrets Manager 中提供)。

白話文解釋 SSM Parameter Store 與 Secrets Manager 輪換

SSM Parameter Store 與 Secrets Manager 輪換聽起來很複雜,但三個日常類比可以揭示它們的角色。

類比 1 — 飯店房卡與萬用金鑰系統(餐旅業類比)

想像一家擁有 50 家分店(你的 AWS 帳戶)的飯店連鎖,有一個房卡管理中心系統和一個保險箱金庫。SSM Parameter Store 與 Secrets Manager 輪換就是這種分層金鑰系統。

前台在辦理入住時編程並在客人退房時自動失效的標準房卡 —— 用於日常進入客房 —— 就是 SSM Parameter Store SecureString 參數。製作成本低,易於按樓層組織(/floor3/room305, /floor4/room402 —— 階層路徑),使用飯店的萬用金鑰系統 (KMS CMK) 加密,但它們不會自動輪換;當客人變更時由你更換。銀行金庫每 30 天自動更換的保險箱鑰匙 —— 發放給需要定期更換鑰匙的長期租戶 —— 就是 Secrets Manager 秘密。每個鑰匙的成本較高,但金庫負責處理輪換:保險箱按計劃自動簽發新鑰匙,舊鑰匙被標記為暫存然後退役,租戶授權的設備會自動獲取新鑰匙。中央保安辦公室的萬用金鑰清單,任何物業經理都可以請求存取(跨飯店)就是 Secrets Manager 的跨帳戶資源政策 —— 在不創建 50 個獨立鑰匙的情況下與 50 個物業共享一個鑰匙。鏡像紐約金庫的拉斯維加斯備份金庫就是 Secrets Manager 的多區域複寫。讀取每次房卡刷卡記錄的監視器就是記錄每次 Parameter Store / Secrets Manager API 呼叫的 CloudTrail。使用 Parameter Store 處理廉價、階層式、非輪換的配置;使用 Secrets Manager 處理輪換、可跨帳戶共享、多區域的憑證。

類比 2 — 醫院藥房與藥車系統(藥房類比)

想像一家擁有一家中央藥房和許多病房藥車的醫院。SSM Parameter Store 與 Secrets Manager 輪換就是這種分層藥品分發系統。

藥品目錄 —— 藥名、劑量說明、病房專屬協議 —— 按科室組織(/cardiology/anti-hypertensive/dosage)且病房工作人員可透過識別證範圍權限存取,這就是具備階層和基於 IAM 路徑政策的 Parameter Store。目錄條目在存儲時加密 (SecureString),存儲免費,易於組織,但當協議變更時,藥劑師會手動更新它們。中央藥房自動輪換、具有強制性 30 天效力更換計劃的輪換抗生素供應 —— 舊藥瓶暫存後處置,新藥瓶供應 —— 就是具備自動輪換功能的 Secrets Manager。每個條目的成本較高,但沒人需要記得去輪換。透過簽署的協議書跨醫院共享稀有藥物配方就是 Secrets Manager 跨帳戶資源政策 —— 在多個 AWS 帳戶之間共享單個秘密而無需重複。衛星醫院的區域備災鏡像就是 Secrets Manager 多區域複寫。藥品管理日誌 —— 每次分發都有記錄 —— 就是 CloudTrail。專業級醫院兩者都用:目錄 (Parameter Store) 用於靜態參考資料,輪換 (Secrets Manager) 用於有時間限制的憑證式條目。

類比 3 — 大使館外交郵袋與代碼簿系統(外交類比)

想像一個在全球擁有 50 個使團的大使館網路。SSM Parameter Store 與 Secrets Manager 輪換就是這種分層加密材料分發系統。

按區域和等級組織的外交電話簿/asia-pacific/tokyo/ambassador/email, /europe/london/consul/cell) —— 可由授權工作人員按其識別證讀取 —— 就是具備基於 IAM 路徑存取的 Parameter Store 階層。使用大使館的萬用密碼 (KMS) 加密,存儲成本低,但更新是手動的。由總部簽發、具有強制性 30 天輪換期的外交密碼本 —— 舊密碼本被取代,新密碼本送達,使團自動獲取新密碼本 —— 就是 Secrets Manager 自動輪換。倫敦、巴黎和柏林都需要讀取的多使團共享代碼簿 —— 配置一次,透過跨使團權限存取 —— 就是具備跨帳戶資源政策的 Secrets Manager 秘密。快取在區域指揮中心的災難冗餘備份密碼本就是 Secrets Manager 多區域複寫。用於事後回顧的機密通訊日誌就是 CloudTrail。靜態參考資料 → Parameter Store。必須按計劃自動更新並跨使團複寫的加密材料 → Secrets Manager。

SSM Parameter Store — 階層式配置與廉價秘密

Parameter Store 是配置值和低成本秘密的主力。DOP-C02 要求掌握細節。

標準層級與進階層級

  • 標準層級 (Standard tier):每個帳戶每個區域最多免費 10,000 個參數,最大值大小 4 KB,預設速率限制為每秒 40 次交易。
  • 進階層級 (Advanced tier):每個參數每月 0.05 美元,最大值大小 8 KB,支援參數政策(到期、到期通知、無變更通知),具備更高的輸送量層級。

大多數秘密適合標準層級。當你需要參數政策(到期、通知)或更大的值時,請使用進階層級。

String, StringList, SecureString

Parameter Store 支援三種類型:

  • String:純文字鍵值對(標準 4 KB / 進階 8 KB)。
  • StringList:逗號分隔的字串清單(查詢時作為單個字串)。
  • SecureString:KMS 加密的值。當調用者傳遞 WithDecryption=true 且具備 KMS 金鑰權限時,在 GetParameter 時解密。

SecureString 使用你指定的 KMS CMK 或 AWS 受管的 aws/ssm 金鑰。為了合規,請務必使用客戶受管 CMK;你可以控制輪換、金鑰政策和稽核。

階層式路徑

參數名稱可以是階層式的:/myapp/prod/db/password, /myapp/staging/db/password, /myapp/prod/api/key。這種階層結構實現了:

  • 範圍限定在路徑前綴的 IAM 政策(Resource: arn:aws:ssm:us-east-1:123:parameter/myapp/prod/*
  • 透過 GetParametersByPath 遞迴進行批量獲取
  • 對應於環境、應用程式、組件的邏輯分組

參數版本控制與標籤

每次參數更新都會創建一個新版本 (1, 2, 3...)。版本是不可變的;舊版本保持可存取。標籤是指向特定版本的命名指標 —— LATEST, current, production-2025-04-01。在客戶端中參照標籤可以實現原子式的回滾(將 current 標籤從版本 5 移動到版本 4 = 瞬間回滾)。

參數變更時的 CloudWatch 事件

Parameter Store 在參數創建、更新、刪除時發送 EventBridge 事件。模式:參數變更 → EventBridge 規則 → Lambda 更新下游快取 / 觸發 ECS 服務重新部署。

Parameter Store 的 IAM 政策

{
  "Effect": "Allow",
  "Action": ["ssm:GetParameter", "ssm:GetParameters", "ssm:GetParametersByPath"],
  "Resource": "arn:aws:ssm:us-east-1:123:parameter/myapp/prod/*",
  "Condition": { "StringEquals": { "ssm:RecursiveLevels": "5" } }
}

對於 SecureString,還需在加密金鑰上授予 kms:Decrypt 權限。

提示:從第一天起就將 Parameter Store 階層設計為 /<應用程式>/<環境>/<組件>/<鍵> 這種模式實現了按應用程式+環境劃分的 IAM 範圍,使 GetParametersByPath 查詢變得高效,並在不重命名的情況下支援特定環境的部署。相反,像 myapp-prod-db-password 這樣的平面名稱會阻礙 IAM 範圍劃分並強迫逐一獲取。階層是免費的;以後重命名會很痛苦(每個使用者都會壞掉)。在 DOP-C02 中,具備階層意識的 IAM 政策和 GetParametersByPath 是正確答案模式;按鍵劃分的 IAM 平面名稱則是干擾項。

Secrets Manager — 內建輪換與跨帳戶共享

當涉及輪換、原生 RDS 整合或跨帳戶共享時,Secrets Manager 是專門的服務。

自動輪換架構

Secrets Manager 輪換透過 Lambda 函數(「輪換函數」)工作:

  1. 計劃(例如每 30 天)觸發輪換 Lambda。
  2. Lambda 對秘密執行四個階段:
    • createSecret:生成新憑證(例如新密碼)。
    • setSecret:在源端更新憑證(例如 RDS 使用者密碼變更)。
    • testSecret:驗證新憑證是否有效。
    • finishSecret:將新版本標記為 AWSCURRENT;舊版本變為 AWSPREVIOUS
  3. 獲取秘密的應用程式預設接收 AWSCURRENT。在輪換期間持有快取的 AWSPREVIOUS 的應用程式仍可繼續運作。

AWS 受管輪換範本

對於 RDS MySQL/PostgreSQL/Aurora/Oracle/SQL Server、MariaDB、DocumentDB、Redshift 和 Redshift Serverless,AWS 發布了預建的輪換 Lambda 範本。只需配置輪換計劃和輪換使用者;Secrets Manager 會從範本中配置 Lambda。這些服務不需要自定義程式碼。

單一使用者與多使用者輪換

資料庫憑證輪換的兩種策略:

  • 單一使用者 (Single-user):輪換 Lambda 更新同一使用者的密碼。進行中的連接可能會短暫失敗(快取的舊密碼被拒絕)。較簡單。
  • 多使用者(輪換使用者,Multi-user):兩個資料庫使用者(app_user_1, app_user_2)。輪換會交替哪個使用者是 AWSCURRENT。舊使用者的連接會自然耗盡;新連接使用新使用者。對於正確實作的應用程式可實現零停機時間。推薦用於生產環境。

DOP-C02 測試這種區別 —— 多使用者是「零停機輪換要求」的正確答案。

跨帳戶秘密共享

將資源政策附加到帳戶 A 中的秘密,允許帳戶 B 中的委託人調用 GetSecretValue

{
  "Effect": "Allow",
  "Principal": { "AWS": "arn:aws:iam::222222222222:role/app-role" },
  "Action": "secretsmanager:GetSecretValue",
  "Resource": "*"
}

KMS 金鑰也必須允許帳戶 B(金鑰政策或授權)。帳戶 B 直接透過 GetSecretValue 獲取秘密 —— 無需複寫,無需複製。

多區域複寫

Secrets Manager 原生將秘密複寫到其他區域。主要區域是寫入端;複本是唯讀的。主要區域的輪換會自動傳播到複本。使用場景:多區域主動-主動應用程式、具備災難恢復能力的秘密分發。定價:每個區域每個複寫的秘密每月 0.40 美元。

軟刪除(7-30 天恢復期)

Secrets Manager 將刪除的秘密保留在 Pending Deletion 狀態 7-30 天(可配置)。恢復期防止意外刪除。只有在恢復期過後,秘密才會被真正刪除。KMS 金鑰也有類似的 7-30 天窗口。

當需求包含「自動輪換」、「透過資源政策跨帳戶共享」、「多區域複寫」或「RDS/Aurora 原生憑證輪換」時,務必使用 Secrets Manager(而非 Parameter Store)。 Parameter Store SecureString 既不支援輪換也不支援資源政策。透過自定義 Lambda + EventBridge 計劃將輪換反向工程到 Parameter Store 是 Secrets Manager 原生處理的營運辛勞。在 DOP-C02 中,提到這些功能的場景無疑是 Secrets Manager。提到「低成本」、「階層」、「僅限 IAM 存取」、「配置值」的場景則是 Parameter Store。

成本權衡 — 何時為 Secrets Manager 付費

DOP-C02 要求了解成本差距。

價格比較

  • Parameter Store 標準版:前 10,000 個參數免費,每 1 萬次 API 呼叫 0.05 美元。
  • Parameter Store 進階版:每個參數每月 0.05 美元,每 1 萬次 API 呼叫 0.05 美元。
  • Secrets Manager:每個秘密每月 0.40 美元,每 1 萬次 API 呼叫 0.05 美元。

對於 1,000 個秘密:

  • Parameter Store 標準版:每月 0 美元 + API 成本。
  • Parameter Store 進階版:每月 50 美元 + API 成本。
  • Secrets Manager:每月 400 美元 + API 成本。

何時費用是合理的

Secrets Manager 的每個秘密 0.40 美元支付了:

  • 內建輪換 Lambda 生命週期。
  • 用於 RDS/Aurora/Redshift 的 AWS 受管輪換範本。
  • 用於跨帳戶的資源政策。
  • 多區域複寫。
  • 軟刪除恢復。

對於高關鍵性的生產資料庫秘密,每月 0.40 美元微不足道。對於 1,000 個應用程式配置參數,近乎零成本的 Parameter Store 是正確的。

混合架構

大多數專業級設置兩者都用:

  • 具備自動輪換的資料庫密碼:Secrets Manager。
  • 需要跨帳戶共享的 API 金鑰:Secrets Manager。
  • 應用程式配置(逾時、功能旗標、端點 URL):Parameter Store。
  • 靜態 API 端點、公開值:Parameter Store String(不加密)。

整合模式 — ECS, CodeBuild, Lambda, CloudFormation

DOP-C02 要求詳細了解應用程式如何使用秘密。

ECS 任務定義 — 原生秘密參照

ECS 任務定義支援 secrets(與 environment 分開):

"secrets": [
  {
    "name": "DB_PASSWORD",
    "valueFrom": "arn:aws:secretsmanager:us-east-1:123:secret:prod/db-AbCdEf"
  },
  {
    "name": "API_TIMEOUT",
    "valueFrom": "arn:aws:ssm:us-east-1:123:parameter/myapp/prod/api/timeout"
  }
]

ECS 在任務啟動時解析秘密並將其作為環境變數注入容器。任務執行角色需要 secretsmanager:GetSecretValue 和/或 ssm:GetParameters 以及 KMS 解密權限。秘密值不會出現在任務定義或 CloudTrail 事件詳情中 —— 僅顯示 ARN 和解析事件。

CodeBuild — 環境變數參照

CodeBuild 專案環境變數可以參照 Secrets Manager 和 Parameter Store:

env:
  parameter-store:
    GITHUB_TOKEN: /myapp/build/github-token
  secrets-manager:
    DB_CREDENTIALS: prod/db:password

CodeBuild 在建置開始時獲取,作為環境變數注入,可用於 buildspec 階段。存儲庫中沒有秘密,建置日誌中也沒有秘密(CodeBuild 會遮罩它們)。

Lambda — 直接透過 SDK 獲取或透過分層快取

Lambda 函數在冷啟動時透過 SDK 獲取秘密並快取在記憶體中。避免在每次調用時獲取(成本 + 延遲)。模式:模組範圍的客戶端,在 init 處理程序中獲取,在熱容器生命週期內快取。

為了更深度的整合,AWS Lambda 擴展可以在 sidecar 中預取和快取秘密 —— AWS Parameters and Secrets Lambda Extension 為 Parameter Store 和 Secrets Manager 提供本地 HTTP 快取,減少 10-100 倍的 API 呼叫。

CloudFormation 動態參照

CloudFormation 支援在堆疊創建/更新時解析的內嵌參照:

DBPassword: '{{resolve:secretsmanager:prod/db:SecretString:password}}'
ApiTimeout: '{{resolve:ssm:/myapp/prod/api/timeout:1}}'
ApiTimeoutSecure: '{{resolve:ssm-secure:/myapp/prod/api/key:2}}'

三種解析器:

  • ssm —— Parameter Store String/StringList。
  • ssm-secure —— Parameter Store SecureString。
  • secretsmanager —— Secrets Manager 秘密(具備選用的 JSON 路徑)。

解析後的值永遠不會出現在堆疊範本或 CloudFormation 事件中 —— 僅顯示參照語法。

CloudFormation 動態參照在堆疊創建/更新時解析 Parameter Store 和 Secrets Manager 的值,而不會在範本、變更集或 CloudFormation 事件中暴露該值。 語法:{{resolve:ssm:<名稱>:<版本>}}, {{resolve:ssm-secure:<名稱>:<版本>}}, {{resolve:secretsmanager:<名稱>:<json-鍵>:<版本階段>:<版本識別碼>}}。適用於接受文字字串的資源屬性(RDS 主密碼、API Gateway 授權方配置)。並非所有資源屬性都支援動態參照 —— 請查看屬性參照。在 DOP-C02 中,動態參照是在 IaC 範本中注入秘密而不違反無秘密程式碼規則的標準方法。

輪換策略 — 超越預設值

專業級輪換需要比「每 30 天排程一次」更細緻的處理。

快取感知的輪換

應用程式通常在連接池生命週期內(數小時)快取資料庫憑證。輪換必須與快取失效協調。模式:

  • 多使用者交替 (Multi-user alternating):輪換在兩個使用者之間切換。舊使用者的連接透過自然的連接池回收而耗盡。
  • 應用程式感知刷新:應用程式定期重新獲取秘密(例如每 10 分鐘)。快取失效比輪換週期快。
  • 輪換事件驅動刷新:Secrets Manager 輪換發送 EventBridge 事件 → 觸發應用程式服務刷新秘密快取(例如 ECS 服務重新部署)。

輪換計劃選擇

  • 合規驅動:PCI-DSS / SOC 2 / FedRAMP 為 30 天。
  • 基於風險:低風險憑證為 90 天。
  • 自動與手動:大多數生產秘密應自動輪換;只有具有複雜協調需求的高影響憑證(主資料庫、根帳戶)才可能需要手動監督。

透過 API 進行手動輪換

RotateSecret 在計劃之外立即觸發輪換。使用場景:事件回應(懷疑洩漏 → 立即輪換)、預先輪換演練、合規稽核準備。

陷阱:在未確保應用程式可處理憑證變更的情況下對資料庫秘密啟用輪換。 單使用者輪換會短暫使快取的憑證失效;長效連接池可能會失敗直到刷新。多使用者輪換需要資料庫預先配置兩個帳戶。輪換 Lambda 還需要對資料庫的網路存取(VPC 配置、安全群組)。DOP-C02 場景測試將「啟用了輪換但在第一次輪換後應用程式失敗」識別為 Secrets Manager 輪換與應用程式憑證刷新之間的協調失敗 —— 修復方法是使用多使用者策略加上連接池刷新邏輯。

跨帳戶與多區域模式

DOP-C02 專業級情境總是涉及多帳戶或多區域考慮。

透過資源政策進行跨帳戶共享

Secrets Manager:在秘密上附加資源政策。KMS 金鑰也必須允許目標帳戶。

Parameter Store 進階層級支援透過 Get* API 和 KMS 金鑰政策進行有限的跨帳戶共享,但沒有原生資源政策。對於專業級跨帳戶,Secrets Manager 是答案。

多區域 — 主動-主動與災難恢復

Secrets Manager 將主秘密複寫到 N 個額外區域。複本在每次主秘密輪換時更新。在複本區域中為唯讀。使用場景:多區域應用程式從本地複本讀取;災難恢復切換從本地複本讀取而無需額外步驟。

Parameter Store 沒有原生的多區域複寫。實作通常使用 CloudFormation StackSets 將參數部署到多個區域,或使用自定義 Lambda 在參數變更事件發生時進行複寫。

跨區域 KMS 考慮事項

KMS 金鑰是區域性的。多區域秘密需要:

  • 多區域 KMS 金鑰(新功能),用於「一金鑰多區域」,或者
  • 每個區域使用該區域金鑰加密的複寫秘密。

多區域金鑰簡化了模型 —— Secrets Manager 複寫會無縫處理加密。

管道整合 — 典型的 CI/CD 情境

綜合以上內容,典型的 DOP-C02 管道情境。

建置階段秘密

CodeBuild 專案參照 parameter-store 和 secrets-manager 值用於:

  • 原始碼存儲庫權杖 (GitHub PAT) —— Secrets Manager(可輪換)。
  • 成果物簽署金鑰 —— Secrets Manager。
  • 授權字串 —— Parameter Store SecureString(不輪換,低成本)。
  • 靜態配置(建置旗標、目標端點) —— Parameter Store String。

建置角色對 prod/build/* 具備 secretsmanager:GetSecretValue 權限,對 /build/* 具備 ssm:GetParameters 權限。

部署階段秘密

CodeDeploy 或 CloudFormation 透過以下方式注入秘密:

  • 用於資源屬性的動態參照 ({{resolve:secretsmanager:...}})。
  • 參照 Secrets Manager / Parameter Store 的 ECS 任務定義 secrets 陣列。
  • 透過 Lambda 分層解析以進行執行時獲取的 Lambda 環境變數。

跨帳戶管道

工具帳戶中的管道部署到暫存帳戶和生產帳戶。每個環境都有自己的秘密。管道切換角色 (assume role) 到目標帳戶;目標帳戶秘密透過切換後的角色權限存取。管道永遠不會在工具帳戶中持有生產秘密的值。

SSM Parameter Store 與 Secrets Manager 輪換心智模型。 Parameter Store:便宜、階層式、無輪換、僅限 IAM 存取、使用 KMS 處理 SecureString。Secrets Manager:按秘密付費、透過 Lambda 自動輪換、AWS 受管的 RDS/Aurora 範本、跨帳戶資源政策、多區域複寫、軟刪除。兩者皆整合了 ECS secrets、CodeBuild 環境變數、Lambda SDK 獲取、CloudFormation 動態參照。專業級設置混合兩者 —— Parameter Store 用於配置,Secrets Manager 用於需要輪換的憑證。在 DOP-C02 中,「自動輪換」、「跨帳戶共享」、「RDS 原生輪換」、「多區域複寫」 → Secrets Manager。「階層」、「低成本」、「10,000+ 條目」、「靜態配置值」 → Parameter Store。「兩者」通常是正確的組合答案。

常考陷阱 (Common Exam Traps)

DOP-C02 有可預測的 SSM Parameter Store 與 Secrets Manager 輪換陷阱:

  1. 在需要輪換時選擇 Parameter Store —— Parameter Store 沒有內建輪換。透過 EventBridge + Lambda 進行自定義輪換是營運負擔。如果情境說「每 30 天輪換一次」,請回答 Secrets Manager。
  2. 為 10,000 個配置值選擇 Secrets Manager —— 每月 4,000 美元。對於非輪換、非跨帳戶、非複寫的配置,請使用 Parameter Store。
  3. 在具備連接池應用程式的生產環境中使用單使用者輪換 —— 輪換期間快取憑證失敗的風險。多使用者交替策略是正確的生產環境答案。
  4. 跨帳戶存取時忘記 KMS 金鑰權限 —— 僅有秘密資源政策是不夠的。KMS 金鑰政策也必須允許目標帳戶委託人。
  5. 在 CloudFormation 參數中嵌入秘密值 —— 值會出現在變更集和 CloudFormation 事件中。請改用動態參照 ({{resolve:...}})。
  6. 讀取 SecureString 時未帶 WithDecryption=true —— 返回的是密文而非明文。應用程式會壞掉。務必在 SDK 調用中設置該參數。
  7. ECS 任務秘密參照沒有執行角色權限 —— 任務無法啟動。任務執行角色(而非任務角色)需要 secretsmanager:GetSecretValue + KMS 解密。
  8. Lambda 在每次調用時獲取秘密 —— 昂貴(每 1 萬次呼叫 0.05 美元 × 每月 1 億次調用 = 每月 500 美元)。在模組範圍快取或使用 Parameters and Secrets Lambda Extension。
  9. 在沒有 KMS 多區域金鑰的區域進行 Secrets Manager 複寫 —— 複寫失敗或使用預設的 AWS 受管金鑰。對複寫的秘密務必使用多區域 CMK。
  10. 沒有對秘密存取進行 CloudTrail 稽核 —— 所有 GetSecretValueGetParameter 調用都是 CloudTrail 事件。務必啟用。這對事件回應稽核至關重要。

DOP-C02 考試優先順序 — SSM Parameter Store 與 Secrets Manager 輪換。 此主題在 DOP-C02 考試中佔有份量。掌握權衡取捨、決策邊界以及每項 AWS 服務暴露的成本/效能觸發因素 —— 考試將測試那些取決於了解哪項服務是錯誤答案的情境,而不僅僅是哪項是正確的。

FAQ

Q1:我應該何時使用 Parameter Store 或 Secrets Manager? Parameter Store 用於低成本、階層式、非輪換的配置值和簡單秘密。Secrets Manager 用於需要自動輪換(特別是 RDS/Aurora)、透過資源政策進行跨帳戶共享或多區域複寫的憑證。專業級設置通常混合兩者 —— Parameter Store 用於應用程式配置,Secrets Manager 用於憑證。

Q2:Secrets Manager 中的自動輪換是如何運作的? Lambda 函數按計劃(例如每 30 天)執行。Lambda 執行四個階段 —— createSecret, setSecret, testSecret, finishSecret —— 以生成新憑證、在源端(RDS, Aurora 等)更新憑證、驗證並提升。AWS 發布了用於 RDS, Aurora, Redshift, DocumentDB 的預建 Lambda 範本。自定義 Lambda 則實作其他服務的輪換。

Q3:什麼是單使用者與多使用者輪換? 單使用者:輪換更新同一個使用者的密碼。快取憑證可能會短暫失敗。多使用者(交替):兩個使用者,輪換交替哪個是當前使用的。舊使用者的連接會自然耗盡。多使用者推薦用於生產環境零停機需求;DOP-C02 會測試此區別。

Q4:我可以跨帳戶共享 Parameter Store 秘密嗎? 有限制。如果取用者具備權限且 KMS 金鑰允許,Parameter Store 進階層級支援透過 GetParameters 進行跨帳戶存取,但沒有原生的資源政策。對於一等公民級別的跨帳戶共享,請使用在每個秘密上具備資源政策的 Secrets Manager。

Q5:如何在不洩漏環境變數的情況下將秘密注入 ECS 任務? 使用任務定義的 secrets 區塊(與 environment 分開),參照 Parameter Store 或 Secrets Manager 的 ARN。ECS 在任務啟動時解析並注入容器。值不會出現在任務定義、CloudTrail 調用詳情或 DescribeTaskDefinition 輸出中。任務執行角色需要 GetSecretValue / GetParameters + KMS。

Q6:CloudFormation 動態參照如何處理秘密? 三種解析器:{{resolve:ssm:<名稱>:<版本>}} 用於 Parameter Store String/StringList;{{resolve:ssm-secure:<名稱>:<版本>}} 用於 SecureString;{{resolve:secretsmanager:<名稱>:<json-鍵>:<版本階段>:<版本識別碼>}} 用於 Secrets Manager。在堆疊創建/更新時解析。解析後的值永遠不會出現在範本、變更集或事件中。並非所有資源屬性都支援動態參照 —— 請查看屬性參照。

Q7:如何處理 Lambda 函數在每次調用時都調用 Secrets Manager? 在模組範圍快取秘密(每個熱容器初始化一次)。更好的是:使用 AWS Parameters and Secrets Lambda Extension,這是一個預建的分層,可以在本地快取 Parameter Store 和 Secrets Manager 的值,並從 Lambda 執行環境內部透過 HTTP 提供服務。可減少 10-100 倍的 API 呼叫。

Q8:我可以跨區域自動複寫 Parameter Store 嗎? 沒有原生的多區域複寫。解決方法:使用 CloudFormation StackSets 將參數部署到多個區域,或者使用參數變更 EventBridge 事件觸發的自定義 Lambda 在目標區域執行 PutParameter。營運開銷較大。對於多區域,首選 Secrets Manager 原生複寫。

Q9:如何在計劃之外手動輪換秘密? 調用 RotateSecret API。這會透過 Lambda 觸發一個立即的輪換週期。使用場景:事件回應(懷疑憑證洩漏)、預先稽核輪換演練、Lambda 程式碼更新後對輪換函數的驗證。

Q10:我如何稽核誰獲取了哪個秘密? CloudTrail 會記錄每次 GetSecretValue (Secrets Manager) 和 GetParameter (Parameter Store) 調用,包含請求委託人、來源 IP、目標 ARN 和時間戳記。專業級設置會將這些事件交付給 CloudTrail Lake,以執行類似「過去 30 天內對 prod/db 憑證的所有存取,按委託人分組」的 SQL 查詢。這對事件回應至關重要。

總覽 — SSM Parameter Store 與 Secrets Manager 輪換心智模型

SSM Parameter Store 與 Secrets Manager 輪換涵蓋了從廉價階層式配置到完全輪換的跨區域憑證的全譜。在 DOP-C02 任務 6.1、6.2 和 1.1 中,正確答案結合了正確的服務(Parameter Store 用於便宜/階層/非輪換;Secrets Manager 用於輪換/跨帳戶/多區域)、正確的加密(客戶受管 KMS CMK 用於合規)以及正確的使用模式(CloudFormation 動態參照、ECS 任務秘密、具備快取的受 IAM 保護的 SDK 獲取)。每個專業級秘密場景都融合了其中三項或更多。

成熟的 DOP-C02 答案模式是混合且明確的:Parameter Store 用於那 10,000 個永不輪換的配置條目,Secrets Manager 用於那 50 個必須每 30 天輪換一次的憑證;ECS 任務 secrets 區塊用於執行時注入;CloudFormation 動態參照用於 IaC;Lambda Parameters and Secrets Extension 用於熱快取獲取;CloudTrail 用於稽核;共享秘密上的跨帳戶資源政策;跨區域所需憑證的多區域複寫;零停機需求的多使用者交替輪換。單一服務的答案通常是專業級的干擾項。

官方資料來源

更多 DOP-C02 主題