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

Systems Manager:Automation、Patch Manager 與 Session Manager

7,400 字 · 約 37 分鐘閱讀 ·

SOA-C02 實戰指南:AWS Systems Manager 全覽 — SSM Agent 生命週期、Run Command、State Manager associations、Patch Manager 基線與掃描 vs 安裝、Maintenance Windows、Automation runbooks、Session Manager、Parameter Store、OpsCenter,以及 SysOps 疑難排解模式。

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

AWS Systems Manager 是 SOA-C02 SysAdmin 的瑞士刀——一個統一主控台,取代了 SSH、取代了 cron、取代了臨時補丁腳本、取代了寫死在 EC2 user-data 裡的密鑰,也取代了跳板機。在 SOA-C02 考試中,Systems Manager 貫穿 Domain 3 Task Statement 3.2(「自動化手動或重複性流程」)和 Domain 1 Task Statement 1.2(「根據監控與可用性指標排解問題」),並且是 AWS Config 自動補救的後端、EventBridge 目標選項(Lambda 的替代方案),也是唯一在不開放 port 22 的情況下對整個機隊執行 Run Command 的官方途徑。如果 CloudWatch 是 SOA-C02 的神經系統,Systems Manager 就是 SOA-C02 的雙手。

本指南從 SysOps 角度走過 Systems Manager 全流程:SSM Agent 如何識別一台 instance 以及什麼讓受管 instance 成為「受管」、Run Command 與 State Manager 的差異(單次執行 vs 持續保持期望狀態)、Patch Manager 基線如何定義哪些補丁被核准以及自動核准延遲的運作方式、Maintenance Windows 如何按排程在機隊中協調補丁作業、Automation runbooks 如何透過 assumeRole 與條件分支串接步驟、Session Manager 如何移除 SSH 跳板機與 port 22、Parameter Store SecureString 與 Secrets Manager 的關係(以及差異),以及 Inventory 和 OpsCenter 如何提供合規與事件工作流程。你也會看到反覆出現的 SOA-C02 情境:agent 未受管診斷、「補丁已核准但未安裝」、Maintenance Window 並發調整、Automation runbook IAM AssumeRole,以及私有子網中 Session Manager 的 VPC endpoint 需求。

為什麼 Systems Manager 是 SOA-C02 Domain 3 的核心

官方 SOA-C02 Exam Guide v2.3 在 Task Statement 3.2 下列出三項技能:「使用 AWS 服務(例如 Systems Manager、CloudFormation)自動化部署流程」、「實作自動化補丁管理」,以及「使用 AWS 服務(例如 EventBridge、AWS Config)排程自動化任務」。Systems Manager 出現在三項中的兩項,而 Patch Manager 是「實作自動化補丁管理」技能中唯一的 AWS 原生答案——沒有其他在考試範圍內的服務能夠按排程對 EC2 機隊執行 OS 補丁。Domain 3 佔全卷 18%,Task Statement 3.2 產生其中絕大多數的題目。

Domain 1 Task Statement 1.2 則從不同角度再次用到 Systems Manager:「使用 AWS Systems Manager Automation runbooks 根據 AWS Config 規則採取行動」。當 AWS Config 偵測到不合規資源時,aws.config 事件上的 EventBridge 規則路由到執行補救的 SSM Automation document——標記缺少標籤的資源、加密未加密的 EBS 磁碟區、限縮開放的 security group。考試期望你能端對端了解完整的 Config -> EventBridge -> SSM Automation 鏈,包括 SSM 所假設的 IAM 補救角色。

在 SysOps 層級,框架是運維而非架構。SAA-C03 問「你應該使用哪個 AWS 服務來管理機隊的補丁?」SOA-C02 問「夜間補丁週期在 12% 的 instance 上失敗——依序列出診斷步驟」。答案永遠涉及同樣三個基礎:SSM Agent 必須正在執行、IAM instance profile 必須包含 AmazonSSMManagedInstanceCore,以及到 SSM endpoint 的網路路徑必須存在(NAT gateway、internet gateway,或 VPC interface endpoint)。三者缺一,Systems Manager 看起來什麼都沒做——靜默地失敗。這種靜默是 SOA-C02 的經典陷阱。

  • SSM Agent:輕量級守護程式(Linux 上的 amazon-ssm-agent,Windows 服務名稱 AmazonSSMAgent),預裝在多數現代 AWS 官方 AMI 上。Agent 會輪詢 Systems Manager,並在主機上執行 Run Command、State Manager、Automation 及 Session Manager 的工作。
  • 受管 instance(managed instance):任何向 Systems Manager 註冊的 EC2 或混合型(on-prem)主機。成為受管 instance 需要三個條件:agent 正在執行、附有 AmazonSSMManagedInstanceCore 的 IAM instance profile(on-prem 則需 hybrid activation),以及到 SSM 服務端點的對外網路連線。
  • Document(SSM Document):定義在受管 instance 上執行步驟的 JSON 或 YAML 範本。Document 類型包括 Command(用於 Run Command 和 State Manager)、Automation(除了 instance 外也能呼叫 AWS API 的多步驟協調)、Session(Session Manager 偏好設定)及 Package
  • Run Command:針對以 instance ID、標籤或資源群組定義的目標集,執行 Command document 的單次、臨時遠端執行。
  • State Manager:持續保持期望狀態——State Manager association 按排程對目標集重複執行 Command document,強制執行期望的組態(agent 已安裝、防毒定義已更新、sshd 已強化)。
  • Patch Manager:利用 patch baselinespatch groupsmaintenance windows 對受管 instance 掃描並安裝 OS 補丁的 SSM 能力。
  • Patch baseline:定義哪些補丁自動核准(依分類、嚴重性、產品)以及哪些明確核准或拒絕的規則集。每個 OS 系列都有 AWS 管理的預設基線;你可以自訂基線。
  • Patch group:以標籤(Patch Group = prod-rhel9)將 instance 綁定到自訂基線。一台 instance 只能屬於一個 Patch Group。
  • Maintenance Window:具有排程的目標 instance 集合,用來執行任務(Run Command、Automation、Lambda、Step Functions)的週期性或一次性排程。大規模補丁作業使用帶有 AWS-RunPatchBaseline 任務的 Maintenance Window。
  • Automation runbook:具有分支、assumeRoleaws:executeAwsApiaws:executeScriptaws:waitForAwsResourcePropertyaws:approve 步驟的多步驟 document——用於自助運維和 Config 自動補救。
  • Session Manager:不需要 SSH 金鑰、跳板機或開放輸入 port 的瀏覽器或 CLI Shell 存取方式——可審計記錄至 S3 和 CloudWatch Logs。
  • Parameter Store:用於組態資料和密鑰的階層式鍵值儲存。Standard 層免費;Advanced 層支援較大的值和策略。SecureString 使用 KMS 在靜止時加密。
  • 參考:https://docs.aws.amazon.com/systems-manager/latest/userguide/what-is-systems-manager.html

白話文解釋 Systems Manager Automation、Patch Manager 與 Run Command

Systems Manager 有許多子服務,名稱容易混淆。三個類比能讓架構印象深刻。

類比一:大樓管理處

