亚马逊AWS官方博客

如何使用 AWS Systems Manager 集中管理 AWS IoT Greengrass 设备

对于边缘设备管理员来说,远程管理大量不同的系统和应用程序会是一项富有挑战性的任务。AWS IoT Greengrass 可帮助这些系统管理员管理其边缘设备应用程序堆栈。不过,这些设备上的系统软件必须通过与其大型 IT 企业的运营策略一致的运营策略来单独更新和维护。此外,客户必须构建或集成自定义工具,以确保边缘设备可以与 Amazon Elastic Compute Cloud(Amazon EC2)和本地实例一起通过一组一致的策略来管理。

我们在 re:Invent 2021 上发布了 AWS Systems Manager 与 AWS IOT Greengrass 之间的集成。此版本简化了对边缘设备的系统软件的管理和维护。与 AWS IoT Greengrass 客户端软件结合使用时,AWS Systems Manager 可让边缘设备管理员远程访问和安全地管理他们拥有的许多设备 – 从操作系统修补到部署应用程序。管理员几乎可以利用 Systems Manager 服务的所有操作和节点管理功能

本博文介绍如何设置以将 AWS IoT Greengrass 设备与 Systems Manager 集成。其中,我们将演示如何使用会话管理器打开边缘设备的远程登录、使用 Patch Manager 修补它们以及通过 Run Command 运行自动化脚本。

安装 AWS IoT Greengrass Core 软件

首先,我们必须在边缘设备上安装 Greengrass Core 软件。提供了多种选项来安装 AWS IoT 软件,包括:

  • 自动预置
  • 手动预置
  • 实例集预置
  • 自定义预置

参阅 AWS IoT Greengrass 文档,了解这些预置方法之间的差异。

在本博文中,我们使用自动预置方法在边缘设备上安装 Greengrass Core 软件。在此方法中,安装程序将预置所需的外围设备,例如,注册 AWS IoT 事物并创建 AWS IoT 事物组、AWS Identity and Access Management(IAM)角色以及 AWS IoT 角色别名。这样便能更快地完成设置。自动预置适用于 Linux 和 Windows 设备。在以下步骤中,我们使用的是 Ubuntu Linux 设备。可在 AWS IoT Greengrass 文档中找到有关运行 AWS IoT Greengrass Core 软件的设备要求。

成功安装 Greengrass Core 软件后,您应在 AWS IoT Greengrass 控制台中看到状态为 Healthy(正常)的 Core 设备。如果安装失败或设备未处于 Healthy(正常)状态,请参阅故障排除指南

图 1:处于 Healthy(正常)状态的边缘设备在 AWS IoT Greengrass 控制台的 Greengrass Core 设备下可见。

图 1:处于 Healthy(正常)状态的边缘设备在 AWS IoT Greengrass 控制台的 Greengrass Core 设备下可见。

部署 Systems Manager 代理

现在,边缘设备正在与 AWS IoT Greengrass 进行通信,我们可以将软件组件部署到该设备。您还可以使用 AWS IoT Greengrass 将组件部署到一组设备。部署将定义要应用于设备的现有软件的组件及其配置,并且部署是连续的。在创建部署时,AWS IoT Greengrass 会将部署推出到联机目标设备。如果目标设备未联机,它将在下次连接到 AWS IoT Greengrass 时接收部署。

Systems Manager 代理(SSM 代理)将通过 Greengrass 作为组件部署,从而使 Systems Manager 服务能够更新、管理和配置 Greengrass Core 设备。该代理在 AWS Cloud 中处理和运行来自 Systems Manager 服务的请求。之后,该代理将状态和运行时信息发送回 Systems Manager 服务。

按照安装 Systems Manager 代理文档中的步骤操作,完成 Systems Manager 设置步骤并部署 Systems Manager 代理组件。此过程包含四个阶段,总结如下:

  1. 完成一般 Systems Manager 设置步骤。
  2. 为 Systems Manager 创建 IAM 服务角色。
  3. 向令牌交换角色添加权限。
  4. 部署 Systems Manager 代理组件。

