SSM Agent 技術參考 - AWS Systems Manager

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

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 部署至您的裝置。如需詳細資訊,請參閱 設定適用於邊緣裝置的 AWS 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 不會查看執行個體上的任何其他使用者的環境變數或憑證檔案。

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

  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 執行個體的執行個體設定檔。

  5. 為預設主機管理組態選擇的 IAM 角色。

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

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

保持 SSM Agent up-to-date

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

注意

當新功能新增至 Systems Manager,或對現有功能更新時,會發行 SSM Agent 的更新版本。若未使用最新版本的代理程式,您的受管節點可能會無法使用各種 Systems Manager 的功能及特點。因此,我們建議您讓機器的 SSM Agent 自動保持最新狀態。如需相關資訊,請參閱 自動化 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 滾動更新

在其 GitHub 儲存庫中提供SSM Agent更新之後,最多可能需要兩週的時間將更新版本推出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

如需有關在混合多雲端環境中的非 EC2 機器上安裝 SSM Agent 的相關資訊,請參閱為混合環境 (Linux) 安裝 SSM Agent為混合環境 (Windows) 安裝 SSM Agent

使用硬體指紋驗證啟用混合模式機器

對於混合多雲端環境中的非 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機器上 PowerShell:

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

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

SSM Agent上 GitHub

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