Systems Manager 是一棟大型辦公大樓(你的 AWS 帳戶)的大樓管理處。每台 EC2 instance 是一間裝了智慧門鎖的辦公室(SSM Agent),而管理處掌握著萬能鑰匙(IAM instance profile AmazonSSMManagedInstanceCore)。沒有安裝門鎖、也沒有萬能鑰匙備案,管理人員就無法進入——那個房間是「未受管的」。Run Command 是管理人員逐間巡視、執行一次性任務(「替所有標記為 Floor=3 的辦公室換燈泡」)。State Manager 是長期重複指令(「每週檢查每間辦公室的煙霧偵測器是否正常,若電池耗盡則更換」)。Patch Manager 是全棟大樓的窗戶更換計畫——有patch baseline(指定哪些型號的窗戶通過規格)、patch groups(北向辦公室和南向辦公室使用不同的玻璃),以及 Maintenance Window(每週日凌晨兩點到五點,每次只替換十間,確保大樓不會全面停業)。Automation runbooks 是管理處的緊急應變手冊,列有編號步驟供管理人員在火災警報響起時依序執行——步驟一疏散、步驟二通報、步驟三隔離、步驟四勘查——每個步驟都有 assumeRole 條款,說明需要哪個部門的鑰匙。Session Manager 是管理人員的萬用感應卡,不需要各辦公室的個別鑰匙(無需 SSH 金鑰)、也不需要側門(無需跳板機)就能進入任何一間——且每次進入都記錄在防竄改的門禁系統中。Parameter Store 是地下室的資料夾總管,存放標準供應品規格(油漆顏色、燈泡瓦數)——SecureString 抽屜用 KMS 金鑰上鎖。

類比二:IT 部門的作業手冊夾

SysAdmin 的實體作業手冊夾有各種索引頁:「建立新 VPN 使用者」、「輪換資料庫密碼」、「修補 RHEL 機隊」、「調查登入失敗警報」。每個索引頁都有編號步驟:步驟一、步驟二、步驟三,並有條件分支(「若步驟二傳回 RC=4,跳至步驟七」)。SSM Automation runbooks 正是那本手冊夾——但可直接執行。Document 將步驟定義為 aws:executeAwsApi(呼叫 AWS API)、aws:executeScript(在執行器上本機執行 Python 或 PowerShell 腳本)、aws:runCommand(在受管 instance 上執行 Command document)、aws:waitForAwsResourceProperty(輪詢直到條件滿足)及 aws:approve(暫停等待人工核准後繼續)。AWS 管理的 runbooksAWS-RestartEC2InstanceAWS-StopEC2InstanceAWS-CreateSnapshotAWS-PatchInstanceWithRollback 是每個 IT 部門都有的預印頁面;你的自訂 runbooks 是針對你們公司特定流程撰寫的程序。Runbook 作者指定 AssumeRole,讓 runbook 能以人類使用者沒有的較高權限行動——IT 部門的「深夜萬能鑰匙」由 runbook 引擎取出,而不是交給每位初級技術人員。

類比三:連鎖旅館的全國裝修計畫

修補機隊就像翻新一條連鎖旅館。不能一次關閉所有旅館——住客無處可去。Patch Manager + Maintenance Windows全國裝修排程:每間標記 Region=APAC 的旅館在週日凌晨兩點到五點進行翻新,MaxConcurrency = 10%(每次最多一成旅館停業施工),MaxErrors = 5%(若超過 5% 的旅館翻新失敗,立即暫停全國推進)。Patch baseline裝修規格書——油漆顏色、底漆品牌、光澤度——而自動核准延遲廠商保固等待期:新油漆配方上市 7 天後才自動核准,讓工廠瑕疵先行浮現。Patch groups 為旅館貼上基線標籤(「豪華連鎖使用規格 A,平價連鎖使用規格 B」)。補丁合規報告是裝修後的驗收報告——每間旅館對應其基線的現況。整條流水線就是 SOA-C02 考試所謂「實作自動化補丁管理」的意涵。

對 SOA-C02 而言,大樓管理處類比在題目將多項能力串聯時最為實用——Run Command、State Manager、Patch Manager 都是同一支管理團隊使用不同工具,且有相同的 IAM 和網路前提條件。每當題目暗示「agent 沒有回應」或「補丁沒有安裝」,提醒自己:agent + IAM + 網路——三者必須同時具備。參考:https://docs.aws.amazon.com/systems-manager/latest/userguide/what-is-systems-manager.html

SSM Agent:生命週期、前提條件與疑難排解

SSM Agent 是每項 Systems Manager 能力的基礎。如果 agent 未以受管 instance 形式註冊,該主機上的 Run Command、State Manager、Patch Manager、Session Manager 及 Automation aws:runCommand 步驟全部無效。

Agent 安裝

Agent 自 2017 年起預裝於大多數 AWS 官方 AMI:Amazon Linux 2 / 2023、Ubuntu 16.04+、Windows Server 2008 R2+、RHEL/CentOS 7+、SUSE 12+、macOS,以及用於 EKS 受管節點的 Bottlerocket OS。對於較舊的 AMI、自訂 AMI 或 on-prem 主機,可透過以下方式安裝:

  • yum install -y amazon-ssm-agent(RHEL/CentOS/Amazon Linux)或 snap install amazon-ssm-agent --classic(Ubuntu)。
  • MSI 安裝程式(Windows Server)。
  • Run Command AWS-ConfigureAWSPackage,參數 name=AmazonSSMAgent——僅適用於主機已是受管狀態(先有雞後有蛋:只用於升級)。
  • EC2 Image Builder 將最新 agent 版本烘焙進 golden AMI——SOA-C02 首選的機隊一致性做法。

Agent 透過 HTTPS port 443 向外連線至 Systems Manager 的區域端點(ssm.<region>.amazonaws.comec2messages.<region>.amazonaws.comssmmessages.<region>.amazonaws.com)。它從不接受輸入流量——這正是 Session Manager 安全的原因。

成為受管 instance 的三個前提條件

要讓 instance 出現在 Fleet Manager → Managed instances 中,以下三點必須全部成立:

  1. SSM Agent 已安裝且正在執行systemctl status amazon-ssm-agent)。
  2. IAM instance profile 附有 AmazonSSMManagedInstanceCore 政策(或等效自訂政策,授予 ssm:UpdateInstanceInformationssmmessages:*ec2messages:*,以及 Inventory/Session Manager 日誌所需的寫入權限)。
  3. 到三個 SSM 端點的對外網路路徑——透過 internet gateway(公有子網)、NAT gateway(私有子網),或 com.amazonaws.<region>.ssmcom.amazonaws.<region>.ec2messagescom.amazonaws.<region>.ssmmessagesVPC interface endpoints(無網際網路輸出的私有子網)。

三者缺任一,instance 將靜默地不進行註冊。Fleet Manager 根本不會列出它。以 instance ID 為目標的 Run Command 會傳回「InvalidInstanceId」——不是權限錯誤,不是網路逾時,就只是「不是有效的 SSM instance」。

On-prem 與混合環境

對於 on-prem 伺服器,透過 Systems Manager hybrid activation 註冊主機:建立一個帶有 IAM 服務角色的 activation(因為沒有 EC2,所以不是 instance profile),取得 activation 代碼和 ID,再於主機上執行 amazon-ssm-agent -register -code <code> -id <id> -region <region>。主機現在會以 mi- 前綴(而非 i-)顯示為受管 instance。SOA-C02 可能會問「在同一排程中補丁混合 EC2 和 on-prem 伺服器」——答案是 hybrid activation + 同時涵蓋兩個集合的 Maintenance Window。

Agent 疑難排解清單

當 Fleet Manager 中找不到某個 instance 時:

  1. Agent 是否正在執行? sudo systemctl status amazon-ssm-agent——若已停止,執行 sudo systemctl restart amazon-ssm-agent 並檢查 journalctl -u amazon-ssm-agent
  2. IAM 角色是否附加且正確? EC2 主控台 → Instance → Security 索引標籤 → IAM Role。確認角色包含 AmazonSSMManagedInstanceCore。若角色在啟動後才附加,請重啟 agent 讓它重新讀取憑證。
  3. Agent 能否到達端點? 從 instance 執行:curl -v https://ssm.us-east-1.amazonaws.com/——出現 TLS 握手就是好的。若逾時,檢查路由表(是否有 NAT gateway?)、security group 對外規則(443 是否允許?)、NACL 對外與對內規則(是否允許回應的臨時 port?),以及若 VPC 是隔離網路,是否有三個必要的 interface endpoints。
  4. Agent 版本不符? 較舊的 agent 對較新的 SSM 功能有已知 bug。Patch Manager 的 AWS-RunPatchBaseline 在某些 OS 上需要 agent ≥ 3.0。透過 Run Command AWS-UpdateSSMAgent 更新——但 instance 必須已是受管狀態才能接收指令(這就是為什麼將 agent 烘焙進 AMI 是較佳做法)。
  5. 資源配額? 每個區域有受管 instance 的預設配額。對於非常大的機隊,透過 Service Quotas 申請增加。

