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

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

SSM 代理技术参考

使用本主题中的信息可帮助您实施 AWS Systems Manager 代理(SSM 代理)并了解代理的工作原理。

SSM 代理凭证优先级

当 SSM 代理安装在实例上时,它需要权限才能与 Systems Manager 服务进行通信。在 Amazon Elastic Compute Cloud (Amazon EC2) 实例上,这些权限在附加到实例上的实例配置文件中提供。在混合实例上,SSM 代理通常从位于/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 代理按照默认的凭证提供程序链

注意

在 Linux 和 macOS,SSM 代理以根用户身份运行。因此,SSM 代理在此过程中查找的环境变量和凭据文件是仅根用户的那些文件 (/root/.aws/credentials)。在搜索凭据期间,SSM Agent 不会查看实例上任何其他用户帐户的环境变量或凭据文件。

默认提供程序链将按以下顺序查找凭证:

  1. 如果已配置环境变量(AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEY)。

  2. 共享凭证文件 ($HOME/.aws/credentials对于 Linux 和 macOS 或者%USERPROFILE%\.aws\credentials对于 来说为 Windows Server),具有由混合激活或 AWS CLI 安装提供的权限。

  3. AWS Identity and Access Management (IAM) 角色,如果存在使用 Amazon Elastic Container Service (Amazon ECS) 任务定义或RunTaskAPI 操作。

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

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

关于本地 ssm-user 账户

从 SSM 代理版本 2.3.50.0 开始,此代理会创建一个名为ssm-user并将其添加到/etc/sudoers.d目录(Linux 和 macOS)或管理员组(Windows Server)。 在 2.3.612.0 之前的代理版本上,SSM 代理在安装后首次启动或重启时创建帐户。在版本 2.3.612.0 及更高版本上,ssm-user 账户将在会话在实例上首次启动时创建。该ssm-user是会话在会话管理器(AWS Systems Manager 的功能)中启动时的默认操作系统用户。您可以通过将 ssm-user 移动到权限较低的组或更改 sudoers 文件来更改权限。这些区域有:ssm-user卸载 SSM 代理时,不会从系统中删除账户。

On Windows Server,SSM 代理将处理为ssm-user帐户,当每个会话启动时。Linux 托管实例上没有为 ssm-user 设置密码。

从 SSM 代理 2.3.612.0 版开始,ssm-user帐户不会自动创建 Windows Server 用作域控制器的计算机。若要在 Windows Server 域控制器,则必须创建ssm-user帐户(如果尚未显示)。

重要

为了能够创建 ssm-user 账户,附加到实例的实例配置文件必须提供必要的权限。想要了解有关信息,请参阅验证或创建具有会话管理器权限的 IAM 实例配置文件

SSM 代理和 Instance Metadata Service (IMDS)

Systems Manager 依赖 EC2 实例元数据来正常运行。Systems Manager 可以使用版本 1 或版本 2 的 Instance Metadata Service (IMDSv1 和 IMDSv2)。 有关更多信息,请参阅 。实例元数据和用户数据中的适用于 Linux 实例的 Amazon EC2 用户指南

保持 SSM 代理为最新

每次在有新功能添加到 Systems Manager 或更新现有功能时,将发布新 SSM 代理的更新版本。如果较早版本的代理在实例上运行,有些 SSM 代理过程会失败。因此,我们建议您自动完成确保实例上的 SSM 代理为最新的过程。有关信息,请参阅 自动更新 SSM 代理。订阅SSM 代理发布说明页面以获取有关 SSM 代理更新的通知。

注意

每次在有新功能添加到 Systems Manager 或更新现有功能时,将发布新 SSM 代理的更新版本。如果较早版本的代理在实例上运行,有些 SSM 代理过程会失败。因此,我们建议您自动完成确保实例上的 SSM 代理为最新的过程。有关信息,请参阅 自动更新 SSM 代理。订阅SSM 代理发布说明页面以获取有关 SSM 代理更新的通知。