部署过程可能需要几分钟才能完成。

部署 Systems Manager 组件后,导航到 AWS IoT Greengrass 控制台,选择 Core 设备,然后选择您的设备。在 Core 设备的详细信息页面上,找到链接到 SSM 控制台的 Systems Manager 实例属性。

图 2:边缘设备现在是托管式节点,它显示在 Systems Manager 控制台中的实例集管理器下方。

图 2:边缘设备现在是托管式节点,它显示在 Systems Manager 控制台中的实例集管理器下方。

通过 Greengrass 注册到 Systems Manager 的边缘设备将具有以“mi-”开头的节点 ID。要使用 Systems Manager 及其功能管理设备,给定节点的 SSM Agent ping status(SSM 代理 ping 状态)必须为 Online(联机)。您可以通过选择 Node ID(节点 ID)来验证节点的“SSM Agent ping status”(SSM 代理 ping 状态)。

图 3:显示托管式节点详细信息的 Node overview(节点概览)页面。

图 3:显示托管式节点详细信息的 Node overview(节点概览)页面。

Systems Manager 将边缘设备视为托管式节点。现在,您可以访问托管式节点、执行修补和收集监视数据,并执行其他任务。

  1. 在边缘设备上打开终端

在 Node overview(节点概览)页面上选择 Node actions(节点操作)下拉菜单,然后选择 Start terminal session(启动终端会话)。此操作将通过 Systems Manager 会话管理器在边缘设备上启动终端会话。

注意:会话管理器需要通过高级实例套餐以交互方式访问边缘设备,因为它们已作为混合实例注册到 Systems Manager。此外,它还有其他定价,可以在 Systems Manager 定价中进行查看。按照 Systems Manager 文档中的步骤操作,从控制台启用高级实例套餐。

图 4:浏览器中为托管式节点打开的交互式会话窗口

图 4:浏览器中为托管式节点打开的交互式会话窗口。

会话在客户端(您)和远程托管式节点之间使用安全的双向通信通道,从而流式传输命令的输入和输出。客户端和托管式节点之间的流量使用 TLS 1.2 进行加密,连接创建请求使用 Sigv4 进行签名。这种双向通信允许交互式 bash 和 PowerShell 访问托管式节点。

此外,使用 AWS Key Management Service(AWS KMS)在默认 TLS 加密的基础上对数据进行深度加密。此外,通过与众多 AWS 服务(例如 Amazon Simple Storage Service(Amazon S3)AWS CloudTrail 和 Amazon CloudWatch Logs)集成,我们为在 AWS 账户中记录和审核会话历史记录提供了多种选择。一种选择是,在会话中配置首选项,这些首选项是可自定义的,允许在会话启动时定义 shell 首选项、环境变量、工作目录、运行的多个命令等。

  1. 修补边缘设备

Patch Manager 是 Systems Manager 的一项功能,它为每个受支持的操作系统提供预定义的补丁基准,这些基准通常批准与安全性相关的补丁。使用当前配置的这些基准(我们无法对它们进行自定义)或创建自定义补丁基准。利用自定义补丁基准,可以更好地控制为环境批准或拒绝的补丁。在本博文中,我们将使用预定义的补丁基准。有关更多信息,请参阅预定义和自定义补丁基准文档

要修补边缘设备,请执行以下操作:

  1. 打开托管式节点的 Node overview(节点概览)页面。
  2. 从 Node actions(节点操作)下拉菜单中,选择 Patch node(补丁节点)。我们将看到用于修补边缘设备的 AWS Systems Manager Patch Manager 页面。通读页面上提供的选项,该页面显示了修补的基本配置。默认情况下,修补操作为 Scan(扫描),它仅扫描缺失的补丁,而不会安装它们。
  3. 保留所有默认设置,滚动到页面的底部,然后选择 Patch now(立即修补)。