SOA-C02 中測試最頻繁的 SSM 情境是「Run Command 沒有列出 instance」或「10% 的機隊補丁未安裝」。答案幾乎永遠是以下其中之一:agent 未執行(或版本錯誤)、IAM instance profile 缺少 AmazonSSMManagedInstanceCore,或網路路徑不存在(無 NAT gateway、無 internet gateway、無 VPC interface endpoint)。考試測試的是診斷順序——先 agent、再 IAM、再網路。參考:https://docs.aws.amazon.com/systems-manager/latest/userguide/setup-instance-profile.html

  • Agent 監聽 port:零個輸入;僅對外 HTTPS 443。
  • 三個必要的 SSM 端點網域ssm.<region>.amazonaws.comec2messages.<region>.amazonaws.comssmmessages.<region>.amazonaws.com
  • 純私有子網機隊所需的 VPC interface endpointscom.amazonaws.<region>.ssmcom.amazonaws.<region>.ec2messagescom.amazonaws.<region>.ssmmessages
  • 預設 agent 心跳:agent 每 5 分鐘呼叫一次 UpdateInstanceInformation。連續兩次心跳未回報的 instance 會被標記為 ConnectionLost
  • 受管 instance 前綴:EC2 為 i-,混合型(on-prem)註冊為 mi-
  • 必要受管政策AmazonSSMManagedInstanceCore(現代最小權限)。舊版 AmazonEC2RoleforSSM 已棄用。
  • 參考:https://docs.aws.amazon.com/systems-manager/latest/userguide/ssm-agent.html

Run Command:無需 SSH 的臨時機隊執行

Run Command 是 Systems Manager 中最簡單的能力,也是日常 SysOps 使用頻率最高的工具。它對一組目標執行 Command document,收集 stdout/stderr,並回報每台 instance 的成功或失敗狀態。

Run Command 呼叫流程

  1. SysOps 工程師選擇一個 Command document——例如 AWS-RunShellScript(Linux)、AWS-RunPowerShellScript(Windows)、AWS-ConfigureAWSPackage(安裝/更新 SSM 分發的套件)、AWS-UpdateSSMAgentAmazonCloudWatch-ManageAgent,或自訂 document。
  2. 定義目標:
    • 依 instance ID——明確列出清單。
    • 依標籤——例如 tag:Environment=prod。機隊規模下最常見的模式。
    • 依 Resource Group——已儲存的查詢,解析為一組 instance。
  3. 設定並發控制:
    • MaxConcurrency——同時執行指令的 instance 數(絕對數量或百分比)。
    • MaxErrors——何時停止推進。達到 MaxErrors 次失敗後,不再啟動更多 instance。
  4. 選擇性指定 S3 output bucketCloudWatch log group,保留超過主控台 2,500 字元截斷的 stdout 完整輸出。
  5. 選擇性整合 CloudWatch alarm——若配置的 alarm 在執行期間觸發,停止指令。

每個目標的 agent 透過 SSM 服務接收工作,在本機執行,然後回報結果。沒有 SSH session、沒有輸入 port、沒有共用憑證。

常用 Command documents

  • AWS-RunShellScript / AWS-RunPowerShellScript——執行任意指令。快速但具風險;若有專用 document 請優先使用。
  • AWS-ConfigureAWSPackage——從 SSM Distributor 安裝或升級套件(CloudWatch agent、Inspector agent、CrowdStrike 等第三方 agent)。
  • AWS-UpdateSSMAgent——升級 agent 本身。
  • AmazonCloudWatch-ManageAgent——使用 Parameter Store 中的組態安裝、設定並啟動 CloudWatch agent。
  • AWS-RunPatchBaseline——依 Patch baseline 掃描或安裝補丁。Patch Manager 在 Maintenance Window 內就是呼叫這個 document。
  • AWS-StartInteractiveCommand / AWS-StartSSHSession——Session Manager 啟動 documents。

Run Command vs State Manager

Run Command 是單次執行:你觸發它,它執行一次,完成。State Manager持續保持期望狀態:你建立一個 association,它按排程對目標集重複執行 Command document。兩個 SOA-C02 範例能說清楚差異:

  • 「現在立刻將最新的 CloudWatch agent 組態套用到所有 Environment=prod instance」——Run Command
  • 「確保每台新加入的 Environment=prod instance 永遠都安裝並設定好 CloudWatch agent」——State Manager association,每 30 分鐘(預設)或任何 cron 排程執行,自動納入加入標籤的新 instance。

State Manager associations 也是 SOA-C02 對「稽核人員要求每台 instance 持續符合強化 Command document」問題的正確答案——Run Command 是一次性的,無法偵測組態偏移。

SOA-C02 的判斷線索是動詞。「執行」、「套用」一次 → Run Command。「確保」、「維持」、「持續」 → State Manager association。兩者使用相同的 Command documents,但 State Manager 按排程重複執行,並記錄每台 instance 的合規狀態。參考:https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-state.html

Patch Manager:基線、Patch Groups 與掃描 vs 安裝

Patch Manager 是 SOA-C02 自動化 OS 補丁的答案。它依 patch baseline 掃描受管 instance,選擇性安裝已核准的補丁,並回報合規狀況。

Patch baselines

Patch baseline 是一組規則,決定哪些補丁對某個 OS 核准。每個 OS 系列都有 AWS 管理的預設基線:

  • AWS-AmazonLinux2DefaultPatchBaseline
  • AWS-WindowsPredefinedPatchBaseline-OS
  • AWS-UbuntuDefaultPatchBaseline
  • AWS-RedHatDefaultPatchBaseline
  • AWS-SUSEDefaultPatchBaseline
  • AWS-CentOSDefaultPatchBaseline
  • AWS-MacOSDefaultPatchBaseline

每個預設基線以 7 天自動核准延遲核准 Critical 和 Important 安全補丁——意即 OS 廠商發布的補丁在發布 7 天後自動核准。延遲的目的是防止社群發現迴歸問題前就推出有問題的補丁。

以下情況需要自訂基線:

  • 需要不同的自動核准延遲(緊急零日修補設為 0 天;超保守的生產環境設為 14 或 30 天)。
  • 只需核准部分分類(Security 但不含 Bugfix)。
  • 需要在自動核准延遲到期前明確核准單一重大 CVE 補丁。
  • 需要明確拒絕已知有問題的補丁。
  • 需要超出預設值的 OS 層級補丁來源(例如私有套件倉庫)。

自訂基線透過以 Patch Group=<group-name> 標記 instance,與 patch group 建立關聯。一台 instance 只能屬於一個 Patch Group,因此標籤值的選擇至關重要。

  • 預設自動核准延遲:AWS 管理基線的 Critical 和 Important 安全補丁為 7 天
  • Patch Group 標籤鍵:字面上就是 Patch Group(含空格)。標籤值是 Patch Group 名稱。一台 instance 只能屬於一個 Patch Group。
  • Patch baseline 涵蓋的 OS:Amazon Linux 2/2023、Windows、Ubuntu、RHEL、SUSE、CentOS、macOS、Oracle Linux、Debian。
  • 補丁合規狀態COMPLIANTNON_COMPLIANTUNSPECIFIED_DATA(instance 尚未掃描)。
  • 操作模式Scan(僅回報合規,不安裝)、Install(安裝已核准補丁,必要時重新開機)。
  • 參考:https://docs.aws.amazon.com/systems-manager/latest/userguide/sysman-patch-baselines.html

