Knowledge Center Monthly Newsletter - March 2025
Stay up to date with the latest from the Knowledge Center. See all new and updated Knowledge Center articles published in the last month and re:Post’s top contributors.
为什么 Systems Manager 没有将我的 Amazon EC2 实例显示为托管实例?
我有一个 Amazon Elastic Compute Cloud (Amazon EC2) 实例,但它在 AWS Systems Manager 中未显示为托管实例。
简短描述
要确定为什么 AWS Systems Manager 没有将您的实例显示为托管实例,您可以使用 AWSSupport-TroubleshootManagedInstance 运行手册。有关详细信息,请参阅运行由 Systems Manager Automation 提供支持的自动化操作和设置自动化。
您也可以手动对 Amazon EC2 实例进行故障排除。
解决方法
**注意:**如果您在运行 AWS 命令行界面 (AWS CLI) 命令时收到错误,请参阅 AWS CLI 错误故障排除。此外,请确保您使用的是最新版本的 AWS CLI。
运行 Systems Manager Automation 运行手册
**先决条件:**在您的实例上安装并运行 AWS Systems Manager Agent (SSM Agent)。在运行自动化之前,请确保您的 AWS Identity and Access Management (IAM) 用户或角色具有必要的权限。请参阅 AWSSupport-TroubleshootManagedInstance 上的“所需的 IAM 权限”部分。
要运行运行手册,请完成以下步骤:
- 打开 Systems Manager 控制台。
- 在导航窗格中,选择 Documents(文档)。
- 在搜索栏中,输入 AWSSupport-TroubleshootManagedInstance(所有者: Amazon)。
- 选择 AWSSupport-TroubleshootManagedInstance 文档。
- 选择 Execute automation(执行自动化)。
- 对于输入参数,输入以下信息:
对于 InstanceId,输入受影响实例的 ID。您可以手动输入实例 ID,也可以使用交互式实例选择器。如果使用实例选择器,请将筛选条件从 Show managed instance only(仅显示托管实例)更改为 Show all instances(显示所有实例)。
(可选)对于 AutomationAssumeRole,输入 IAM 角色的 ARN,该角色允许 Systems Manager Automation 代表您执行操作。如果您不指定角色,Systems Manager Automation 将使用运行该文档的用户的权限。 - 选择 Execute(执行)。
自动化完成后,查看 Outputs(输出)部分,以获取以下详细结果:
- InstanceisOnline.output 部分显示 Systems Manager 是否正在管理该实例。
- finalOutput.Output 部分显示检查是通过还是失败,并包含有关如何对失败进行排除故障的信息。
手动对 Amazon EC2 实例进行故障排除
**重要事项:**在整个故障排除步骤中,请选择您的实例所在的 AWS 区域。
验证 SSM Agent 是否已安装并在实例上运行
确认操作系统 (OS) 支持 Systems Manager 后,验证 SSM Agent 是否已安装并在实例上运行。
SSM Agent 已预安装在某些 Linux、macOS 和 Windows 亚马逊机器映像 (AMI) 上。
要在未预安装代理的情况下手动安装 SSM Agent,请参阅以下 AWS 文档:
- 在 EC2 实例上手动安装和卸载 SSM Agent(适用于 Linux)
- 在 EC2 实例上手动安装和卸载 SSM Agent(适用于 macOS)
- 在 EC2 实例上手动安装和卸载 SSM Agent(适用于 Windows Server)
要验证 SSM Agent 是否正在运行,请运行操作系统特定的命令来检查代理状态。
确认 SSM Agent 正在运行后,运行 ssm-cli 命令对托管实例可用性进行故障排除。
验证与端口 443 上的 Systems Manager 端点的连接
对端口 443 上的 Systems Manager 端点的连接验证特定于您的操作系统和子网设置。有关按区域划分的 Systems Manager 端点列表,请参阅服务端点。
**注意:**在以下示例中,会话管理器(AWS Systems Manager 的一项功能)需要 ssmmessages 端点。
EC2 Linux 实例
对于 EC2 Linux 实例,请使用 Telnet 或 Netcat 命令验证与端口 443 上端点的连接。Netcat 未预安装在 EC2 实例上。要手动安装 Netcat,请参阅 Nmap 网站上的 Ncat。
**注意:**在以下命令中,请将 RegionID 替换为您的实例的区域 ID。
Telnet 命令:
telnet ssm.RegionID.amazonaws.com 443 telnet ec2messages.RegionID.amazonaws.com 443 telnet ssmmessages.RegionID.amazonaws.com 443
Telnet 连接示例:
root@111800186:~# telnet ssm.us-east-1.amazonaws.com 443 Trying 52.46.141.158... Connected to ssm.us-east-1.amazonaws.com. Escape character is '^]'.
要退出 telnet,请按 Ctrl 和 ] 键。输入 quit,然后按 Enter。
Netcat 命令:
nc -vz ssm.RegionID.amazonaws.com 443 nc -vz ec2messages.RegionID.amazonaws.com 443 nc -vz ssmmessages.RegionID.amazonaws.com 443
EC2 Windows 实例
对于 EC2 Windows 实例,要验证与端口 443 上端点的连接,请运行以下 Windows PowerShell 命令:
`Test-NetConnection ssm.RegionID.amazonaws.com -port 443 Test-N`etConnection ec2messages.RegionID.amazonaws.com -port 443 Test-NetConnection ssmmessages.RegionID.amazonaws.com -port 443
公有子网
Systems Manager 端点是公有端点。要解决公有子网中实例的连接问题,实例的路由表必须将互联网流量路由到互联网网关。此外,Amazon Virtual Private Cloud (Amazon VPC) 安全组和网络访问控制列表(网络 ACL)必须允许在端口 443 上进行出站连接。
私有子网
使用私有 IP 地址私密访问 Amazon EC2 和 Systems Manager API。要解决私有子网中实例的连接问题,实例的路由表必须将互联网流量路由到 NAT 网关。或者,必须将 VPC 端点配置为访问 Systems Manager 端点。
有关详细信息,请参阅如何创建 VPC 端点,才能在不连接互联网的情况下使用 Systems Manager 管理私有 EC2 实例?
**注意:**每个接口端点都会在提供的子网中创建一个弹性网络接口。
作为私有子网的安全最佳实践,请验证下面的设置:
- 连接到 VPC 端点网络接口的安全组允许来自连接到实例的安全组的入站流量通过 TCP 端口 443。
- 连接到实例的安全组允许出站流量通过 TCP 端口 443 流向 VPC 端点网络接口的私有 IP 地址。
验证默认主机管理配置的设置
注意:如果您未激活默认主机管理配置,请继续执行验证是否已将正确的 IAM 角色附加到实例部分中的操作。
如果默认主机管理配置创建的 IAM 角色对您的用例没有足够的权限,则您可以添加策略。
所有关联的实例必须使用实例元数据服务版本 2 (IMDSv2)。要检查您的 IMDSv2 配置,请使用 Amazon CloudWatch 指标 MetadataNoToken 来确定何时 IMDSv1 的使用量为零。然后,检查您的实例是否已转换为 IMDSv2。
SSM Agent 版本 3.2.582.0 或更高版本中提供默认主机管理配置功能。要验证 SSM Agent 版本,请参阅检查 SSM Agent 版本号。
要验证默认主机管理配置的设置,请使用 Systems Manager 控制台或 AWS CLI。
Systems Manager 控制台
完成以下步骤:
- 打开 Systems Manager 控制台。
- 在导航窗格中,选择 Fleet Manager。
- 在 Account management(账户管理)下拉菜单中,选择 Default Host Management Configuration(默认主机管理配置)。
- 确认 Enable Default Host Management Configuration(启用默认主机管理配置)设置已启用。
AWS CLI
运行 AWS CLI 命令 get-service-setting 以验证默认主机管理配置的设置:
aws ssm get-service-setting \ --setting-id arn:aws:ssm:RegionID:AccountID:servicesetting/ssm/managed-instance/default-ec2-instance-management-role
**注意:**请将 AccountID 替换为您的 AWS 账户 ID。
激活默认主机管理配置后,您会收到类似于以下内容的输出:
{ "ServiceSetting": { "SettingId": "/ssm/managed-instance/default-ec2-instance-management-role", "SettingValue": "service-role/AWSSystemsManagerDefaultEC2InstanceManagementRole", "LastModifiedDate": 1679492424.738, "LastModifiedUser": "arn:aws:sts::012345678910:assumed-role/role/role-name", "ARN": "arn:aws:ssm:ap-southeast-1:012345678910:servicesetting/ssm/managed-instance/default-ec2-instance-management-role", "Status": "Customized" } }
**注意:**如果 SettingValue 的值为 $None,则说明默认主机管理配置未配置成功。
验证默认主机管理配置是否正在使用适当的 IAM 角色
最佳做法是在设置默认主机管理配置时使用 IAM 角色 AWSSystemsManagerDefaultEC2InstanceManagementRole。要使用其他角色,请确保该角色附加了 AmazonSSMManagedEC2InstanceDefaultPolicy IAM 策略。
如果已将实例配置文件附加到实例,请删除所有允许 ssm:UpdateInstanceInformation 操作的权限。在使用默认主机管理配置权限之前,SSM Agent 会尝试使用实例配置文件权限。当您允许实例配置文件中的 ssm:UpdateInstanceInformation 操作时,您的实例不会使用默认主机管理配置权限。
验证是否已将正确的 IAM 角色附加到实例
**注意:**如果激活了默认主机管理配置,请继续执行“验证与 IMDS 的连接”部分中的操作。
要对 Systems Manager 端点发出 API 调用,必须将 AmazonSSMManagedInstanceCore 策略附加到实例所附加的 IAM 角色。如果使用的是自定义 IAM 策略,请确认您的自定义策略使用的是 AmazonSSMManagedInstanceCore 中的权限。此外,请确保 IAM 角色的信任策略允许 ec2.amazonaws.com 代入此角色。有关详细信息,请参阅 EC2 实例权限的备选配置。
验证与 IMDS 的连接
SSM Agent 必须与 IMDS 通信才能获取有关您的实例的信息。要测试连接,请运行以下 Netcat 命令:
nc -vz 169.254.169.254 80
要验证是否已为您的现有实例设置 IMDS,请使用 Amazon EC2 控制台或 AWS CLI。
Amazon EC2 控制台
完成以下步骤:
- 打开 Amazon EC2 控制台。
- 在导航窗格中,选择 Instances(实例),然后选择您的实例。
- 选择 Actions(操作),然后选择 Instance settings(实例设置)。
- 选择 Modify instance metadata options(修改实例元数据选项)。
- 在对话框中,确保 Instance metadata service(实例元数据服务)为 Enabled(已启用)。
AWS CLI
运行 AWS CLI 命令 describe-instances 以验证是否已为现有实例设置 IMDS:
aws ec2 describe-instances --query "Reservations[*].Instances[*].MetadataOptions" --instance-ids i-012345678910
示例输出:
[ [ { "State": "applied", "HttpTokens": "optional", "HttpPutResponseHopLimit": 1, "HttpEndpoint": "enabled", "HttpProtocolIpv6": "disabled", "InstanceMetadataTags": "disabled" } ] ]
**注意:**如果输出显示 "HttpTokens": "optional",则同时支持 IMDSv1 和 IMDSv2。如果输出显示 "HttpTokens": "required",则仅支持 IMDSv2。如果输出显示 "HttpEndpoint": "enabled",则说明 IMDS 已启用。
如果在实例上使用代理,则代理可能会阻止与元数据 URL 的连接。要防止阻止,请将 SSM Agent 配置为使用代理,并为元数据 URL 设置 no_proxy。
要将 SSM Agent 配置为使用代理,请参阅以下 AWS 文档:
其他故障排除
如果您的实例在 Systems Manager 中仍未显示为托管节点或显示连接丢失,请查看 SSM Agent 日志继续进行故障排除。对于 Linux 和 macOS,日志位于 /var/log/amazon/ssm。对于 Windows,日志位于 %PROGRAMDATA%\Amazon\SSM\Logs。
如果您的实例未向 SSM Agent 报告,请使用远程桌面协议 (RDP)(适用于 Windows)或 SSH(适用于 Linux)来收集日志。如果无法收集日志,请停止实例并分离根卷。然后,将根卷连接到与辅助卷位于同一可用区的另一个实例,以获取日志。
相关信息
Systems Manager Automation 运行手册参考
将 Amazon Elastic Block Store (Amazon EBS) 卷连接到 Amazon EC2 实例
相关内容
- AWS 官方已更新 2 年前
- AWS 官方已更新 2 年前
- AWS 官方已更新 4 个月前
- AWS 官方已更新 1 年前