当使用补丁管理器 AWS-RunPatchBaseline 文档时,如何解决与 Amazon EC2 Windows 实例相关的修补问题?

3 分钟阅读
0

我在尝试修补 Amazon Elastic Compute Cloud (Amazon EC2) Windows 实例,但收到了错误。我想解决用 AWS-RunPatchBasline 文档修补 Windows 节点时出现的问题。

简短描述

当您使用补丁管理器、AWS Systems Manager 的一项功能、AWS-RunPatchBaseline 文档时,可能会遇到以下一些问题:

  • 该节点无法访问 Amazon Simple Storage Service (Amazon S3) 端点
  • 令牌请求无效
  • 无法搜索 Windows 更新
  • 下载后更新无法安装
  • 缺少一个补丁

解决方法

该节点无法访问 Amazon S3 端点

当 Amazon S3 无法连接到远程服务器时,您可能会看到以下示例错误消息:

“Invoke-PatchBaselineOperation: 底层连接已关闭: 发送时出现意外错误。”

-或-

“执行 PatchBaselineOperations 时出现错误: 无法连接到远程服务器”

出现上述错误是因为节点无法连接到 S3 端点。或者,附加到实例的 AWS Identity and Access Management(AWS IAM)配置文件缺少 S3 连接所需的最低权限。

要解决这些错误,请完成以下步骤:

1.    检查实例配置文件的 IAM 权限是否附加到节点。有关最低权限,请参阅 AWS Systems Manager Agent (SSM Agent) 与 AWS 托管 S3 桶通信

2.    要检查与 Amazon S3 端点的连接,请在 PowerShell 中运行以下命令:
**注意:**把 <region_id> 替换为您的 AWS 区域 ID。

tnc s3.<region_id>.amazonaws.com -port 443

3.    如果前面的测试失败,请检查该实例如何连接到 Systems Manager 端点:

令牌请求无效

您可能会看到以下示例错误消息,因为令牌请求无效:

“Invoke-PatchBaselineOperation 失败,原因是: 请求中包含的安全令牌已过期:

-或-

“Invoke-PatchBaselineOperation: 实例 ID i-00fe5918abcdef12 与证书不匹配”

当 SSM Agent 使用的凭证与您期望使用的凭证不同,就会出现上述错误。例如,SSM Agent 使用的是共享证书文件,而不是实例配置文件。

**注意:**对于 SSM Agent 版本 3.1.1927.0 或更早版本,SSM Agent 按照为默认凭证提供者链规定的顺序查找证书。这也适用于 Amazon Elastic Container Service (Amazon ECS) 容器实例。

SSM Agent 版本 3.2.183.0 起,SSM Agent 会在 /var/lib/amazon/ssm/credentials(Linux 和 macOS)或者 %PROGRAMFILES%\Amazon\SSM\credentials(Windows Server)中存储一组临时证书。临时证书具有您为所选的 IAM 角色指定的权限。IAM 角色拥有默认主机管理配置或附加到您的托管节点的实例配置文件的权限。

要解决这些错误,将 SSM Agent 更新到 3.2.183.0 或更高版本,以便可以从 SSM 文件夹中的文件获取凭证。

要使用较早的 SSM Agent 版本,请找到共享凭证,将其删除,然后再次测试补丁。

要找到证书,请完成以下步骤:

1.    按 Windows 键,然后输入环境变量

2.    找到名为 AWS_ACCESS_KEY_ID 以及 AWS_SECRET_ACCESS_KEY 的变量。

3.    删除凭证,然后再次测试补丁。

共享凭证位置

以下是共享凭证位置的示例:

SystemsProfile

  • C:\Windows\System32\config\systemprofile\.aws\
  • C:\Windows\System32\config\systemprofile\AppData\Local\AWSToolkit\RegisteredAccounts.json

用户档案

  • %USERPROFILE%\.aws\
  • %USERPROFILE%\AppData\Local\AWSToolkit\RegisteredAccounts.json

无法搜索 Windows 更新