掃描 vs 安裝

AWS-RunPatchBaseline document 接受 Operation 參數:

  • Scan——依基線評估 instance 並回報合規狀態。不安裝補丁,不重新開機。用於稽核和視窗前的準備度檢查。
  • Install——安裝所有缺少的已核准補丁,若有補丁需要則重新開機(可設定:RebootIfNeededNoReboot)。

常見的運維模式:

  1. 透過 State Manager association 每日 Scan——每台 instance 每天回報一次合規狀態。CloudWatch dashboard 顯示全組織的合規百分比。
  2. 透過 Maintenance Window 每週 Install——週日凌晨兩點到五點,帶有 Operation=Install 的 Maintenance Window 任務以 MaxConcurrencyMaxErrors 控制的批次修補機隊。

將 Scan 與 Install 分開,讓你能在排定的補丁視窗之間觀察偏移情況而不強制重新開機,也能讓合規報告驅動非補丁補救(例如,當某台 instance 重複無法補丁時,aws.ssm 合規事件上的 EventBridge 規則會呼叫值班人員)。

SOA-C02 的常見干擾項:團隊需要在 24 小時內推出關鍵零日補丁,但預設基線有 7 天自動核准延遲。選「等 7 天」或「從頭建立新基線」的考生答錯了。正確答案是以下其中之一:(a) 在現有基線中以 KB 編號或 CVE 明確核准該特定補丁(明確清單會覆蓋延遲);(b) 為緊急情況建立自動核准延遲 = 0 的新基線,關聯到受影響的 Patch Group,之後再還原;或 (c) 使用 patch lists 限定緊急推進範圍。7 天延遲是預設值,不是硬性規定——當已知重大漏洞的風險超過迴歸風險時,可以覆蓋。參考:https://docs.aws.amazon.com/systems-manager/latest/userguide/sysman-patch-baselines.html

補丁合規回報

Patch Manager 發布每台 instance 的合規狀態,可在以下位置查看:

  • Patch Manager 主控台 → Compliance
  • Systems Manager Inventory → Patch compliance
  • EventBridge——aws.ssm 事件的 Configuration Compliance State Change 詳細類型路由至 SNS 或 Lambda。
  • AWS Config——ec2-managedinstance-patch-compliance-status-check 受管規則發出 Config 合規結果,可驅動自動補救鏈。

為了稽核目的,合規資料自然地透過 Config 或直接透過 SSM 整合流入 AWS Security Hub。

Maintenance Windows:排程全機隊作業

Maintenance Window 是帶有三個組成部分的週期性或一次性排程:一個排程、一組已註冊目標,以及一組已註冊任務。Maintenance Windows 是 Patch Manager 在機隊規模下運行的方式,對任何不應在上班時間執行的週期性作業也很有用。

排程

排程接受以下其中之一:

  • cron 表達式——cron(0 2 ? * SUN *) 表示「每週日 UTC 凌晨兩點」。
  • rate 表達式——rate(7 days)
  • 一次性排程,指定特定日期。

選擇性的 ScheduleTimezone 將 cron 置於本地時間(例如 Asia/Taipei),避免 UTC 心算換算。選擇性的 Cutoff 指定在視窗結束前多少小時停止啟動新任務(讓已執行的任務有時間完成)。選擇性的 Duration 是視窗總共開放多長時間。

已註冊目標

目標在任務執行時解析,不在註冊時解析:

  • 依 instance ID。
  • 依標籤(最常見——tag:Patch Group=prod-rhel9)。
  • 依資源群組。

由於目標在執行時解析,符合標籤的新 instance 自動加入下一次視窗的執行。

已註冊任務

任務有四種類型:

  • RUN_COMMAND——呼叫 Command document(最常見:AWS-RunPatchBaseline)。
  • AUTOMATION——呼叫 Automation runbook。
  • LAMBDA——呼叫 Lambda function。
  • STEP_FUNCTIONS——啟動狀態機執行。

每個任務帶有:

  • MaxConcurrency——同時處理的目標數量。10(絕對數)或 10%(目標總數的百分比)。200 台 instance 的機隊在 MaxConcurrency=10% 下,每次修補 20 台,然後再 20 台,依此類推。
  • MaxErrors——停止推進的條件。5(絕對數)或 5%。達到此數量的任務失敗後,不再啟動更多 instance。
  • TaskInvocationParameters——document 特定參數(Operation=Install、RebootOption=RebootIfNeeded)。
  • ServiceRoleArn——Maintenance Window 執行任務所假設的 IAM 角色(Maintenance Window 服務角色,不是 instance profile——這是兩個不同的 IAM 身分)。
  • Priority——當多個任務註冊到同一個視窗時,優先度較低的任務先執行。
  • MaxConcurrency:絕對數或百分比(例如 10%)。無預設值——必須指定,否則任務同時對所有目標執行。
  • MaxErrors:絕對數或百分比。達到此數量失敗後,推進停止。生產補丁通常設為 5%
  • Cutoff 時間:在視窗結束前 N 小時停止啟動新任務。預設為 0(無截止)。
  • 視窗時長:1 到 24 小時。
  • 每個視窗的任務數:每個視窗最多 10 個任務。
  • 每個視窗的目標數:每個視窗最多 50 組已註冊目標集。
  • 參考:https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-maintenance.html

情境模式:數百台 EC2 每週日凌晨兩點補丁

SOA-C02 典型設計:

  1. 為每台待補丁的 instance 貼標籤 Patch Group=prod-linux(及 Environment=prod)。
  2. prod-linux 建立自訂 Patch baseline——Amazon Linux 2、Critical/Important 安全補丁、7 天自動核准延遲,加上所有緊急 CVE 的明確核准清單。
  3. 建立 Maintenance Window,使用 cron(0 2 ? * SUN *)ScheduleTimezone=Asia/Taipei,時長 3 小時,截止 30 分鐘。
  4. 已註冊目標tag:Patch Group=prod-linux
  5. 已註冊任務AWS-RunPatchBaselineOperation=InstallRebootOption=RebootIfNeededMaxConcurrency=10%MaxErrors=5%,輸出至 S3 bucket 供稽核。
  6. State Manager association 每日以 Operation=Scan 執行 AWS-RunPatchBaseline,讓合規狀態在週中也可見。
  7. EventBridge 規則監聽 aws.ssm 合規狀態變更事件,對任何連續兩次未能補丁的 instance 發送 SNS 通知。

這條流水線幾乎是每個「補丁機隊」SOA-C02 情境的答案。

SSM Automation Runbooks:多步驟協調

Run Command 只能針對受管 instance,Automation runbooks 則在單一 document 中協調 AWS API 呼叫、instance 指令和人工核准。Automation runbooks 是將複雜補救和自助運維操作程式化的方式。

Automation document 結構

Automation document 是帶有 parametersmainStepsassumeRole 的 YAML(或 JSON)。每個步驟有一個來自小型函式庫的 action

  • aws:executeAwsApi——執行任意 AWS API 呼叫(DescribeInstancesStopInstancesRestoreDBClusterFromSnapshot 等)。最強大的 action。
  • aws:executeScript——在執行器(Systems Manager 服務,不是你的 instance)上執行 Python 或 PowerShell 腳本。用於轉換和複雜邏輯。
  • aws:runCommand——在受管 instance 上執行 Command document。
  • aws:waitForAwsResourceProperty——輪詢 API 直到屬性達到目標值。用於等待 instance 進入 running 狀態或 stack 達到 CREATE_COMPLETE
  • aws:assertAwsResourceProperty——若屬性不符則使 runbook 失敗。
  • aws:approve——暫停等待一位或多位指定負責人透過主控台核准。用於需要人工判斷的生產影響步驟。
  • aws:branch / aws:choice——根據前一步驟的輸出進行條件分支。
  • aws:sleep——等待固定時間。

