目录
SSM 代理 凭证优先级
关于本地 ssm-user 账户
SSM 代理 和 Instance Metadata Service (IMDS)
保持 SSM 代理 的最新状态
SSM 代理 按AWS区域滚动更新
使用硬件指纹验证本地服务器和虚拟机
AMIs 预SSM 代理安装了 的
SSM 代理 上的 GitHub
AWS Systems Manager 代理(SSM 代理)是一个 Amazon 软件,可以在 EC2 实例、本地服务器或虚拟机 (VM) 上安装和配置。SSM 代理 让 Systems Manager 可以更新、管理和配置这些资源。代理处理来自 AWS 云中的 Systems Manager 服务的请求,然后按照请求中指定的方式运行它们。SSM 代理之后使用 Amazon Message Delivery Service(服务前缀:ec2messages
)将状态和执行信息发送回 Systems Manager 服务。
如果您监控流量,您将看到您的 Amazon Elastic Compute Cloud (Amazon EC2) 实例以及任何本地服务器或 VMs 在混合环境中与 ec2messages.*
终端节点通信。
SSM 代理 在 实例上安装 时,它需要权限才能与 Systems Manager 服务进行通信。在 Amazon Elastic Compute Cloud (Amazon EC2) 实例上,这些权限在附加到实例的实例配置文件中提供。在混合实例上, SSM 代理 通常从位于 (/root/.aws/credentials
Linux) 或 () 的共享凭证文件中获取所需的权限 %USERPROFILE%\.aws\credentials
Windows)。 在混合激活过程中,所需的权限将添加到此文件中。
但是,在极少数情况下,实例可能会向多个 位置添加权限, 在其中SSM 代理检查其任务的运行权限。
例如,您可以将 实例配置为由 管理Systems Manager。对于 EC2 实例,该配置包括附加实例配置文件。对于本地服务器或虚拟机 (VM),这意味着凭证是通过混合激活过程提供的。但是,您随后决定也使用该实例执行开发人员或最终用户任务并在AWS CLI其中安装 。此安装会导致将其他权限添加到实例上的凭证文件中。
在实例上运行Systems Manager命令时, SSM 代理 可能会尝试使用不同于您预期使用的凭证,例如,从凭证文件而不是实例配置文件中使用。这是因为 按照SSM 代理为默认凭证提供程序链规定的顺序查找凭证。
注意
在 Linux 上, 以根用户身份SSM 代理运行。因此, 在此过程中SSM 代理查找的环境变量和凭证文件是仅根用户 () /root/.aws/credentials
的环境变量和凭证文件。在搜索凭证期间, SSM 代理 不会查看实例上任何其他用户账户的环境变量或凭证文件。
默认提供程序链按以下顺序查找凭证:
环境变量(如果已配置)(AWS_ACCESS_KEY_ID
和 AWS_SECRET_ACCESS_KEY
)。
共享凭证文件($HOME/.aws/credentials
for Linux 或 %USERPROFILE%\.aws\credentials
for Windows),具有混合激活或AWS CLI安装提供的权限。
任务的 AWS Identity and Access Management (IAM) 角色(如果存在使用 Amazon Elastic Container Service (Amazon ECS) 任务定义或 RunTask API 操作的应用程序)。
附加到实例Amazon EC2的实例配置文件。
从 的版本 2.3.50.0 开始SSM 代理, 代理创建一个名为 的本地用户账户ssm-user
,并将该账户添加到 /etc/sudoers.d
目录(Linux 和 macOS)或管理员组 (Windows)。在 2.3.612.0 之前的代理版本上,账户会在 SSM 代理 安装后首次启动或重启时创建。在版本 2.3.612.0 及更高版本上,ssm-user
账户将在会话在实例上首次启动时创建。此 ssm-user
是 Session Manager 会话启动时的默认操作系统用户。您可以通过将 ssm-user
移动到权限较低的组或更改 sudoers
文件来更改权限。卸载 ssm-user
时,不会从系统中删除 SSM 代理 账户。
在 Windows Server 上,SSM 代理 处理每个会话启动时对 ssm-user
账户的新密码的设置。Linux 托管实例上没有为 ssm-user
设置密码。
从 SSM 代理 版本 2.3.612.0 开始,ssm-user
账户不会在用作域控制器的 Windows Server 计算机上自动创建。要在 Session Manager 域控制器上使用 Windows Server,您必须手动创建 ssm-user
账户(如果没有)。
重要
为了能够创建 ssm-user 账户,附加到实例的实例配置文件必须提供必要的权限。
Systems Manager 依赖 EC2 实例元数据才能正常运行。 可以使用版本 1 或版本 2 Systems Manager 访问实例元数据。Instance Metadata Service (IMDSv1 和 IMDSv2)。
SSM 代理 的更新版本在有新功能添加到 Systems Manager 或者对现有功能进行了更新时发布。如果较早版本的代理运行在实例上,一些 SSM 代理 过程会失败。因此,我们建议您自动完成确保实例上的 SSM 代理 为最新的过程。
注意
SSM 代理 的更新版本在有新功能添加到 Systems Manager 或者对现有功能进行了更新时发布。如果较早版本的代理运行在实例上,一些 SSM 代理 过程会失败。因此,我们建议您自动完成确保实例上的 SSM 代理 为最新的过程。
Amazon Machine Images AMIs 默认情况下,包含 的 (SSM 代理) 可能需要长达两周的时间更新为最新版本的 SSM 代理。我们建议您将 的自动更新配置为更高的频率。SSM 代理.
SSM 代理 更新在其GitHub存储库中可用后,最多可能需要两周的时间,直到更新后的版本在不同的时间推广到所有AWS区域。为此,当您尝试在区域中部署新版本的 SSM 代理 时,可能会收到以下错误:“Unsupported on current platform (在当前平台上不受支持)”或“updating amazon-ssm-agent to an older version, please enable allow downgrade to proceed (正在将 amazon-ssm-agent 更新到较旧版本,请启用‘允许降级’以继续)”。
要确定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
命令。
在混合环境中运行本地服务器和虚拟机 (VMs) 时, SSM 代理 会收集许多系统属性(称为硬件哈希)并使用这些属性计算指纹。指纹是代理传递给特定 Systems Manager 的不透明字符串APIs。 此唯一指纹将调用方与特定托管实例相关联。代理将指纹和硬件哈希存储在本地磁盘上名为文件库的位置。
当本地服务器或 VM 注册用于 时, 代理会计算硬件哈希和指纹Systems Manager。然后,当代理发送Systems Manager命令时,指纹将传递回 RegisterManagedInstance
服务。
稍后,在发送RequestManagedInstanceRoleToken
命令时,代理会检查文件库中的指纹和硬件哈希,以确保当前计算机属性与存储的硬件哈希匹配。如果当前机器属性与存储在文件库中的硬件哈希匹配,则代理会将指纹从文件库传递到 RegisterManagedInstance
,从而导致成功调用。
如果当前机器属性与存储的硬件哈希不匹配,则 SSM 代理 会计算新的指纹,将新的硬件哈希和指纹存储在文件库中,并将新的指纹传递到 RequestManagedInstanceRoleToken
。 这会导致 RequestManagedInstanceRoleToken
失败,并且 代理将无法获取角色令牌以连接到 Systems Manager 服务。
此故障是设计使然,并且用作验证步骤,以防止多个本地服务器以及与同一托管实例进行通信并作为同一托管实例与 VMs 服务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
。
SSM 代理 默认情况下, 会预安装在以下 Amazon Machine Images () AMIs上:
Amazon Linux
Amazon Linux 2
Amazon Linux 2 经 ECS 优化的 AMIs
macOS 10.14.x (Mojave) 和 10.15.x (Catalina)
Ubuntu Server 16.04、18.04 和 20.04
2016 年 11 月或以后发布的 Windows Server 2008-2012 R2 AMI
Windows Server 2016 和 2019
注意
SSM 代理 未安装在基于 Amazon Linux 或 Amazon Linux 2 的所有 AMIs 上。例如,SSM 代理 未预安装在基于 Amazon Linux 2 的经 EKS 优化的 AMI 上。
您必须在从其他 Linux 创建的 EC2 实例SSM 代理上手动安装 AMIs。您还必须SSM 代理在本地服务器或VMs混合环境中手动安装 。
注意
SSM 代理 可能预安装在支持其他操作系统AMIs的社区上。 AWS 不支持这些社区AMIs。
的源代码SSM 代理在 上可用GitHub,以便您可以调整 代理以满足您的需求。我们建议您为要包含的更改提交拉取请求。但是,Amazon Web Services 目前不支持运行此软件的修改后副本。