无法搜索 Windows 更新时,可能会看到以下示例错误消息:

“Invoke-PatchBaselineOperation: 例外详情: 尝试搜索 Windows 更新时出错。错误消息: HRESULT 的异常: 0x80240437”

-或-

“Invoke-PatchBaselineOperation: 例外详情: 尝试搜索 Windows 更新时出错。错误消息: HRESULT 的异常: 0x80072EE2”

上述错误与 Windows 更新组件、缺少与 Windows 更新目录的连接或 Windows 服务器更新服务(WSUS)有关。

要解决这些错误,请完成以下步骤:

1.    检查与 Windows 更新的连接。确定该实例是否通过代理或使用 WSUS 与 Microsoft 补丁源建立了直接的互联网连接。

2.    您可以使用组策略或注册表项来配置 WSUS 服务器。要检查 WSUS 配置,请运行以下命令:

检查组策略:

gpresult /H %USERPROFILE%\Desktop\report.html

检查可能手动设置的注册表项:

Get-ItemProperty -Path 'HKLM:\Software\Policies\Microsoft\Windows\WindowsUpdate\AU' | Select-Object AUOptions, NoAutoUpdate,  UseWUServer
Get-ItemProperty -Path 'HKLM:\Software\Policies\Microsoft\Windows\WindowsUpdate' | Select-Object DisableWindowsUpdateAccess,  WUServer, WUStatusServer

要检查代理配置,请运行以下命令:

**注意:**须在执行修补操作的系统用户账户 S-1-5-18 的上下文中获取代理配置。要获取配置,请借助 AWS-RunPowerShellScript 文档,使用 Run Command,它是 AWS Systems Manager 的一项功能。

在 Microsoft 网站下载 PSExec,然后运行以下命令,在系统用户上下文中启动新的 PowerShell 提示符:

psexec -i -s C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe

要查看 AmazonSSMAgent 注册表设置,请运行以下命令:

Get-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Services\AmazonSSMAgent'

要查看系统环境变量(http_proxy、https_proxy、no_proxy),请运行以下命令:

Get-Item -Path Env:http_proxy  
Get-Item -Path Env:https_proxy  
Get-Item -Path Env:no_proxy

要查看 Internet Explorer 设置(HTTP、安全、例外),请运行以下命令:

Get-ItemProperty -Path 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Internet Settings' | Select-Object ProxyServer,  ProxyEnable

要查看 WinINet 代理,请运行以下命令:

[System.Net.WebRequest]::DefaultWebProxy

要查看 WinHTTP 代理设置(http=、https=、bypass-list=),请运行以下命令:

netsh winhttp show proxy

如果仅为 SSM Agent 设置代理,则补丁管理器不起作用。这是因为 Windows 更新客户端使用系统范围的代理设置来扫描和下载更新。要在系统范围内设置代理,请运行以下命令:

netsh winhttp set proxy proxy-server="hostname:port" bypass-list="169.254.169.254"

如果有连接,请重置 Windows 更新组件,并重试修补。

下载后更新无法安装

要解决下载后无法安装的更新,请完成以下步骤:

1.    查看位于路径 C:\Windows\Logs\CBS 上的补丁安装日志,并匹配正在运行的命令的时间戳。然后,查看日志中是否有错误消息。

2.    如补丁需要重启但在重启后安装失败,则使用 Amazon EC2 屏幕截图在登录屏幕上查看消息。

**注意:**补丁可能会在启动屏幕上回滚并显示以下消息: “我们无法完成更新。正在撤消更改。不要关掉电脑”

3.    在基于组件的服务(CBS)日志文件中找到 HResult 代码,然后在 Windows 更新错误文档中搜索该代码。

4.    重置 Windows 更新组件,然后重试安装。

缺少一个补丁

要解决补丁缺失问题,请参阅通过补丁管理器在 EC2 Windows 实例上成功执行修补操作后,如何解决 KB 补丁缺失问题?

相关信息

补丁如何安装

AWS 官方
AWS 官方已更新 10 个月前