图 5:已选中默认选项的 Patch now(立即修补)窗口。

图 5:已选中默认选项的 Patch now(立即修补)窗口。

  1. 在下一页中,我们将看到修补执行摘要。选择 Execution ID(执行 ID)超链接,后跟页面上的 Output(输出),之后,查看扫描操作的详细信息和结果。

输出页面包含三个步骤。在步骤名称中选择与边缘设备上运行的操作系统对应的步骤。例如,如果它运行的是 Linux,请展开步骤 PatchLinux 的输出和错误。请注意,边缘设备必须能够访问其各自的存储库才能提取补丁。

图 6:Association Execution Summary(关联执行摘要)窗口,其中显示扫描模式下的修补操作的详细信息。

图 6:Association Execution Summary(关联执行摘要)窗口,其中显示扫描模式下的修补操作的详细信息。

图 7:扫描操作的输出显示了托管式节点的可用补丁的摘要。

图 7:扫描操作的输出显示了托管式节点的可用补丁的摘要。

有关更多信息,请访问 Patch Manager 工作原理文档

由于这些边缘设备具有间歇性连接且技术规格有限,因此,完成安装的时间可能会有所不同。Patch Manager 使用 Run Command(我们将在下一节中介绍的 Systems Manager 的另一项功能)在托管式节点上执行修补操作。

  1. 远程将命令发送到边缘设备

使用 Run Command(Systems Manager 的一项功能)大规模配置托管式节点,而无需登录它们。我们通过本博文中的 Run Command 收集边缘设备上运行的进程。返回 Node overview(节点概览)页面,从 Node actions(节点操作)下拉菜单中选择 Execute run command(执行运行命令)。利用此方法,用户可以进入 Systems Manager Run Command 页面。您会看到可用的预配置命令文档的列表。搜索 AWS-RunShellScript,并选择该文档。我们的边缘设备在 Ubuntu 上运行,因此,我们将发送 ps aux 命令来运行进程。在 Command parameters(命令参数)下的 Commands(命令)文本框中,键入 ps aux。

图 8:Run a Command(运行命令)窗口,其中选定了 AWS-RunShellScript 文档并提供了 Shell 命令。

图 8:Run a Command(运行命令)窗口,其中选定了 AWS-RunShellScript 文档并提供了 Shell 命令。

向下滚动到目标。我们应看到我们的节点已选中。在 Output options(输出选项)下,取消选中 Enable an S3 bucket(启用 S3 存储桶)。对于生产用途,建议将所有命令输出写入 Amazon S3 存储桶以进行审计。在本博文中,我们只进行测试以查看 Run(运行)命令是否成功。我们还建议在生产使用中“启用 Cloudwatch Logs”以进行其他审计。

选择 Run(运行)。这会将您转至一个显示 Run(运行)命令结果的页面。选择 Instance ID(实例 ID)旁边的单选按钮,然后选择 View output(查看输出)以查看该命令在目标 IoT 设备上的输出。此操作会将我们转至其他页面。选定输出将向我们显示发送到边缘设备的“ps aux”命令的结果。

图 9:通过 Run Command 运行的 shell 命令的输出。

图 9:通过 Run Command 运行的 shell 命令的输出。

在托管式节点上收集正在运行的进程的另一种方法是使用 Systems Manager 实例集管理器。在 re:Invent 2021 上发布了一项新功能,该功能为客户提供了基于控制台的轻松体验,以查看和管理其实例上的进程。客户可以查看深入的详细信息,例如每个活动进程的进程名称、进程详细信息和利用率指标。他们可以按名称查询进程,并根据任何进程参数快速对列进行排序。此外,您可以在控制台中终止不需要的进程或启动新进程。

实例集管理器利用会话管理器功能来管理托管式节点上的进程。此外,它要求在会话管理器首选项中启用 AWS KMS 加密。有关更新会话首选项的步骤,请访问该文档。记下我们在上一步中选择的 AWS KMS 密钥,然后在 AWS KMS 控制台中打开此密钥。

