使用 Patch Manager 排程幫 EC2 上 Patch
本文承接 Systems Manager 的 Session Manager 設定,進一步介紹 Patch Manager,讓 EC2 自動定期掃描與安裝補修程式。
前一篇介紹完 Systems Manager 的 Session Manager 設定後,
裝完 SSM Agent 的機械,
就進一步可以使用 Patch Manager 自動管理補修程式。
這次就來看怎麼做排程與設定。
Patch Manager 是什麼
Patch Manager 是 AWS Systems Manager 底下的一個功能,
可以幫你集中管理多台主機的作業系統與應用程式補修程式。
核心功能包括:
- Patch 掃描:檢查主機需要哪些補修
- Patch 安裝:定期或手動安裝補修程式
- Patch 報告:匯總各主機的 Patch 狀況
- 排除規則:可以設定某些補修跳過安裝
相比於手動登入每台主機更新,
或者自己寫 cron job,
Patch Manager 提供的優勢是:
- 集中控管政策
- 可稽核與合規性報告
- 彈性排程(維護時間視窗)
- 故障時能自動回滾
使用前需要先準備什麼
和 Session Manager 類似,
Patch Manager 需要你準備好:
- EC2 已通過 Session Manager 設定(IAM Role、Agent 都好)
- EC2 可以連到 SSM 相關 Endpoint(已有的話無需額外設定)
- IAM Role 有 Patch Manager 權限
設定 IAM Policy
如果你已經綁定 AmazonSSMManagedInstanceCore,
Patch Manager 基本權限已包含在內。
但如果你想更精準控制,可以搭配下面的自訂 Policy:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ssm:DescribeDocument",
"ssm:GetDocument",
"ssm:DescribeDocumentParameters"
],
"Resource": "arn:aws:ssm:*:*:document/AWS-RunPatchBaseline"
},
{
"Effect": "Allow",
"Action": [
"ssm:GetAutomationExecution",
"ssm:StartAutomationExecution",
"ssm:GetCommandInvocation",
"ssm:ListCommandInvocations",
"ssm:ListCommands"
],
"Resource": "*"
},
{
"Effect": "Allow",
"Action": [
"sns:Publish"
],
"Resource": "arn:aws:sns:*:*:aws-patch-manager-*"
}
]
}
通常 Patch Manager 不需要額外的 S3 或其他服務權限,
除非你有特殊的補修來源設定。
Patch Manager 的運作方式
Patch Manager 基本上有兩種工作模式:
- Scan Only:只掃描,告訴你哪些補修可用,不安裝
- Scan and Install:邊掃邊裝
通常實務上會先用 Scan Only 了解狀況,
再轉成 Scan and Install 定期更新。
實際設定補修排程
步驟 1:建立 Patch Baseline
進到 AWS Console,
打開 Systems Manager > Patch Manager > Patch Baselines。
建立一個新的 Baseline:
- Baseline 名稱:例如
linux-standard - 作業系統:選 Linux 或 Windows
- Approval rules:
- 選擇「自動批准符合分類的補修」
- 常見分類:
Security、Bugfix、Enhancement - 也可以設定「在補修發佈後多久批准」(例如 7 天)
如果有特定補修要排除,
可以在「Patch exceptions」列舉,
例如排除某些 kernel 版本更新。
步驟 2:建立維護時間(Maintenance Window)
回到 Systems Manager 主頁,
找到 Maintenance Windows。
建立新的維護時間:
- 名稱:例如
weekly-patch-sunday - 排程:Cron 格式,例如每週日凌晨 2 點
1
cron(0 2 ? * SUN *)
- 持續時間:例如 2 小時(預留緩衝)
- 時區:選你的營運時區
步驟 3:建立 Patch Task
在維護時間內加入一個 Task:
- Task type:選
Run command - Document name:
AWS-RunPatchBaseline - Service role:選你的 Patch Manager 角色
- Targets:選要 Patch 的 EC2
- 可以用 tag 選,例如
Environment: Production - 也可以用 Instance ID 直接指定
- 可以用 tag 選,例如
- Parameters:
- Operation:選
Install(如果要邊掃邊裝)或Scan(只掃) - Baseline Override:如果有多個 baseline,在這指定
- Operation:選
步驟 4:等待排程執行
Patch Manager 會在你設定的維護時間執行,
你可以去 Patch Manager > Compliance 查看狀況。
每個 EC2 的 Patch 狀態會顯示:
- Compliant:已安裝所有補修
- Non-compliant:還有補修未裝
- Failed:本次執行失敗
常見設定與最佳實踐
1. 先從 Scan Only 開始
不要一上來就 Install,
先用 Scan 跑一陣子,
確認補修清單符合預期,
再切成 Install。
2. 分環境管理
例如分 Dev、Staging、Production 三個 Patch Baseline,
Production 可以設更保守的批准規則(例如延後 2-4 週),
Dev 就可以激進一些。
3. 使用 Patch Groups
如果要把 EC2 分組做不同補修策略,
可以在 EC2 tag 上加 Patch Group,
然後在 Baseline 對應設定。
4. 設定通知
可以搭配 SNS 或 EventBridge 發送補修完成通知,
這樣有個稽核軌跡。
基本上,EventBridge 會擷取 Scan 或 Install 後 EC2 的狀態變化,
然後推送事件。
直接用 EventBridge + SNS 的組合可以發送基礎通知,
但如果需要高度客製化的內容(例如包含 Patch 名單、失敗原因等詳細資訊),
就需要再搭配 Lambda 做額外處理,才能寄出更完整的通知。
常見問題與排查
1) 維護時間已到,但 Patch 沒執行
通常檢查:
- EC2 的 IAM Role 是否有 Patch 權限
- EC2 是否 Online(用
aws ssm describe-instance-information確認) - Maintenance Window 的 Target 是否有納入該 EC2
2) Patch 執行失敗(Failed 狀態)
原因通常是:
- 補修安裝需要重啟,但沒開啟「自動重啟」
- 補修套件本身在該系統不相容
- 磁碟空間不夠
去 Compliance 的執行紀錄看詳細 log。
3) Patch 安裝後系統變慢或異常
建議在 Staging 環境先測,
確認補修不會造成相容性問題,
再推到 Production。
4) 想暫時跳過某次 Patch
可以暫時停用 Maintenance Window,
或者直接移除該 EC2 的 target。
小結
Patch Manager 的核心價值是:
你無須手動進每台主機,
可以統一排程、統一報告、統一稽核。
建議導入流程:
- 先用 Scan 了解現狀
- 在非關鍵環境測試 Install
- 建立 Dev / Staging / Prod 的分級政策
- 持續監控 Compliance 報告
這樣就能建立一套穩健的自動補修管制。
參考資料
- AWS Patch Manager: https://docs.aws.amazon.com/zh_tw/systems-manager/latest/userguide/patch-manager.html
- AWS-RunPatchBaseline Document: https://docs.aws.amazon.com/zh_tw/systems-manager/latest/userguide/documents-ssm-docs-run-command.html
- Patch Baselines: https://docs.aws.amazon.com/zh_tw/systems-manager/latest/userguide/patch-baselines.html
- Maintenance Windows: https://docs.aws.amazon.com/zh_tw/systems-manager/latest/userguide/maintenance-windows.html