SSM Agent 技术参考 - Amazon Systems Manager
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

SSM Agent 技术参考

使用本主题中的信息有助于您实施 Amazon Systems Manager Agent (SSM Agent) 并了解该代理的工作原理。

SSM Agent 凭证优先级

本主题介绍有关如何向 SSM Agent 授予对资源执行操作的权限的重要信息。主题内容主要为在混合环境中运行 Amazon Elastic Compute Cloud (Amazon EC2) 实例以及服务器或虚拟机的 SSM Agent。对于边缘设备,必须将它们配置为使用 Amazon IoT Greengrass Core 软件,配置一个 Amazon Identity and Access Management (IAM) 服务角色,并使用 Amazon IoT Greengrass 将 SSM Agent 部署到设备。有关更多信息,请参阅为边缘设备设置 Amazon 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),这意味着凭证将通过混合激活过程提供。但是,之后您决定还将该实例用于开发人员或终端用户任务,并在上面安装 Amazon Command Line Interface (Amazon 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 和 macOS,为 $HOME/.aws/credentials;对于 Windows Server,为 %USERPROFILE%\.aws\credentials)以及混合激活或 Amazon CLI 安装等提供的权限。

  3. 任务的 Amazon Identity and Access Management (IAM) 角色,如果存在一个应用程序使用 Amazon Elastic Container Service (Amazon ECS) 任务定义或 RunTask API 操作。

  4. 附加到 Amazon EC2 实例的实例配置文件

有关信息,请参阅以下主题:

关于本地 ssm-user 账户

从 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 账户将在会话在实例上首次启动时创建。当会话在 Amazon Systems Manager 的 Session Manager 功能中启动会话时,该 ssm-user 是默认操作系统用户。您可以通过将 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。有关更多信息,请参阅适用于 Linux 的 Amazon EC2 用户指南 中的实例元数据和用户数据

保持 SSM Agent 的最新状态

如果有新功能添加至 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 的自动更新配置为更高的频率。

按 Amazon Web Services 区域 的 SSM Agent 滚动更新

SSM Agent 更新在 GitHub 存储库中可用后,可能需要长达两周时间更新的版本才会在不同的时间推广到所有 Amazon Web Services 区域。为此,当您尝试在区域中部署 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 命令。

在 VM 和本地实例上安装 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

在 Windows Server 实例上使用 PowerShell:

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

如果用于计算指纹的组件之一发生了变化,则这可能会导致代理休眠。为了帮助避免出现这种休眠,请将相似性阈值设置为低值,例如 1

GitHub 上的 SSM Agent

用于 SSM Agent 的源代码在 GitHub 上提供,以根据需求对代理进行调整。我们鼓励您针对要包含的更改提交提取请求。但是,Amazon Web Services 不支持运行此软件的已修改副本。