在本博文的前面部分中,您已创建并部署本应创建 IAM 服务角色的 SSM 代理组件。假设已遵循 AWS IoT Greengrass 文档来部署 SSM 代理。在这种情况下,IAM 服务角色的名称应为 SSMServiceRole。您需要按照 AWS KMS 文档中的步骤操作来更新加密密钥,以将 SSMServiceRole 添加为密钥用户之一。

如上面的第 2 节所述,在 Systems Manager 控制台中打开我们的托管式节点以了解其工作原理。在左侧列的 Node overview(节点概览)下,选择 Processes(进程)。

图 10:节点详细信息页面,其中显示托管式节点的进程和资源使用信息。

图 10:节点详细信息页面,其中显示托管式节点的进程和资源使用信息。

由于 IoT Greengrass Core 软件和 Systems Manager 代理可以控制数千台远程设备,因此遵循 AWS Well-Architected 的最低权限安全最佳实践是至关重要的。最低权限是仅授予完成任务所需的权限的原则。使用自动预置设置的 AWS 托管式策略是查看通常与特定的服务或工作职能关联的操作的良好起点。不过,它们可能不符合公司的合规性标准或特定的使用案例。

有关编写最低权限 IAM 策略的帮助,请参阅本博文

清理

如果您不再想使用 Systems Manager 管理您的边缘设备,请注销该设备并从中卸载 Systems Manager 代理。按照卸载 Systems Manager 代理文档中的步骤操作。同样,您可以卸载 Greengrass Core 软件以将其从边缘设备中删除。在卸载 AWS IoT Greengrass Core 软件文档中查找有关停止、禁用和删除 Greengrass 服务的说明。

结论

本博文演示了如何在边缘设备上安装 Systems Manager 代理作为 AWS IoT Greengrass 组件,以及如何利用各种 Systems Manager 功能集中管理边缘设备以及 Amazon EC2 和本地节点。首先,我们说明了如何在边缘设备上安装 AWS IoT Greengrass Core 软件,以及如何部署 SSM 代理组件,然后演练了三个设备管理使用案例。

这些使用案例包括:

  • 获得对边缘设备的交互式 Shell 访问权限,同时改善安全和审计状况、集中访问控制和限制入站访问。使用 AWS 管理控制台、AWS 命令行界面(AWS CLI)或某个受支持的 AWS 开发工具包来启动会话。有关更多信息,请参阅控制台、CLI 和开发工具包对会话管理器功能的访问
  • 通过精细控制能力,对可安装补丁的边缘设备的操作系统进行修补。可使用明确定义的维护时段跨设备实例集进行自动修补,在此期间,发生中断操作是可以接受的。有关更多信息,请访问使用维护时段修补计划
  • 以可控方式在边缘设备上执行远程脚本,从而实现大规模安全管理。使用 Run Command 安装或引导应用程序、跟踪清单、应用软件更新或修改系统设置。此外,可以使用托管式节点上的标记在单个 Run Command 中定位数千台边缘设备。有关 Run Command 的更多信息,请参阅 AWS Systems Manager Run Command 文档

作者:

Pal Patel

Pal Patel 是一名云基础设施架构师,在与 AWS 客户合作并为他们提供支持方面拥有 5 年以上的经验。她是 SSM 爱好者,对 SSM 自动化充满热情。工作之余,她乐于学习素描人脸,爱好阅读(她目前最喜欢的是《The Codebreaker》),也是 KPOP 音乐(A.R.M.Y)的狂热听众。

Bryan Henderson

Bryan Henderson 是伊利诺斯州芝加哥的 AWS 高级解决方案架构师。他热衷于帮助客户在 AWS 上构建解决方案来解决他们的问题。工作之余,他喜欢跑步、去瑞格利球场运动,以及与妻子和两个女儿共度时光。