AWS 管理的 runbooks

AWS 發布了大量預建 runbooks。SOA-C02 高頻出現的有:

  • AWS-RestartEC2Instance——停止、等待、啟動一台 instance。簡單但在情境中出乎意料地常見。
  • AWS-StopEC2Instance / AWS-StartEC2Instance
  • AWS-CreateSnapshot / AWS-DeleteSnapshot
  • AWS-PatchInstanceWithRollback——安裝補丁,若重新開機失敗則回滾。
  • AWS-UpdateCloudFormationStack
  • AWS-RunPatchBaseline(也可作為 Run Command 的 Command document)。
  • AWSConfigRemediation-*——一系列用於連接 AWS Config 規則的補救 runbooks。

Automation 的 IAM AssumeRole

Runbook 可由使用者、EventBridge、State Manager 或 AWS Config 補救呼叫。Runbook 本身以 document 中指定的 AssumeRole 身分運行——通常是擁有所有步驟所需權限聯集的角色。

角色的信任政策必須信任 ssm.amazonaws.com(Automation 服務主體)。常見錯誤:

  • 信任政策缺少 ssm.amazonaws.com——runbook 立即以 AssumeRole 被拒而失敗。
  • 角色權限缺少某個 API 呼叫——runbook 在該特定步驟失敗。
  • 跨帳號 runbooks——目標帳號需要信任來源帳號的角色,而來源帳號角色需要對目標帳號角色的 sts:AssumeRole 權限。

SOA-C02 情境描述一個連接到 Automation 補救 runbook 的 Config 規則「無法執行」。考生看到規則、EventBridge 目標和 runbook YAML。問題幾乎永遠是以下其中之一:(a) runbook 的 assumeRole 參數為空(runbook 嘗試使用呼叫者的權限,但因為呼叫者是 Config 服務而失敗);(b) IAM 角色的信任政策不包含 ssm.amazonaws.com;或 (c) 角色缺少某個步驟所需的 API 權限。沒有填寫 AssumeRole,runbook 會靜默失敗。參考:https://docs.aws.amazon.com/systems-manager/latest/userguide/automation-permissions.html

情境模式:Config 規則 + EventBridge + SSM Automation

Domain 1.2 + Domain 3.2 的典型鏈:

  1. AWS Config 規則——例如 s3-bucket-public-read-prohibited。當 bucket 變為公開時,規則移至 NON_COMPLIANT
  2. AWS Config 補救組態——附加到規則,指定 SSM Automation runbook(例如 AWSConfigRemediation-RemoveS3BucketPolicyStatementForS3PublicAccess)和 IAM 補救角色。
  3. SSM Automation runbook——對違規的 bucket 執行,移除公開授權聲明,傳回成功。
  4. EventBridge 規則(選擇性)——同時將 aws.config 不合規事件路由至 SNS,讓人員了解發生了什麼。

SOA-C02 陷阱:考生直接將 EventBridge 規則連接到 Lambda function,而非使用 Config 原生補救功能。兩者都行得通;當輸入是 Config 規則時,Config 補救是 AWS 原生答案,具備內建重試和日誌記錄。

Session Manager:取代 SSH 與跳板機

Session Manager 提供不需要 SSH 金鑰、不需要跳板機、不需要開放輸入 port 22 或 3389 的瀏覽器或 AWS CLI Shell 存取受管 instance 的方式。它是 SOA-C02 中測試最頻繁的 SSM 能力,因為它解決了每個 SysOps 團隊都面臨的安全問題。

Session 的運作方式

  1. 使用者開啟 Systems Manager → Fleet Manager → 選擇 instance → Start session(或從 CLI 執行 aws ssm start-session --target i-0abc123)。
  2. Session Manager 服務依 IAM 驗證使用者(使用者需要 ssm:StartSession 權限)。
  3. 目標 instance 上的 SSM Agent 透過其現有的對外連線接收請求。
  4. Agent 產生一個 shell(預設:ssm-user,帶有 sudo)。stdin 和 stdout 透過 SSM 服務流回使用者的瀏覽器/CLI——不會有輸入流量到 instance。
  5. Session 被記錄:每個按鍵和指令輸出可串流至 CloudWatch Logs 和/或 S3,可選擇以 KMS 加密。

Session Manager 在考試中的優勢

與跳板機 SSH 相比,Session Manager:

  • 完全移除輸入 port 22——security groups 可拒絕所有輸入流量,大幅縮小攻擊面。
  • 移除 SSH 金鑰——IAM 身分驗證 session;無需輪換或分發共用金鑰對。
  • 移除跳板機 EC2 成本——不需要永遠開著的跳板機主機。
  • 將每個 session 記錄至 S3/CloudWatch——可審計供合規使用。
  • 在沒有 NAT/IGW 的私有子網中運作,只要 VPC 有三個 SSM interface endpoints。
  • 與 IAM session policies 整合,限制使用者可以執行的指令。

Session 偏好設定

SessionManagerRunShell document 類型儲存帳號層級的偏好設定:

  • shellProfile——要啟動哪個 shell(預設 Linux 為 bash,Windows 為 cmd)。
  • runAsEnabled——以自訂 OS 使用者而非 ssm-user 啟動 session。
  • s3BucketName + cloudWatchLogGroupName——記錄 session 的位置。
  • kmsKeyId——用於加密 session 日誌資料的 KMS 金鑰。
  • idleSessionTimeout——在 N 分鐘後自動終止閒置 session。
  • maxSessionDuration——session 長度的硬性上限。

私有子網的 Session Manager VPC endpoint 需求

對於沒有網際網路輸出的私有子網中的 instance,受管 instance 註冊所需的同三個 SSM VPC interface endpoints 也支援 Session Manager:

  • com.amazonaws.<region>.ssm
  • com.amazonaws.<region>.ec2messages
  • com.amazonaws.<region>.ssmmessages

若你還想讓 session 日誌從 instance 直接傳至 S3(而非透過 SSM 服務),可能還需要一個 S3 gateway endpoint。

每當情境提到「在不開放 port 22 的情況下安全存取私有子網中的 EC2」或「稽核每個管理員 session 供合規使用」,SOA-C02 預設答案就是 Session Manager——永遠不是跳板機、不是 SSH 金鑰對、不是開放 port 22。選擇跳板機 + 金鑰輪換的考生錯過了 SysOps 特定的運維模式。參考:https://docs.aws.amazon.com/systems-manager/latest/userguide/session-manager.html

預設情況下,Session Manager 記錄至 CloudWatch Logs 和 S3 是未加密的。對於合規環境,在 session 偏好設定中使用客戶自管金鑰啟用 KMS 加密。考試有時會問「確保 session 日誌在靜止時受到保護」——答案是 session 偏好設定中的 KMS 金鑰,而不是僅靠 S3 儲存桶層級加密(雖然兩者結合是最佳做法)。參考:https://docs.aws.amazon.com/systems-manager/latest/userguide/session-preferences-enable-encryption.html

Parameter Store:組態與密鑰

Parameter Store 是 Systems Manager 的階層式鍵值儲存。參數名稱是路徑(/myapp/prod/db/host),類型為 StringStringListSecureString,存取透過參數 ARN 上的 IAM 政策控制。

層級

  • Standard 層——免費,每個區域每個帳號最多 10,000 個參數,參數值最大 4 KB。不支援參數政策。
  • Advanced 層——付費(撰寫時每個參數每月 0.05 USD),最多 100,000 個參數,值最大 8 KB,支援參數政策(到期、到期通知、無變更通知)。

SecureString

SecureString 參數以 KMS 在靜止時加密。參數的加密金鑰可以是:

  • AWS 管理的金鑰 alias/aws/ssm(預設)。
  • 建立時指定的客戶自管 KMS 金鑰。

