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

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

使用 SSM 代理

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.*有关更多信息,请参阅 参考:ec2messages、ssmmessages 和其他 API 调用. 有关将 SSM 代理日志移植到 Amazon CloudWatch Logs 的信息,请参阅监控 AWS Systems Manager.

保持 SSM 代理 的最新状态

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

注意

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

的更新版本将在不同的时间推广到新的 SSM 代理 区域。AWS为此,当您尝试在区域中部署新版本的 SSM 代理 时,可能会收到以下错误:“Unsupported on current platform (在当前平台上不受支持)”或“updating amazon-ssm-agent to an older version, please enable allow downgrade to proceed (正在将 amazon-ssm-agent 更新到较旧版本,请启用‘允许降级’以继续)”。

SSM 代理 和 Instance Metadata Service (IMDS)

Systems Manager 依赖于 EC2 实例元数据才能正常运行。Systems Manager 可以使用版本 1 或版本 2 访问实例元数据。Instance Metadata Service (IMDSv1 和 IMDSv2)。 有关更多信息,请参阅 https://docs.amazonaws.cn/AWSEC2/latest/UserGuide/ec2-instance-metadata.html 中的实例元数据和用户数据Amazon EC2 用户指南(适用于 Linux 实例)。

SSM 代理 凭证优先级

在实例上安装 SSM 代理 时,它需要权限才能与 Systems Manager 服务进行通信。在 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 代理 不会查看实例上任何其他用户账户的环境变量或凭证文件。

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

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

  2. 共享凭证文件($HOME/.aws/credentials for Linux 或 %USERPROFILE%\.aws\credentials for for Windows) 具有混合激活或 AWS CLI 安装等提供的权限。

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

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

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

关于本地 ssm-user 账户

从 SSM 代理 版本 2.3.50.0 开始,代理创建一个名为 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 账户,附加到实例的实例配置文件必须提供必要的权限。想要了解有关信息,请参阅 验证或创建具有 Session Manager 权限的 IAM 实例配置文件.

AMIs(预安装了 SSM 代理)

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 SSM 代理 创建的 EC2 实例上手动安装 AMIs。您还必须在混合环境中的本地服务器或 VM 上手动安装 SSM 代理 有关更多信息,请参阅 为混合环境设置 AWS Systems Manager.

注意

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

SSM 代理GitHub 上的

可以在 SSM 代理GitHub 上获得 的源代码,以便您可以调整代理以满足您的需求。我们建议您针对要包含的更改提交拉取请求。但是,Amazon Web Services 当前不支持运行此软件的修改后副本。