如何对处于连接中断状态的 Systems Manager 托管实例进行故障排除?

上次更新时间:2021 年 3 月 19 日

我的 Amazon Elastic Compute Cloud (Amazon EC2) 托管实例在 AWS Systems Manager 控制台的托管实例下处于连接中断状态。

简短描述

托管实例是一种 Amazon EC2 实例,配置为与 Systems Manager 一起使用。托管实例可以使用 Systems Manager 服务,例如 Run Command、Patch Manager 和 Session Manager。

要在在线状态下成为托管实例,实例必须满足以下先决条件:

  • 已安装并运行 AWS Systems Manager 代理(SSM 代理)。
  • 已使用 SSM 代理与 Systems Manager 终端节点建立连接。
  • 已附加正确的 AWS Identity and Access Management (IAM) 角色。
  • 已与实例元数据服务建立连接。

注意:对于混合实例,请参阅为混合环境设置 AWS Systems Manager

解决方法

注意:在开始实施此解决方法之前,请务必选择实例所在的区域。

要对处于连接中断状态的托管实例进行故障排除,请验证在实例上是否满足以下先决条件:

已在实例上安装并运行 SSM 代理

要检查 SSM 代理的状态,请使用以下命令:

Amazon Linux、RHEL 6(或类似发行版):

$ sudo status amazon-ssm-agent

Amazon Linux 2、Ubuntu、RHEL 7(或类似发行版):

$ sudo systemctl status amazon-ssm-agent

使用 snap 的 Ubuntu 18.04 或更高版本的系统:

$ sudo snap services amazon-ssm-agent

Windows:

$ Get-Service AmazonSSMAgent

在端口 443 上验证与 Systems Manager 终端节点的连接

验证连接的最佳方法取决于您的操作系统。

重要提示:在以下命令示例中,用您的 AWS 区域 ID 替换 RegionID

有关按区域划分的 Systems Manager 终端节点的列表,请参阅 AWS Systems Manager 终端节点和配额

注意:在以下示例中,只有 AWS Systems Manager 会话管理器需要 ssmmessages 终端节点。

对于 EC2 Linux 实例:您可以使用 telnetnetcat 命令验证在端口 443 上与终端节点的连接。

Telnet

telnet ssm.RegionID.amazonaws.com 443
telnet ec2messages.RegionID.amazonaws.com 443
telnet ssmmessages.RegionID.amazonaws.com 443

Netcat

nc -vz ssm.RegionID.amazonaws.com 443
nc -vz ec2messages.RegionID.amazonaws.com 443
nc -vz ssmmessages.RegionID.amazonaws.com 443

注意:Amazon EC2 实例上没有预装 Netcat。要手动安装 Netcat,请参阅 Nmap 网站上的 Ncat

对于 EC2 Windows 实例:您可以使用以下 Windows PowerShell 命令验证端口 443 上与终端节点的连接:

Test-NetConnection ssm.RegionID.amazonaws.com -port 443
Test-NetConnection ec2messages.RegionID.amazonaws.com -port 443
Test-NetConnection ssmmessages.RegionID.amazonaws.com -port 443

对于公共子网:Systems Manager 终端节点是公共终端节点。这意味着您的实例必须能够使用互联网网关访问互联网。对于从公共子网中的实例连接到终端节点的问题,请确认以下事项:

对于私有子网:对于私有子网,您的实例必须能够使用 NAT 网关访问互联网。或者,您可以配置 VPC 终端节点,以在私有子网中连接到实例的 Systems Manager 终端节点。这样,您可以使用私有 IP 地址来私密访问 Amazon EC2 和 Systems Manager API。有关更多信息,请参阅如何创建 VPC 终端节点,以便使用 Systems Manager 在无法连接互联网的情况下管理私有 EC2 实例?

验证是否已将正确的 IAM 角色附加到实例

要对 Systems Manager 终端节点进行 API 调用,您必须附加将 AmazonSSMManagedInstanceCore 权限策略附加到与实例关联的 IAM 角色。如果您使用的是自定义 IAM 策略,请确认您的自定义策略使用了 AmazonSSMManagedInstanceCore 下的权限。 另外,请确保 IAM 角色的信任策略允许 ec2.amazonaws.com 担任此角色。

有关更多信息,请参阅向 Systems Manager 实例配置文件添加权限(控制台)

验证是否已连接实例元数据服务

SSM 代理必须与实例元数据服务进行通信,才能获取有关实例的必要信息。使用 Netcat 命令测试连接:

nc -vz 169.254.169.254 80

如果您在实例上使用代理,则代理可能会阻止与元数据 URL 的连接。确认已将 SSM 代理配置为与代理一起使用。要配置 SSM 代理以使用代理,请参阅:

Windows:配置 SSM 代理以对 Windows Server 实例使用代理

Linux:配置 SSM 代理以使用代理 (Linux)

故障排除

如果实例状态未更改为在线,但仍然指示连接中断,则请参阅 SSM 代理日志进一步进行故障排除:

Windows:Windows 的 SSM 代理日志位于 %PROGRAMDATA%\Amazon\SSM\Logs

Linux:Linux 的 SSM 代理日志位于 /var/log/amazon/ssm


这篇文章对您有帮助吗?


您是否需要账单或技术支持?