SSM Agent 技術參考 - AWS Systems Manager

SSM Agent 技術參考

使用本主題中的資訊可協助您實作 AWS Systems Manager Agent (SSM Agent) 並了解代理程式的運作方式。

SSM Agent 憑證優先順序

本主題描述了 SSM Agent 如何授予在您資源上執行動作之許可的重要資訊。內容主要集中於在混合式環境中執行 Amazon Elastic Compute Cloud (Amazon EC2) 執行個體和伺服器或 VM 的 SSM Agent。對於邊緣裝置,您必須將裝置設定為使用 AWS IoT Greengrass 核心軟體,設定 AWS Identity and Access Management (IAM) 服務角色,並透過使用 AWS IoT Greengrass 將 SSM Agent 部署至您的裝置。如需詳細資訊,請參閱 設定適用於邊緣裝置的 AWS Systems Manager

SSM Agent 安裝在執行個體上時,它需要許可才能與 Systems Manager 服務進行通訊。在 Amazon Elastic Compute Cloud (Amazon EC2) 執行個體上,會在連接到執行個體的執行個體設定檔中提供這些許可。在混合執行個體上,SSM Agent 通常會從共用憑證檔案中取得所需的許可,該檔案位於 /root/.aws/credentials (Linux 和 macOS) 或 %USERPROFILE%\.aws\credentials (Windows Server)。在混合啟用程序中,會將所需的許可新增至此檔案。

然而,在極少數情況下,執行個體最終可能會將許可新增至多個位置,SSM Agent 在這些位置會檢查許可以執行其任務。

例如,您可以將執行個體設定為由 Systems Manager 管理。對於 EC2 執行個體,該組態包括連接執行個體設定檔。對於內部部署伺服器或虛擬機器 (VM),這表示透過混合啟用程序提供憑證。然後您決定也將該執行個體用於開發人員或最終使用者任務,並安裝 AWS Command Line Interface (AWS CLI)。此安裝會導致其他許可新增至執行個體上的憑證檔案。

當您在執行個體上執行 Systems Manager 命令時,SSM Agent 可能會嘗試使用與您預期使用的憑證不同的憑證,例如憑證檔案而非執行個體設定檔。這是因為 SSM Agent 會依照指定的順序尋找預設憑證供應者鏈結的憑證。

注意

在 Linux 和 macOS 中,SSM Agent 以根使用者身分執行。因此,SSM Agent 在此程序中查找的環境變數和憑證檔案只是根使用者的那些資訊 (/root/.aws/credentials)。SSM Agent 在搜尋憑證期間,不會查看執行個體上的任何其他使用者帳戶的環境變數或憑證檔案。

預設供應者鏈結會依以下順序查找憑證:

  1. 環境變數 (如果已設定) (AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEY)。

  2. 共用的憑證檔案 (Linux 的 $HOME/.aws/credentials 以及 Windows Server 的 macOS 或 %USERPROFILE%\.aws\credentials),例如具有混合啟用或 AWS CLI 安裝提供的許可。

  3. 任務的 AWS Identity and Access Management (IAM) 角色 (如果存在應用程式),它使用 Amazon Elastic Container Service (Amazon ECS) 任務定義或 RunTask API 操作。

  4. 連接至 Amazon EC2 執行個體的執行個體設定檔。

如需相關資訊,請參閱下列主題:

關於本機 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 帳戶,連接到執行個體的執行個體設定檔必須提供必要的許可。如需相關資訊,請參閱使用 Session Manager 許可驗證或建立 IAM 角色

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 Linux 執行個體使用者指南》中的執行個體中繼資料和使用者資料

讓 SSM Agent 保持最新狀態

當新功能新增至 Systems Manager,或對現有功能更新時,會推出 SSM Agent 的更新版本。若未使用最新版本的代理程式,您的受管理節點可能會無法使用各種 Systems Manager 的功能及特點。因此,我們建議您讓機器的 SSM Agent 自動保持最新狀態。如需相關資訊,請參閱 自動化 SSM Agent 更新。請訂閱 GitHub 上的 SSM Agent 版本備註頁面,以收到 SSM Agent 更新的通知。

注意

當新功能新增至 Systems Manager,或對現有功能更新時,會推出 SSM Agent 的更新版本。若未使用最新版本的代理程式,您的受管理節點可能會無法使用各種 Systems Manager 的功能及特點。因此,我們建議您讓機器的 SSM Agent 自動保持最新狀態。如需相關資訊,請參閱 自動化 SSM Agent 更新。請訂閱 GitHub 上的 SSM Agent 版本備註頁面,以收到 SSM Agent 更新的通知。

根據預設,包含 SSM Agent 的 Amazon Machine Images (AMIs) 可能最長需要兩週,才能使用 SSM Agent 的最新版本進行更新。我們建議您設定更頻繁地自動更新 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

如需有關在混合式環境中的內部部署伺服器、邊緣裝置和虛擬機器 (VM) 上安裝 SSM Agent 的相關資訊,請參閱為混合式環境 (Linux) 安裝 SSM Agent為混合式環境 (Windows) 安裝 SSM Agent

使用硬體指紋驗證內部部署伺服器、邊緣裝置和虛擬機器

在混合環境中執行內部部署伺服器、邊緣裝置和虛擬機器 (VM) 時,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

在使用 PowerShell 的 Windows Server 執行個體上:

cd "C:\Program Files\Amazon\SSM\" ` .\amazon-ssm-agent.exe -fingerprint -similarityThreshold 1
重要

如果用來計算指紋的其中一個元件發生變化,這可能會導致代理程式休眠。若要避免這種休眠狀態,請將相似度閾值設定為較低的值,例如 1

GitHub 上的 SSM Agent

可在 GitHub 上使用 SSM Agent 的原始碼,以便您可以調整代理程式以符合您的需求。我們建議您為想要進行的變更提交提取請求。但是,Amazon Web Services 不支援執行修改過的軟體複本。