了解技術詳細資訊 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 Core 軟體、設定 AWS Identity and Access Management (IAM) 服務角色,以及使用部署SSM Agent到裝置 AWS IoT Greengrass。如需詳細資訊,請參閱 使用系統管理員管理邊緣裝置

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. 如果有使用 Amazon 彈性容器服務 AWS Identity and Access Management (Amazon ECS) 任務定義或 RunTask API 作業的應用程式存在,則為任務的 (IAM) 角色。

  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 帳戶。這ssm-user是工作階段啟動時的預設作業系統使用者Session Manager,也就是的功能 AWS Systems Manager。您可以將 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 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 可能會停止正常運作。

SSM Agent滾動更新依據 AWS 區域

在其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 與 AWS 受管 S3 儲存貯體通訊

在執行各種 Systems Manager 操作的過程中, AWS Systems Manager 代理程式 (SSM Agent) 會存取多個 Amazon Simple Storage Service (Amazon S3) 儲存貯體。可公開存取這些 S3 儲存貯體,SSM Agent 預設使用 HTTP 呼叫連線到它們。

不過,如果您在系統管理員作業中使用虛擬私有雲端 (VPC) 端點,則必須在系統管理員的 Amazon Elastic Compute Cloud (Amazon EC2) 執行個體設定檔中提供明確許可,或在混合式和多雲端環境中為非 EC2 機器提供服務角色。否則,您的資源無法存取這些公有儲存貯體。

若要在使用 VPC 端點時對這些節點授予受管執行個體存取權,您可以建立自訂 Amazon S3 許可政策,然後將它連接到您的執行個體描述檔 (適用於 EC2 執行個體) 或服務角色 (適用於非 EC2 受管節點)。

如需在系統管理員作業中使用虛擬私有雲端 (VPC) 端點的相關資訊,請參閱針對 Systems Manager 使用 VPC 端點改善 EC2 執行個體的安全性

注意

這些權限僅提供存取所需的 AWS 受管理值區SSM Agent。這些許可不提供其他 Amazon Simple Storage Service (Amazon S3) 操作所需的許可。這些許可也不提供自有 S3 儲存貯體的許可。

如需詳細資訊,請參閱下列主題:

所需的儲存貯體許可

下表說明 SSM Agent 可能需要存取的每個 S3 儲存貯體,以便進行 Systems Manager 操作。

注意

地區代表 AWS 區域 支援的識別碼 AWS Systems Manager,us-east-2例如美國東部 (俄亥俄) 區域。如需支援的 region 值的清單,請參閱《Amazon Web Services 一般參考》Systems Manager 服務端點一節的區域資料欄。

SSM Agent 需要的 Amazon Simple Storage Service (Amazon S3) 許可

S3 儲存貯體 ARN 描述