Amazon Machine Images (AMIs),默认情况下,包括 SSM 代理可能需要长达两周时间更新为最新版本的 SSM 代理。我们建议您配置更高频率的 SSM 代理的自动更新。

按 AWS 区域划分的 SSM 代理滚动更新

在其 GitHub 存储库中提供 SSM 代理更新后,最多需要两周时间才能在不同的时间向所有 AWS 区域推出更新版本。出于这个原因,您可能会收到 “当前平台上不支持” 或 “将 Amazonon-ssm-代理更新到早期版本的,请启用允许降级继续” 错误。

要确定当前可用的 SSM 代理的版本,您可以运行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 代理会收集多个系统属性(称为硬件哈希),并使用这些属性计算指纹。指纹是代理传递给某些 Systems Manager API 的不透明字符串。这种唯一的指纹将调用者与特定托管实例相关联。代理将指纹和硬件哈希存储在本地磁盘上的一个名为文件库

当注册内部部署服务器或 VM 以便与 Systems Manager 一起使用时,代理会计算硬件哈希和指纹。然后,指纹传递回 Systems Manager 服务时,代理发送RegisterManagedInstance命令。

稍后,当发送RequestManagedInstanceRoleToken命令时,代理会检查 Vault 中的指纹和硬件哈希,以确保当前计算机属性与存储的硬件哈希匹配。如果当前计算机属性确实与存储在保险箱中的硬件哈希匹配,则代理将指纹从保险箱传递到RegisterManagedInstance,导致调用成功。

如果当前计算机属性与存储的硬件哈希不匹配,SSM Agent 将计算新的指纹,将新的硬件哈希和指纹存储在保险箱中,并将新指纹传递给RequestManagedInstanceRoleToken这会导致RequestManagedInstanceRoleToken失败,并且代理将无法获取连接到 Systems Manager 服务的角色令牌。

此故障由设计出现,并用作验证步骤,以防止多个本地服务器和虚拟机作为同一托管实例与 Systems Manager 服务进行通信。

将当前计算机属性与存储在 Vault 中的硬件哈希进行比较时,代理使用以下逻辑来确定旧哈希和新哈希是否匹配:

  • 如果 SID(系统/计算机 ID)不同,则不匹配。

  • 否则,如果 IP 地址相同,则匹配。

  • 否则,将计算匹配的计算机属性的百分比,并与用户配置的相似性阈值进行比较,以确定是否存在匹配。

相似性阈值作为硬件哈希的一部分存储在保险箱中。

可以在实例注册之后使用如下命令设置相似性阈值:

在 Linux 实例上:

sudo amazon-ssm-agent -fingerprint -similarityThreshold 1

On Windows Server 使用 Powershell 实例:

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

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

AMIs 使用 SSM 代理预安装

默认情况下,SSM 代理预先安装在以下 Amazon Machine Images (AMIs):

  • Amazon Linux

  • Amazon Linux 2

  • Amazon Linux 2 ECE 优化 AMIs

  • macOS 10.14.x (莫哈韦) 和 10.15.x (卡塔利娜)

  • Ubuntu 服务器 16.04、18.04 和 20.04

  • Windows Server 二零一六年十一月或之后发布的 2008-2012 R2 AMI

  • Windows Server 2016 和 2019

注意

SSM 代理未安装在所有 AMIs 基于 Amazon Linux 2。例如,在基于亚马逊 Linux 2 的 EKS 优化 AMI 上未预安装 SSM 代理。

您必须在从其他 Linux 创建的 EC2 实例上手动安装 SSM 代理 AMIs。 您还必须在混合环境中的本地服务器或 VM 上手动安装 SSM 代理。有关更多信息,请参阅 为混合环境设置 AWS Systems Manager

注意

SSM 代理可能已预安装在社区 AMIs ,支持其他操作系统。AWS 不支持这些社区 AMIs.

GitHub 上的 SSM 代理

SSM 代理的源代码可在GitHub,以便您可以对代理进行调整来满足自己的需求。我们鼓励您针对要包含的更改提交提取请求。然而,Amazon Web Services 当前不支持运行此软件的修改后副本。