了解 SSM Agent 的技術詳細資訊
使用本主題中的資訊可協助您實作 AWS Systems Manager Agent (SSM Agent) 並了解代理程式的運作方式。
主題
SSM Agent 3.2.x.x 版憑證行為
當使用 Quick Setup 中的預設主機管理組態登入執行個體時,SSM Agent 會將一組臨時憑證資料儲存在 /var/lib/amazon/ssm/credentials
(適用於 Linux 和 macOS) 或 %PROGRAMFILES%\Amazon\SSM\credentials
(適用於 Windows Server)。這些臨時憑證具有您為預設主機管理組態選擇的 IAM 角色指定的許可。在 Linux 中,只有 root 帳戶可以存取這些憑證。在 Windows Server 中,只有 SYSTEM 帳戶和本機管理員可以存取這些憑證。
SSM Agent 憑證優先順序
本主題描述了 SSM Agent 如何授予在您資源上執行動作之許可的重要資訊。
注意
對邊緣裝置的支援略有不同。您必須將邊緣裝置設定為使用 AWS IoT Greengrass 核心軟體,設定 AWS Identity and Access Management (IAM) 服務角色,並透過使用 AWS IoT Greengrass 將 SSM Agent 部署至您的裝置。如需詳細資訊,請參閱使用 Systems Manager 管理邊緣裝置。
SSM Agent 安裝在機器上時,其需要許可才能與 Systems Manager 服務進行通訊。在 Amazon Elastic Compute Cloud (Amazon EC2) 執行個體上,會在連接到執行個體的執行個體設定檔中提供這些許可。在非 EC2 機器上,SSM Agent 通常會從共用憑證檔案中取得所需的許可,該檔案位於 /root/.aws/credentials
(Linux 和 macOS) 或 %USERPROFILE%\.aws\credentials
(Windows Server)。在混合啟用程序中,會將所需的許可新增至此檔案。
然而,在極少數情況下,機器最終可能會將許可新增至多個位置,SSM Agent 在這些位置會檢查許可以執行其任務。
例如,假如您已將某個 EC2 執行個體設定為由 Systems Manager 管理,則該組態包含連接執行個體設定檔。然後您決定也將該執行個體用於開發人員或最終使用者任務,並安裝 AWS Command Line Interface (AWS CLI)。此安裝會導致其他許可新增至執行個體上的憑證檔案。
當您在執行個體上執行 Systems Manager 命令時,SSM Agent 可能會嘗試使用與您預期使用的憑證不同的憑證,例如憑證檔案而非執行個體設定檔。這是因為 SSM Agent 會依照指定的順序尋找預設憑證供應者鏈結的憑證。
注意
在 Linux 和 macOS 中,SSM Agent 以根使用者身分執行。因此,SSM Agent 在此程序中查找的環境變數和憑證檔案只是根使用者 (/root/.aws/credentials
) 的環境變數和憑證檔案。在搜尋憑證期間,SSM Agent 不會查看執行個體上的任何其他使用者的環境變數或憑證檔案。
預設供應者鏈結會依以下順序查找憑證:
-
環境變數 (如果已設定) (
AWS_ACCESS_KEY_ID
和AWS_SECRET_ACCESS_KEY
)。 -
共用的憑證檔案 (Linux 的
$HOME/.aws/credentials
以及 Windows Server 的 macOS 或%USERPROFILE%\.aws\credentials
),例如具有混合啟用或 AWS CLI 安裝提供的許可。 -
任務的 AWS Identity and Access Management (IAM) 角色 (如果存在應用程式),它使用 Amazon Elastic Container Service (Amazon ECS) 任務定義或 RunTask API 操作。
-
連接至 Amazon EC2 執行個體的執行個體設定檔。
-
為預設主機管理組態選擇的 IAM 角色。
如需相關資訊,請參閱下列主題:
-
EC2 執行個體設定檔:設定 Systems Manager 所需的執行個體許可
-
AWS CLI 憑證 - AWS Command Line Interface 使用者指南中的組態與憑證檔案設定
-
預設憑證供應者鏈結 - AWS SDK for Go 開發人員指南中的指定憑證
注意
AWS SDK for Go 開發人員指南中的本主題描述了 SDK for Go 的預設供應者鏈結;但是,相同的原則適用於評估 SSM Agent 憑證。
設定 SSM Agent 以與聯邦資訊處理標準 (FIPS) 搭配使用
如需將 Systems Manager 與聯邦資訊處理標準 (FIPS) 140-3 驗證的密碼編譯模組搭配使用,您可以將 AWS Systems Manager Agent (SSM Agent) 設定為在支援的區域中使用 FIPS 端點。
設定 SSM Agent 以連線至 FIPS 140-3 端點
-
連線至受管節點。
-
前往內含
amazon-ssm-agent.json
檔案的目錄:-
Linux:
/etc/amazon/ssm/
-
macOS:
/opt/aws/ssm/
-
Windows Server:
C:\Program Files\Amazon\SSM\
-
-
開啟檔案
amazon-ssm-agent.json
進行編輯。提示
如果尚無
amazon-ssm-agent.json
檔案,請將amazon-ssm-agent.json.template
的內容複製到名為amazon-ssm-agent.json
的新檔案。將amazon-ssm-agent.json
儲存在amazon-ssm-agent.json.template
所在的相同目錄中。 -
將下列內容新增至檔案。將
區域
預留位置值取代為分割區的適當區域碼:{ ---Existing file content, if any--- "Mds": { "Endpoint": "ec2messages-fips.
region
.amazonaws.com", }, "Ssm": { "Endpoint": "ssm-fips.region
.amazonaws.com", }, "Mgs": { "Endpoint": "ssmmessages-fips.region
.amazonaws.com", "Region": "region
" }, "S3": { "Endpoint": "s3-fips.dualstack.region
.amazonaws.com", "Region":region
" }, "Kms": { "Endpoint": "kms-fips.region
.amazonaws.com" } }支援的區域包含以下區域:
-
us-east-1
,表示美國東部 (維吉尼亞北部) 區域 -
us-east-2
,表示美國東部 (俄亥俄) 區域 -
us-west-1
,表示美國西部 (加利佛尼亞北部) 區域 -
us-west-2
,表示美國西部 (奧勒岡) 區域 -
ca-west-1
,表示加拿大西部 (卡加利) 區域
-
-
儲存檔案,並重新啟動 SSM Agent。
每次變更組態時,請重新啟動 SSM Agent。
您可以使用相同的程序來自訂 SSM Agent 的其他功能。如需可用組態屬性及其預設值的最新清單,請參閱 GitHub 上 amazon-ssm-agent
儲存庫中的組態屬性定義
如需有關 AWS 對 FIPS 支援的詳細資訊,請參閱聯邦資訊處理標準 (FIPS) 140-3
關於本機 ssm 使用者帳戶
從 SSM Agent 的 2.3.50.0 版開始,代理程式會建立稱為 ssm-user
的本機使用者帳戶,並將其新增至 /etc/sudoers.d
目錄 (Linux 和 macOS) 或系統管理員群組 (Windows Server)。在代理程式 2.3.612.0 之前的版本中,當 SSM Agent 第一次啟動,或在安裝後重新啟動時,會建立該帳戶。在版本 2.3.612.0 和更高版本中,當執行個體上初次啟動工作階段時,會建立 ssm-user
帳戶。當工作階段在 Session Manager (AWS Systems Manager 的一個功能) 中開始時,此 ssm-user
是預設的 OS 使用者。您可以將 ssm-user
移動到權限較少的群組或變更 sudoers
檔案,以改變許可。解除安裝 SSM Agent 時,ssm-user
帳戶並不會從系統中移除。
在 Windows Server 上,SSM Agent 會處理當每個工作階段開始時,為 ssm-user
帳戶設定新的密碼。Linux 受管執行個體上沒有設定 ssm-user
的密碼。
從 SSM Agent 的 2.3.612.0 版本開始,不會在用作網域控制器的 Windows Server 機器上自動建立 ssm-user
帳戶。若要在 Windows Server 網域控制器上使用 Session Manager,請手動建立 ssm-user
帳戶 (如果尚不存在),並將網域管理員許可指派給使用者。
重要
為了建立 ssm-user
帳戶,連接到執行個體的執行個體設定檔必須提供必要的許可。如需相關資訊,請參閱步驟 2:為 Session Manager 確認或新增執行個體許可。
SSM Agent 與 Instance Metadata Service (IMDS)
Systems Manager 依賴 EC2 執行個體中繼資料才能正確運作。Systems Manager 可以使用 Instance Metadata Service 的第 1 版或第 2 版 (IMDSv1 和 IMDSv2) 來存取執行個體中繼資料。您的執行個體必須可以存取執行個體中繼資料服務的 IPv4 地址:169.254.169.254。如需詳細資訊,請參閱《Amazon EC2 使用者指南》中的執行個體中繼資料與使用者資料。
讓 SSM Agent 保持最新狀態
當新功能新增至 Systems Manager,或對現有功能更新時,會發行 SSM Agent 的更新版本。若未使用最新版本的代理程式,您的受管節點可能會無法使用各種 Systems Manager 的功能及特點。因此,我們建議您讓機器的 SSM Agent 自動保持最新狀態。如需相關資訊,請參閱 自動化 SSM Agent 更新。請訂閱 GitHub 上的 SSM Agent 版本備註
注意
當新功能新增至 Systems Manager,或對現有功能更新時,會發行 SSM Agent 的更新版本。若未使用最新版本的代理程式,您的受管節點可能會無法使用各種 Systems Manager 的功能及特點。因此,我們建議您讓機器的 SSM Agent 自動保持最新狀態。如需相關資訊,請參閱 自動化 SSM Agent 更新。請訂閱 GitHub 上的 SSM Agent 版本備註
根據預設,包含 SSM Agent 的 Amazon Machine Images (AMIs) 可能最長需要兩週,才能使用 SSM Agent 的最新版本進行更新。我們建議您設定更頻繁地自動更新 SSM Agent。
確定未修改、移動或刪除 SSM Agent 安裝目錄
SSM Agent 安裝於 /var/lib/amazon/ssm/
(Linux 和 macOS ) 以及 %PROGRAMFILES%\Amazon\SSM\
(Windows Server)。這些安裝目錄包含 SSM Agent 使用的重要檔案和資料夾,例如認證檔案、處理程序間通訊 (IPC) 資源,以及協同運作資料夾。不應修改、移動或刪除安裝目錄內的任何內容。否則,SSM Agent 可能會停止正常運作。
按 AWS 區域 進行 SSM Agent 滾動更新
SSM Agent更新在其 GitHub 儲存庫中可供使用之後,更新版本在不同時間推廣到所有 AWS 區域最多可能需要兩週的時間。因此,您可能會在嘗試於區域中部署新版本 SSM Agent 時收到「不支援目前平台」或「正在將 amazon-ssm-agent 更新到較舊版本,請開啟允許繼續降級」等錯誤。
若要判斷您可使用的 SSM Agent 版本,可執行 curl
命令。
若要查看全域下載儲存貯體中可用的代理程式版本,請執行以下命令。
curl https://s3.amazonaws.com/ec2-downloads-windows/SSMAgent/latest/VERSION
若要查看特定區域中可用的代理程式版本,請執行以下命令,使用您工作所在區域替代 region
,例如使用 us-east-2
替代美國東部 (俄亥俄) 區域。
curl https://s3.
region
.amazonaws.com/amazon-ssm-region
/latest/VERSION
您也可以直接在瀏覽器中開啟 VERSION
文件,而不需要 curl
命令。
SSM Agent 與 AWS 受管 S3 儲存貯體通訊
在執行各種 Systems Manager 操作的過程中,AWS Systems Manager Agent (SSM Agent) 會存取許多 Amazon Simple Storage Service (Amazon S3) 儲存貯體。可公開存取這些 S3 儲存貯體,SSM Agent 預設使用 HTTP
呼叫連線到它們。
但是,如果您在 Systems Manager 操作中使用虛擬私有雲端 (VPC) 端點,則必須在適用於 Systems Manager 的 Amazon Elastic Compute Cloud (Amazon EC2) 執行個體設定檔中提供明確許可,或在混合多雲端環境中非 EC2 機器的服務角色中提供明確許可。否則,您的資源無法存取這些公有儲存貯體。
若要在使用 VPC 端點時對這些節點授予受管執行個體存取權,您可以建立自訂 Amazon S3 許可政策,然後將它連接到您的執行個體描述檔 (適用於 EC2 執行個體) 或服務角色 (適用於非 EC2 受管節點)。
如需有關在 Systems Manager 操作中使用虛擬私有雲端 (VPC) 端點的資訊,請參閱使用適用於 Systems Manager 的 VPC 端點來改善 EC2 執行個體的安全性。
注意
這些許可僅提供 SSM Agent 所需的 AWS 受管儲存貯體存取權限。這些許可不提供其他 Amazon Simple Storage Service (Amazon S3) 操作所需的許可。這些許可也不提供自有 S3 儲存貯體的許可。
如需詳細資訊,請參閱下列主題:
所需的儲存貯體許可
下表說明 SSM Agent 可能需要存取的每個 S3 儲存貯體,以便進行 Systems Manager 操作。
注意
region
代表 AWS Systems Manager 支援之 AWS 區域 的識別符,例如 us-east-2
代表美國東部 (俄亥俄) 區域。如需支援的 region
值的清單,請參閱《Amazon Web Services 一般參考》中 Systems Manager 服務端點一節的區域資料欄。
SSM Agent 需要的 Amazon Simple Storage Service (Amazon S3) 許可
S3 儲存貯體 ARN | 描述 |
---|---|
|
某些僅支援 Windows Server 作業系統以及某些提供跨平台支援的 SSM 文件 (例如 |
|
更新 SSM Agent 安裝的必要項目。這些儲存貯體包含 SSM Agent 安裝套件及 AWS-UpdateSSMAgent 文件和外掛程式所參考的安裝資訊清單。如果沒有提供這些許可,則 SSM Agent 會進行 HTTP 呼叫以下載更新。 |
|
使用 2.2.45.0 之前版本的 SSM Agent 來執行 SSM 文件 |
|
提供 2.2.45.0 版本和更高版本的 SSM Agent 所使用分發服務的存取權。此服務是用來執行文件 所有 AWS 區域 都需要此許可,非洲 (開普敦) 區域 (af-south-1) 和歐洲 (米蘭) 區域 (eu-south-1) 除外。 |
|
提供 2.2.45.0 版本和更高版本的 SSM Agent 所使用分發服務的存取權。此服務用於執行 SSM 文件 僅非洲 (開普敦) 區域 (af-south-1) 和歐洲 (米蘭) 區域 (eu-south-1) 需要此許可。 |
|
允許存取包含 Distributor (AWS Systems Manager 的一個功能) 套件的 S3 儲存貯體,它們由 AWS 所有。 |
arn:aws:s3:::aws-ssm- |
支援存取 S3 儲存貯體,其中包含與非修補 Systems Manager 文件 (SSM Command 文件) 搭配使用所需的模組。例如:arn:aws:s3:::aws-ssm-us-east-2/* 。
以下是存放在這些儲存貯體中的一些常用 SSM 文件。
|
-或-
|
允許存取包含修補基準快照的 S3 儲存貯體。如果您使用下列任一 SSM Command 文件,則這是必需的:
大多數支援的 AWS 區域的儲存貯體都使用以下格式:
對於某些區域,儲存貯體名稱中會包含額外的唯一尾碼。例如,中東 (巴林) 區域 (me-south-1) 的儲存貯體名稱如下所示:
如需修補基準快照儲存貯體名稱的完整清單,請參閱包含 AWS 受管修補基準快照的儲存貯體。 注意如果您使用內部部署防火牆並計劃使用 Patch Manager,則該防火牆也必須允許存取適當的修補基準端點。 |
對於 Linux 和 Windows Server 受管節點: 對於 macOS 的 Amazon EC2 執行個體: |
支援存取包含 SSM Command 文件的 S3 儲存貯體,以便在 Patch Manager 中進行修補操作。每個儲存貯體名稱都包含唯一的尾碼,例如
SSM 文件以下是存放在這些儲存貯體中的一些常用 SSM 文件。
如需修補操作的 AWS 受管 S3 儲存貯體的完整清單,請參閱下列主題: |
範例
以下範例說明如何在美國東部 (俄亥俄) 區域 (us-east-2) 中提供 Systems Manager 操作所需的 S3 儲存貯體的存取權。在大多數情況下,只有在使用 VPC 端點時,才需要在執行個體設定檔或服務角色中明確提供這些許可。
重要
我們建議您避免在這個政策中的特定區域使用萬用字元 (*)。例如,使用 arn:aws:s3:::aws-ssm-us-east-2/*
而不使用 arn:aws:s3:::aws-ssm-*/*
。使用萬用字元可能允許存取您不想授與存取權的 S3 儲存貯體。如果您要將執行個體設定檔用於多個區域,建議您為每個區域重複第一個 Statement
區塊。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "s3:GetObject", "Resource": [ "arn:aws:s3:::aws-windows-downloads-us-east-2/*", "arn:aws:s3:::amazon-ssm-us-east-2/*", "arn:aws:s3:::amazon-ssm-packages-us-east-2/*", "arn:aws:s3:::us-east-2-birdwatcher-prod/*", "arn:aws:s3:::aws-ssm-document-attachments-us-east-2/*", "arn:aws:s3:::aws-ssm-us-east-2/*", "arn:aws:s3:::patch-baseline-snapshot-us-east-2/*", "arn:aws:s3:::aws-patch-manager-us-east-2-552881074/*", "arn:aws:s3:::aws-patchmanager-macos-us-east-2-552881074/*" ] } ] }
使用硬體指紋驗證啟用混合模式機器
對於混合多雲端環境中的非 EC2 機器,SSM Agent 會收集許多系統屬性 (稱為硬體雜湊),並使用這些屬性來計算指紋。指紋是不透明字串,代理程式會將其傳遞給某些 Systems Manager API。此唯一的指紋會將呼叫者與特定的啟用混合模式受管節點建立關聯。代理程式會將指紋和硬體雜湊存放在某個位置的本機磁碟上 (稱為保存庫)。
當註冊機器以搭配 Systems Manager 使用時,代理程式會計算硬體雜湊和指紋。然後,當代理程式傳送 RegisterManagedInstance
命令時,指紋會傳回到 Systems Manager 服務。
稍後,當傳送 RequestManagedInstanceRoleToken
命令時,代理程式會檢查保存庫中的指紋和硬體雜湊,以確保目前的機器屬性與儲存的硬體雜湊相符。如果目前的機器屬性與儲存在「保存庫」中的硬體雜湊相符,則代理程式會將指紋從「保存庫」傳遞至 RegisterManagedInstance
,從而產生成功呼叫。
如果目前的機器屬性與儲存的硬體雜湊不相符,SSM Agent 會計算新指紋,將新硬體雜湊和指紋儲存在「保存庫」中,並將新指紋傳遞至 RequestManagedInstanceRoleToken
。這會導致 RequestManagedInstanceRoleToken
失敗,而代理程式將無法取得角色權杖以連線到 Systems Manager 服務。
此失敗是故意而為之,用來作為驗證步驟,以防止多個受管節點與作為相同受管節點的 Systems Manager 服務進行通訊。
將目前機器屬性與儲存在保存庫中的硬體雜湊比較時,代理程式會使用下列邏輯來判斷舊雜湊與新雜湊是否相符:
-
如果 SID (系統/機器 ID) 不同,則不符。
-
否則,如果 IP 地址相同,則相符。
-
否則,系統會計算相符的機器屬性百分比,並與使用者設定的相似度臨界值進行比較,以判斷是否有相符項。
相似度臨界值會儲存在保存庫中,作為硬體雜湊的一部分。
使用下列命令註冊執行個體後,可以設定相似度臨界值。
在 Linux 機器上:
sudo amazon-ssm-agent -fingerprint -similarityThreshold 1
在使用 Windows Server 的機器上:
cd "C:\Program Files\Amazon\SSM\" ` .\amazon-ssm-agent.exe -fingerprint -similarityThreshold 1
重要
如果用來計算指紋的其中一個元件發生變化,這可能會導致代理程式休眠。若要避免這種休眠狀態,請將相似度閾值設定為較低的值,例如 1
。
GitHub 的 SSM Agent
可在 GitHub