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 函數(「輪換函數」)工作:
- 計劃(例如每 30 天)觸發輪換 Lambda。
- Lambda 對秘密執行四個階段:
- createSecret:生成新憑證(例如新密碼)。
- setSecret:在源端更新憑證(例如 RDS 使用者密碼變更)。
- testSecret:驗證新憑證是否有效。
- finishSecret:將新版本標記為
AWSCURRENT;舊版本變為AWSPREVIOUS。
- 獲取秘密的應用程式預設接收
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 輪換陷阱:
- 在需要輪換時選擇 Parameter Store —— Parameter Store 沒有內建輪換。透過 EventBridge + Lambda 進行自定義輪換是營運負擔。如果情境說「每 30 天輪換一次」,請回答 Secrets Manager。
- 為 10,000 個配置值選擇 Secrets Manager —— 每月 4,000 美元。對於非輪換、非跨帳戶、非複寫的配置,請使用 Parameter Store。
- 在具備連接池應用程式的生產環境中使用單使用者輪換 —— 輪換期間快取憑證失敗的風險。多使用者交替策略是正確的生產環境答案。
- 跨帳戶存取時忘記 KMS 金鑰權限 —— 僅有秘密資源政策是不夠的。KMS 金鑰政策也必須允許目標帳戶委託人。
- 在 CloudFormation 參數中嵌入秘密值 —— 值會出現在變更集和 CloudFormation 事件中。請改用動態參照 (
{{resolve:...}})。 - 讀取 SecureString 時未帶
WithDecryption=true—— 返回的是密文而非明文。應用程式會壞掉。務必在 SDK 調用中設置該參數。 - ECS 任務秘密參照沒有執行角色權限 —— 任務無法啟動。任務執行角色(而非任務角色)需要
secretsmanager:GetSecretValue+ KMS 解密。 - Lambda 在每次調用時獲取秘密 —— 昂貴(每 1 萬次呼叫 0.05 美元 × 每月 1 億次調用 = 每月 500 美元)。在模組範圍快取或使用 Parameters and Secrets Lambda Extension。
- 在沒有 KMS 多區域金鑰的區域進行 Secrets Manager 複寫 —— 複寫失敗或使用預設的 AWS 受管金鑰。對複寫的秘密務必使用多區域 CMK。
- 沒有對秘密存取進行 CloudTrail 稽核 —— 所有
GetSecretValue和GetParameter調用都是 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 用於稽核;共享秘密上的跨帳戶資源政策;跨區域所需憑證的多區域複寫;零停機需求的多使用者交替輪換。單一服務的答案通常是專業級的干擾項。