我想解决为什么无法在我的 Amazon Elastic Compute Cloud (Amazon EC2) Windows 实例上启动 AWS Systems Manager Agent (SSM Agent)。
解决方法
**注意:**要确定实例是否符合托管节点的必要要求,最佳做法是使用 ssm-cli 版本 3.1.501.0。有关详细信息,请参阅使用 ssm-cli 对托管节点可用性进行故障排除。
以下原因是 SSM Agent 可能无法启动 Windows 实例的原因。
IAM 角色没有必要的权限
您必须拥有正确的权限才能对 Systems Manager 端点进行 API 调用。将 AmazonSSMManagedInstanceCore 权限策略附加到与您的实例关联的 AWS Identity and Access Management (IAM) 角色。如果使用的是自定义 IAM 策略,请确认您的自定义策略使用的是 AmazonSSMManagedInstanceCore 中的权限。此外,请确保 IAM 角色的信任策略允许 ec2.amazonaws.com 代入此角色。有关详细信息,请参阅步骤 1: 为 System Manager 配置实例权限。
SSM Agent 无法访问实例的元数据
SSM Agent 必须与实例的元数据服务通信,以获取有关该实例的必要信息。要访问您的实例的元数据,请在正在运行的实例中使用浏览器。
如果您无法访问元数据,请从 Windows PowerShell 或 CMD 运行路由打印命令。查看输出以确认是否有与以下路由类似的路由:
Persistent Routes:
Network Address Netmask Gateway Address Metric
169.254.169.254 255.255.255.255 172.31.16.1 15
169.254.169.250 255.255.255.255 172.31.16.1 15
169.254.169.251 255.255.255.255 172.31.16.1 15
169.254.169.249 255.255.255.255 172.31.16.1 15
169.254.169.123 255.255.255.255 172.31.16.1 15
169.254.169.253 255.255.255.255 172.31.16.1 15
如果路由不存在或网关地址与当前子网不匹配,请完成以下步骤之一:
-
手动添加路由:
route add -p 169.254.169.254 mask 255.255.255.255 x.x.x.x
**注意:**将 x.x.x.x 替换为您的实例的网关地址。
-
如果实例有 EC2Launch 版本 1,请从提升的 Windows PowerShell 会话中运行以下命令:
import-Module c:\ProgramData\Amazon\EC2-Windows\Launch\Module\Ec2Launch.psm1 ; Add-Routes
-
如果实例有 EC2Launch 版本 2 或 EC2Config,请重启服务。这会设置到达元数据服务和 AWS KMS 服务器的非持久静态路由。
如果路由存在,但实例无法检索元数据,请查看您的实例的 Windows Defender 防火墙、第三方防火墙或防病毒配置。确认没有明确拒绝流向 169.254.169.254 的流量。有关详细信息,请参阅为什么我的 Amazon EC2 Windows 实例出现“Waiting for the metadata service(等待元数据服务)”错误?
实例未连接到 SSM 端点
验证实例是否已通过端口 443 连接到 Systems Manager 端点。运行以下 Windows PowerShell 命令来验证连接。将 RegionID 替换为实例所在的 AWS 区域:
- 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 端点是公有端点。这意味着您的实例必须使用互联网网关才能访问互联网。如果您在从公有子网中的实例连接到端点时遇到问题,请确认以下配置:
- 您的实例使用的路由表必须包含通往互联网的路由。
- Amazon Virtual Private Cloud (Amazon VPC) 安全组和网络访问控制列表(网络 ACL)必须允许在端口 443 上进行出站连接。
私有子网
对于私有子网,您的实例必须使用 NAT 网关才能访问互联网。或者,配置 Amazon VPC 端点以访问 Systems Manager 端点。这使您可以使用私有 IP 地址来访问 Amazon EC2 和 Systems Manager API。有关详细信息,请参阅为什么我的 EC2 实例未显示为托管节点,或在 Systems Manager 中显示“Connection lost(连接丢失)”状态?
未应用代理设置
如果您使用代理,则在启动 SSM Agent 时,将评估代理设置并将其应用于代理配置。有关详细信息,请参阅将 SSM Agent 配置为对 Windows Server 实例使用代理。
SSM Agent 不是最新版本
最佳做法是下载并手动安装最新版本的 SSM Agent。要查看有关最新 SSM Agent 版本的信息,请参阅 GitHub 网站上的 Amazon SSM Agent 版本。
如果在您完成上述步骤后实例无法启动 SSM Agent,请查看 SSM Agent 日志以进一步排除故障。