讀取 SecureString 需要 ssm:GetParameter(s) 權限以及加密金鑰的 kms:Decrypt 權限。寫入需要 ssm:PutParameterkms:Encrypt

Parameter Store vs Secrets Manager

這個比較幾乎在每次 SOA-C02 考試中都會出現。

功能 Parameter Store SecureString Secrets Manager
靜止加密 KMS KMS
費用 免費(Standard)/ 每個參數每月 0.05 USD(Advanced) 每個 secret 每月 0.40 USD + 每次 API 呼叫費用
原生自動輪換 無(需自行連接 Lambda) 有——RDS、Redshift、DocumentDB 的內建 Lambda 輪換;其他 secret 的自訂輪換 Lambda
跨帳號共享 Advanced 層的資源政策 原生支援資源政策
版本控制
最大值大小 Standard 4 KB / Advanced 8 KB 64 KB
使用情境 應用程式組態、簡單密鑰、不需輪換的密鑰 資料庫憑證、需要輪換的 API 金鑰

SOA-C02 的判斷線索:「自動輪換」→ Secrets Manager。「應用程式組態值,其中部分敏感」→ Parameter Store SecureString。「EC2 user-data 中有寫死的資料庫密碼,必須移除」→ Secrets Manager(因為從運維角度你也需要輪換,即使題目沒有明確說明)。

Public parameters

AWS 以 public Parameter Store 參數形式發布有用的值,路徑在 /aws/service/ 下:

  • /aws/service/ami-amazon-linux-latest/al2023-ami-kernel-default-x86_64——最新的 Amazon Linux 2023 AMI ID。CloudFormation Parameters 可以引用這個,讓 stacks 永遠以最新 AMI 啟動。
  • /aws/service/global-infrastructure/regions——所有 region 的清單。
  • /aws/service/eks/optimized-ami/...——EKS 最佳化 AMI ID。

Public parameters 是「永遠啟動最新 AMI」而不需將 AMI ID 寫死在範本中的 SOA-C02 正確答案。

Inventory:軟體與組態目錄

Systems Manager Inventory 按排程收集受管 instance 的中繼資料:

  • 已安裝應用程式(含版本)。
  • 已安裝的 AWS 元件。
  • 網路組態(介面、路由)。
  • 已安裝的 Windows 更新。
  • 指定路徑的檔案。
  • 登錄機碼(Windows)。
  • 操作員定義的自訂 Inventory 類型。

Inventory 底層是一個 State Manager association——它按排程(預設每 30 分鐘)執行 AWS-GatherSoftwareInventory document。收集的資料可在 SSM 主控台和 Inventory API 中查詢,也可透過 Resource Data Sync 同步至中央 S3 bucket,供跨帳號、跨 region 以 Athena 或 QuickSight 查詢。

SOA-C02 常見使用情境:

  • 「找出所有執行 Apache 版本 < 2.4.55 的 instance」——Inventory 查詢已安裝應用程式。
  • 「稽核組織內所有 Windows hotfix 安裝情況」——Resource Data Sync 至 S3 + Athena。
  • 「識別具有特定組態檔案的 instance」——自訂 Inventory 類型。

OpsCenter:運維事項聚合

OpsCenter 是 Systems Manager 管理運維問題(稱為 OpsItems)的工作流程工具。OpsItem 是一個受追蹤的運維問題——它有狀態(OpenIn ProgressResolved)、受指派人員、相關資源和類別。

OpsItems 從以下來源自動建立:

  • CloudWatch alarm 狀態變更(設定後)。
  • AWS Config 不合規事件。
  • AWS Health 事件。
  • GuardDuty 發現。
  • SysOps 工程師手動建立。

OpsCenter 是 SOA-C02「將多個 AWS 服務的運維警報整合到單一分流視圖」的答案。對於完整的事件回應,OpsCenter 與 Incident Manager(獨立子功能)整合,後者增加了 runbooks、值班輪換和聊天頻道整合。

常見陷阱:隔離 VPC 中的 SSM Endpoints

SOA-C02 的典型陷阱:完全私有子網中的 instance(無 NAT、無 IGW、無 Direct Connect、無公有 IP)即使 agent 正在執行且 IAM 角色正確,也無法以受管 instance 形式註冊。Agent 靜默地重試對 ssm.<region>.amazonaws.com 的 DNS 解析和 TLS 握手並逾時。修復方式是三個 SSM VPC interface endpoints(ssmec2messagesssmmessages)。遺漏其中任何一個會產生部分功能問題:

  • 缺少 ssm endpoint——instance 永遠無法註冊。
  • 缺少 ec2messages endpoint——Run Command 和 Patch Manager 失敗。
  • 缺少 ssmmessages endpoint——特別是 Session Manager 失敗(session 建立使用此 endpoint),但 Run Command 可能仍然運作。

考試直接測試三個 endpoint 的需求——只配置 ssm endpoint 並假設其他也能用的考生答錯了。

常見陷阱:Patch Manager 在上班時間重啟生產環境

如果你在 Maintenance Window 之外執行 AWS-RunPatchBaseline 並設定 Operation=InstallRebootOption=RebootIfNeeded——例如作為臨時的 Run Command——目標 instance 會在補丁需要時立即重新開機,不管你是在午餐時間還是正在處理 SEV1 事件。Maintenance Window 才是強制排程和並發的機制。SOA-C02 的教訓:Run Command 用於緊急情況僅掃描;生產補丁應放在帶有 MaxConcurrencyMaxErrors 控制的 Maintenance Window 中。

常見陷阱:Hybrid Activation 代碼重複使用

Hybrid activation 代碼是短期的(預設 24 小時,最長 30 天),且受限於 instance 數量上限。操作員有時嘗試對數百台 on-prem 主機重複使用同一個 activation 代碼,發現超過上限後註冊失敗。正確的模式是在佈建時透過基礎設施即程式碼(CloudFormation、Terraform 透過 Systems Manager API)為每批次鑄造帶有適當 instance 數量上限的 activation 代碼,並定期輪換代碼。

常見陷阱:Run Command 沒有輸出

如果你在 Run Command 呼叫中沒有設定 S3 output bucket 或 CloudWatch Log Group,指令的 stdout 在 Run Command 主控台中截斷為前 2,500 個字元。對於任何產生有意義輸出的指令(多行腳本、組態轉儲、合規報告),請務必在呼叫時指定 S3 輸出位置——這是 SOA-C02 常見干擾項,考生以為 Run Command 壞了,但實際上只是輸出被截斷了。

SOA-C02 vs SAA-C03:運維視角

問題風格 SAA-C03 視角 SOA-C02 視角
補丁管理 「哪個 AWS 服務可自動化 OS 補丁?」 「Patch Manager 上週日跳過了 12% 的 instance——依序列出診斷步驟。」
跳板機替代 「哪個服務可安全取代 SSH 跳板機?」 「設定帶有 KMS 加密 CloudWatch Logs 和 30 分鐘閒置逾時的 Session Manager。」
密鑰管理 「在 Parameter Store 和 Secrets Manager 之間選擇。」 「RDS 憑證寫死在 EC2 user-data——遷移至 Secrets Manager 並每 30 天輪換一次。」
自動化 「哪個服務執行排程補救?」 「建立帶有正確 AssumeRole 的 Config 規則 + EventBridge + SSM Automation 鏈。」
Run Command 甚少測試。 大量測試——並發、輸出至 S3、MaxErrors、Run Command vs State Manager。
Maintenance Windows 「如何排程機隊補丁?」 「設定 cron cron(0 2 ? * SUN *) 並指定 MaxConcurrency=10% 和 MaxErrors=5%。」
SSM Agent 「SSM Agent 從哪裡來?」 「Instance 在 Fleet Manager 中不可見——列出每個需要驗證的前提條件。」