arn:aws:s3:::aws-windows-downloads-region/*

某些僅支援 Windows Server 作業系統以及某些提供跨平台支援的 SSM 文件 (例如 AWSEC2-ConfigureSTIG) 所必需。

arn:aws:s3:::amazon-ssm-region/*

更新 SSM Agent 安裝的必要項目。這些儲存貯體包含 SSM Agent 安裝套件及 AWS-UpdateSSMAgent 文件和外掛程式所參考的安裝資訊清單。如果沒有提供這些許可,則 SSM Agent 會進行 HTTP 呼叫以下載更新。

arn:aws:s3:::amazon-ssm-packages-region/*

使用 2.2.45.0 之前版本的 SSM Agent 來執行 SSM 文件 AWS-ConfigureAWSPackage 的必要項目。

arn:aws:s3:::region-birdwatcher-prod/*

提供 2.2.45.0 版本和更高版本的 SSM Agent 所使用分發服務的存取權。此服務是用來執行文件 AWS-ConfigureAWSPackage

AWS 區域 非洲(開普敦)地區(AF-南-1)和歐洲(米蘭)地區(歐南 -1)以外的所有人都需要此許可。

arn:aws:s3:::aws-ssm-distributor-file-region/*

提供 2.2.45.0 版本和更高版本的 SSM Agent 所使用分發服務的存取權。此服務用於執行 SSM 文件 AWS-ConfigureAWSPackage

非洲 (開普敦) 區域 (af-south-1) 和歐洲 (米蘭) 區域 (eu-south-1) 需要此許可。

arn:aws:s3:::aws-ssm-document-attachments-region/*

提供對 S3 儲存貯體的存取Distributor,該儲存貯體包含所擁有的 AWS Systems Manager套件 (功能) AWS。

arn:aws:s3:::patch-baseline-snapshot-region/*

允許存取包含修補基準快照的 S3 儲存貯體。如果您使用下列任一 SSM 文件,則這是必需的:

  • AWS-RunPatchBaseline

  • AWS-RunPatchBaselineAssociation

  • AWS-RunPatchBaselineWithHooks

  • AWS-ApplyPatchBaseline (舊有 SSM 文件)

注意

只有在中東 (巴林) 區域 (me-south-1) 中,此 S3 儲存貯體會使用不同的命名慣例。對於此 AWS 區域 ,請改用下列儲存貯體。

  • patch-baseline-snapshot-me-south-1-uduvl7q8

只有在非洲 (開普敦) 區域 (af-south-1) 中,此 S3 儲存貯體會使用不同的命名慣例。對於此 AWS 區域 ,請改用下列儲存貯體。

  • patch-baseline-snapshot-af-south-1-tbxdb5b9

對於 Linux 和 Windows Server 受管節點:arn:aws:s3:::aws-ssm-region/*

對於 macOS 的 Amazon EC2 執行個體:arn:aws:s3:::aws-patchmanager-macos-region/*

支援存取 S3 儲存貯體,其中包含與某些 Systems Manager 文件 (SSM 文件) 搭配使用所需的模組。例如:

  • arn:aws:s3:::aws-ssm-us-east-2/*

  • aws-patchmanager-macos-us-east-2/*

例外狀況

少數 S3 儲存貯體名稱 AWS 區域 使用延伸命名慣例,如其 ARN 所示。對於這些區域,請改用下列 ARN:

  • 中東 (巴林) 區域 (me-south-1):aws-patch-manager-me-south-1-a53fc9dce

  • 非洲 (開普敦) 區域 (af-south-1):aws-patch-manager-af-south-1-bdd5f65a9

  • 歐洲 (米蘭) 區域 (eu-south-1):aws-patch-manager-eu-south-1-c52f3f594

  • 亞太區域 (大阪) (ap-northeast-3):aws-patch-manager-ap-northeast-3-67373598a

SSM 文件

以下是存放在這些儲存貯體中的一些常用 SSM 文件。

arn:aws:s3:::aws-ssm-region/ 中:

  • AWS-RunPatchBaseline

  • AWS-RunPatchBaselineAssociation

  • AWS-RunPatchBaselineWithHooks

  • AWS-InstanceRebootWithHooks

  • AWS-ConfigureWindowsUpdate

  • AWS-FindWindowsUpdates

  • AWS-PatchAsgInstance

  • AWS-PatchInstanceWithRollback

  • AWS-UpdateSSMAgent

  • AWS-UpdateEC2Config

arn:aws:s3:::aws-patchmanager-macos-region/ 中:

  • AWS-RunPatchBaseline

  • AWS-RunPatchBaselineAssociation

  • AWS-RunPatchBaselineWithHooks

  • AWS-InstanceRebootWithHooks

  • AWS-PatchAsgInstance

  • AWS-PatchInstanceWithRollback

範例

以下範例說明如何在美國東部 (俄亥俄) 區域 (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:::patch-baseline-snapshot-us-east-2/*", "arn:aws:s3:::aws-ssm-us-east-2/*", "arn:aws:s3:::aws-patchmanager-macos-us-east-2/*" ] } ] }

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

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

GitHub 的 SSM Agent

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