SAA 考生選擇服務;SOA 考生正確設定它、在不註冊時進行疑難排解,並在事件中操作補丁週期、自動化流水線和 session 日誌稽核。

考試信號:如何辨識 Domain 3.2 題目

  • 「補丁未安裝」——診斷 agent + IAM + 網路,然後檢查基線自動核准延遲,再檢查 Maintenance Window MaxErrors 停止。
  • 「無法 SSH 進入私有子網 instance」——Session Manager + SSM VPC endpoints。永遠不是跳板機 + SSH 金鑰。
  • 「寫死的憑證必須移除」——Secrets Manager(帶輪換)或 Parameter Store SecureString(不需輪換)。
  • 「Config 規則必須自動補救」——Config 補救組態 → SSM Automation runbook,帶有正確的 AssumeRole 和對 ssm.amazonaws.com 的信任。
  • 「持續合規,而非單次」——State Manager association,不是 Run Command。
  • 「按排程補丁」——帶有 cron 的 Maintenance Window、已註冊標籤、AWS-RunPatchBaseline 任務、MaxConcurrency 和 MaxErrors。
  • 「永遠啟動最新 AMI」——/aws/service/ 下的 Public Parameter Store 參數。
  • 「來自多個來源的運維警報需要分流」——OpsCenter OpsItems。
  • 「稽核每個管理員 session」——Session Manager + S3/CloudWatch Logs + KMS 加密。
  • 「在同一排程中補丁 on-prem 主機和 EC2」——SSM hybrid activation + 同時涵蓋兩者的 Maintenance Window。

Domain 3 佔 18%,Task Statement 3.2 涵蓋 Systems Manager 驅動的自動化和補丁,預計在這個確切領域會有 8 到 10 題,加上來自 Domain 1.2(Config + EventBridge + SSM Automation 鏈)的 2–3 題。掌握本節的模式是 SOA-C02 中效益最高的備考活動之一。參考:https://docs.aws.amazon.com/systems-manager/latest/userguide/what-is-systems-manager.html

決策矩陣——每個 SysOps 目標對應的 Systems Manager 能力

考試時使用此查詢表。

運維目標 主要能力 備註
對機隊執行單次指令 Run Command 機隊規模依標籤指定目標;指定 S3 輸出以獲取完整 stdout。
持續維持組態 State Manager association 按排程重複執行 Command document;透過標籤自動納入新 instance。
按排程補丁機隊 Patch Manager + Maintenance Window Patch baseline + Patch Group 標籤 + cron + MaxConcurrency + MaxErrors。
在視窗外執行緊急補丁 Run Command 搭配 AWS-RunPatchBaseline 或將基線自動核准延遲改為 0 以應對緊急 CVE。
取代 SSH 跳板機 Session Manager + S3/CloudWatch Logs、KMS 加密、IAM session policy。
存取私有子網中的 EC2 Session Manager + SSM VPC endpoints 全部三個:ssm、ec2messages、ssmmessages。
儲存帶輪換的 DB 憑證 Secrets Manager 內建 RDS/Redshift/DocumentDB Lambda 輪換。
儲存部分敏感的組態值 Parameter Store SecureString 不需輪換時比 Secrets Manager 更便宜。
永遠啟動最新的 Amazon Linux AMI Public Parameter Store parameter /aws/service/ami-amazon-linux-latest/...
自動補救 Config 規則 Config 補救 → SSM Automation runbook 或 EventBridge → SSM Automation。AssumeRole 必須信任 ssm.amazonaws.com
帶分支的多步驟協調 Automation runbook aws:executeAwsApiaws:branchaws:approve 用於人工關卡。
目錄化機隊的已安裝軟體 Inventory + Resource Data Sync 同步至 S3,以 Athena 查詢。
分流運維警報 OpsCenter OpsItems 聚合 CloudWatch、Config、Health、GuardDuty 發現。
補丁 on-prem 伺服器 SSM Hybrid Activation + Patch Manager 同一個 Maintenance Window 同時涵蓋 EC2 和 on-prem。
太多失敗時停止補丁推進 MaintenanceWindow MaxErrors 生產環境通常設為 5%
限制管理員 shell session 長度 Session Preferences maxSessionDuration 加上 idleSessionTimeout 控制閒置。
對機隊更新 SSM Agent Run Command AWS-UpdateSSMAgent 或透過 Image Builder 將較新 agent 烘焙進 golden AMI。

常見陷阱總整理——Systems Manager Automation、Patch Manager 與 Run Command

陷阱一:補丁「已核准」但未安裝

補丁可以被基線核准,但仍未安裝——因為 instance 不在任何帶有 Operation=Install 的 Maintenance Window 任務範圍內,或因為 Maintenance Window 因 MaxErrors 停止,或因為 instance 在與預期不同的 Patch Group 中。檢查 Maintenance Window 歷程記錄和每台 instance 的合規狀態。

陷阱二:預設 7 天自動核准延遲拖慢緊急補丁

以明確核准清單或 auto-approval delay = 0 的自訂基線覆蓋。不要等 7 天。

陷阱三:SSM Agent 在缺少 IAM 或網路時靜默失敗

AmazonSSMManagedInstanceCore 加上到三個 SSM 端點的連線能力。缺少任一都是靜默失敗——Fleet Manager 根本不會列出該 instance。

陷阱四:Session Manager 日誌未加密

預設 session 日誌未加密。對於合規環境,在 session 偏好設定中使用客戶自管 KMS 金鑰設定 kmsKeyId

陷阱五:Automation runbook 的 AssumeRole 為空

沒有 AssumeRole,runbook 嘗試使用呼叫者的身分。有線配置的 Config 補救無法提供這個——runbook 必須指定 AssumeRole,且角色的信任政策必須包含 ssm.amazonaws.com

陷阱六:Run Command 輸出截斷為 2,500 字元

對任何非簡單的指令輸出,在呼叫時務必指定 S3 output bucket 和/或 CloudWatch Log Group。

陷阱七:Parameter Store SecureString 缺少 kms:Decrypt

讀取 SecureString 需要 ssm:GetParameter 以及加密金鑰的 kms:Decrypt。缺少後者會在解密時產生 AccessDeniedException,考生常誤診為參數存取問題。

陷阱八:Maintenance Window 任務應使用 Maintenance Window 服務角色而非 instance profile

Maintenance Window 本身以服務角色AWS-SystemsManager-MaintenanceWindowRole 或類似)執行,與目標 instance 的 instance profile 不同。協調 Run Command 的權限來自服務角色;document 在主機上執行的動作的權限來自 instance profile。混淆兩者會導致難以追蹤的權限錯誤。

陷阱九:Patch Group 標籤鍵有空格

字面標籤鍵是 Patch Group(含空格)——不是 PatchGroup(駝峰式)也不是 patch_group。拼錯鍵名會讓 instance 靜默地退回預設基線。

陷阱十:一台 instance,一個 Patch Group

一台 instance 每次只能屬於一個 Patch Group。以 Patch Group=fooPatch Group=bar 同時標記一台 instance(第二個標籤覆蓋第一個)不會讓它進入兩個基線——它只採用最後套用的標籤值。

FAQ — Systems Manager Automation、Patch Manager 與 Run Command

Q1:為什麼 Run Command 沒有列出我的 EC2 instance?

三個前提條件必須全部滿足:(a) SSM Agent 正在 instance 上執行——檢查 systemctl status amazon-ssm-agent;(b) IAM instance profile 附有 AmazonSSMManagedInstanceCore(或等效政策);以及 (c) instance 透過 HTTPS port 443 有到 ssm.<region>.amazonaws.comec2messages.<region>.amazonaws.comssmmessages.<region>.amazonaws.com 的對外網路連線——透過 internet gateway、NAT gateway 或 VPC interface endpoints。如果 instance 在完全私有的子網中,你必須建立全部三個 VPC interface endpoints。SOA-C02 考試的診斷順序確實是:先 agent、再 IAM、再網路。

Q2:Run Command 和 State Manager 有什麼差異?

Run Command 是單次執行:你觸發它,它執行一次,完成。State Manager 是持續保持期望狀態:一個 State Manager association 按排程對目標集重複執行 Command document,自動納入符合目標標籤的新 instance。兩者底層使用相同的 Command documents。SOA-C02 的判斷線索是動詞:「現在執行」或「套用一次」→ Run Command;「確保」、「維持」或「持續強制執行」→ State Manager。State Manager 也為每個 association 記錄每台 instance 的合規狀態,而 Run Command 不會。

Q3:當預設基線有 7 天自動核准延遲時,如何在 24 小時內推出緊急安全補丁?

三個選項。(a) 以 KB 編號或 CVE 將特定補丁加入基線的明確核准清單——這僅對該補丁覆蓋自動核准延遲。(b) 為緊急情況建立 auto-approval delay = 0新 Patch baseline,關聯到受影響的 Patch Group,之後再還原。(c) 使用 Run Command 搭配 AWS-RunPatchBaseline 和指向一次性緊急基線的 BaselineOverride 參數。預設 7 天延遲不是硬性限制——它是保護免受問題補丁影響的預設值,當已知重大漏洞的風險超過迴歸風險時可以覆蓋。

Q4:什麼時候應選擇 Parameter Store SecureString vs Secrets Manager?

在以下情況使用 Secrets Manager:(a) 密鑰需要自動輪換——Secrets Manager 對 RDS、Redshift、DocumentDB 憑證有內建 Lambda 輪換,對其他密鑰有自訂輪換;(b) 密鑰值較大(Secrets Manager 允許 64 KB,而 SecureString 的 Advanced 層為 8 KB,Standard 層為 4 KB);或 (c) 你需要透過資源政策進行細粒度的跨帳號共享。在以下情況使用 Parameter Store SecureString:(a) 值是組態資料,可能敏感,但不需要輪換;(b) 大量使用時成本較重要——Parameter Store Standard 免費;(c) 你想要階層組織(/myapp/prod/db/host)。對於 SOA-C02 考試,「輪換」或「RDS 憑證」→ Secrets Manager;「應用程式組態值,部分敏感」→ Parameter Store SecureString。

Q5:為什麼我的 SSM Automation runbook 因「AssumeRole 被拒」而失敗?

Runbook 的 assumeRole 參數指向一個 IAM 角色,該角色的信任政策必須包含 ssm.amazonaws.com 作為受信任主體。沒有它,Systems Manager Automation 服務就無法假設該角色,需要該角色權限的每個步驟都會失敗。此外,角色必須擁有任何步驟所執行的每個 API 呼叫的權限——aws:executeAwsApi 呼叫需要被呼叫 API 的明確 IAM 權限。常見模式:呼叫 s3:PutBucketPolicy 的補救 runbook 若角色不包含該權限,即使 AssumeRole 本身成功,也會在該步驟失敗。排解 Automation runbook 失敗時,務必同時檢查信任政策和權限。

Q6:如何在同一個排程中補丁 on-prem 伺服器和 EC2 instance?

透過 SSM Hybrid Activation 註冊 on-prem 伺服器:在 Systems Manager 主控台中,建立帶有 IAM 服務角色的 activation,取得 activation 代碼和 ID,並在每台 on-prem 主機上以 amazon-ssm-agent -register -code <code> -id <id> -region <region> 執行 agent。主機現在會以 mi- 前綴(相對於 EC2 的 i-)顯示為受管 instance。以和你的 EC2 機隊相同的 Patch Group 標籤標記 on-prem instance。設定帶有匹配標籤的目標集的 Maintenance Window,同樣的 AWS-RunPatchBaseline 任務會在同一個視窗中補丁 EC2 和 on-prem instance。這是 SOA-C02 跨雲和 on-prem 統一補丁的典範答案。

Q7:Maintenance Window 中的 MaxConcurrency 和 MaxErrors 有什麼差異?

MaxConcurrency 控制並行度——同時執行任務的目標 instance 數量。10 表示同時 10 台;10% 表示目標集的 10%。第一批完成後,下一批開始。MaxErrors 控制失敗容忍度——整個推進停止前的任務失敗數量。5 表示 5 次失敗後停止;5% 表示目標集的 5% 失敗後停止。兩者配合使用:在 200 台 instance 的機隊上,MaxConcurrency=10%MaxErrors=5% 意味著視窗以 20 台一批進行,若 200 台中有 10 台失敗則永久停止。生產補丁通常使用較小的並發(5–20%)和較小的錯誤容忍(1–5%),避免有問題的補丁導致整個機隊下線。

Q8:能否從另一個帳號執行 SSM Automation runbook?

可以,透過 Automation 跨帳號、跨 region 執行。Runbook 在來源帳號中呼叫,但透過假設的角色在目標帳號中執行 API 呼叫。設定方式:(a) 在每個目標帳號中,建立由來源帳號信任且帶有 runbook 所需權限的 IAM 角色;(b) 在來源帳號中,建立能對目標帳號角色執行 sts:AssumeRoleAWS-SystemsManager-AutomationExecutionRole;(c) 以列出目標帳號和 region 的 TargetLocations 參數呼叫 runbook。Runbook 引擎為每個位置假設目標帳號角色並在該處執行。SOA-C02 可能問「從中央安全帳號補丁多帳號機隊」——Automation 跨帳號執行 + Systems Manager StackSets 式扇出是答案。

Q9:Session Manager session 日誌如何運作,日誌存放在哪裡?

Session 可記錄至 CloudWatch LogsS3 或兩者,在 session 偏好設定SessionManagerRunShell SSM document)中設定。每個按鍵和指令輸出都串流至配置的目的地。KMS 加密透過偏好設定中的 kmsKeyId 選擇性啟用。啟動 session 的 IAM 主體需要配置目的地的 s3:PutObjectlogs:CreateLogStream / logs:PutLogEvents(SSM 服務代表使用者身分串流資料)。Session 日誌是 SSH 替代使用情境的主要稽核軌跡,SOA-C02 預期你在合規情境中以 KMS 加密啟用它們。不設定 session 偏好設定,sessions 完全不會記錄——只有中繼資料(誰、何時、哪個 instance)會出現在 CloudTrail 中。

Q10:Maintenance Window 任務在視窗時長結束時仍在執行會怎樣?

Maintenance Windows 有一個 Cutoff 值(以小時計),指定在視窗結束前多少時間停止啟動新任務。已執行的任務在視窗結束後若主機在合理時間內完成則繼續進行,但截止後不再納入新 instance。例如,Duration=4 小時、Cutoff=1 小時,視窗從凌晨兩點開始,五點停止啟動新任務,六點結束。這保護了在最後時刻啟動的任務不會在維護時間內無法完成。SOA-C02 考試可能問「補丁只部分套用到機隊,超過某個時間點後新 instance 未被納入」——答案是 Cutoff,不是失敗。調整 Cutoff 至少等於最長預期的每台 instance 任務時長,確保推進在視窗內乾淨完成。

延伸閱讀與相關運維模式

Systems Manager 就位後,接下來的運維層包括:CloudFormation Stacks 和 StackSets,用於部署 SSM 資源本身的基礎設施即程式碼佈建,為可重複環境補充 Systems Manager;排程任務與 Config 自動補救,用於驅動 Systems Manager Automation 的 EventBridge cron 規則和 Config 補救設定;EventBridge 規則和 SNS 通知,用於將 alarms 和 Health 事件路由進同一條 SSM Automation 流水線;以及 IAM 政策、MFA、SCPs 和存取疑難排解,用於每項 Systems Manager 能力所依賴的 IAM 身分(instance profiles、automation 角色、Maintenance Window 服務角色)。

官方資料來源

更多 SOA-C02 主題