在 Amazon Linux 2 托管式节点上使用 Kernel Live Patching - Amazon Systems Manager
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

在 Amazon Linux 2 托管式节点上使用 Kernel Live Patching

适用于 Amazon Linux 2 的 Kernel Live Patching 使您能够将安全漏洞和严重错误补丁应用于正在运行的 Linux 内核,而无需重启或中断正在运行的应用程序。这让您能够从改进的服务和应用程序可用性中受益,同时保持基础设施的安全和最新状态。在运行 Amazon Linux 2 的 Amazon EC2 实例、Kernel Live Patching 核心设备和本地虚拟机上支持 Amazon IoT Greengrass。

有关 Kernel Live Patching 的一般信息,请参阅适用于 Linux 实例的 Amazon EC2 用户指南中的 Kernel Live Patching在 Amazon Linux 2

在 Amazon Linux 2 托管式节点上启用 Kernel Live Patching 之后,您可使用 Patch Manager(Amazon Systems Manager 的一项功能)将内核实时补丁应用到托管式节点。使用 Patch Manager 是使用节点上的现有 yum 工作流来应用更新的替代方法。

开始前的准备工作

要使用 Patch Manager 将内核实时补丁应用到 Amazon Linux 2 托管式节点上,请确保节点基于正确的架构和内核版本。想要了解有关信息,请参阅适用于 Linux 实例的 Amazon EC2 用户指南中的支持的配置和先决条件

关于 Kernel Live Patching 和 Patch Manager

更新内核版本

应用内核实时补丁更新后,无需重启托管式节点。但是,Amazon 为 Amazon Linux 2 内核版本提供内核实时补丁,最长可达其发布后三个月。在三个月期限之后,您必须更新到更高版本的内核才能继续接收内核实时补丁。我们建议使用维护时段至少每三个月一次安排重启节点,以提示内核版本更新。

卸载内核实时补丁

无法使用 Patch Manager 卸载内核实时补丁。相反,您可以关闭 Kernel Live Patching,从而删除所应用的内核实时补丁的 RPM 程序包。有关更多信息,请参阅 使用 Run Command 来关闭 Kernel Live Patching

内核合规性

在某些情况下,从当前内核版本的实时补丁安装所有 CVE 补丁可能会使该内核进入与较新内核版本相同的合规性状态。发生这种情况时,较新版本报告为 Installed,而托管式节点报告为 Compliant。但是,对于较新的内核版本,不会报告安装时间。

一个内核实时补丁,多个 CVE

如果一个内核实时补丁解决多个 CVE,并且这些 CVE 具有各种分类和严重性值,则只针对该补丁报告 CVE 中的最高分类和严重性。

本节的其余部分介绍如何使用 Patch Manager 将内核实时补丁应用于满足这些要求的托管式节点。

工作原理

Amazon 为 Amazon Linux 2 发布了两种类型的内核实时补丁:安全更新和错误修复。要应用这些补丁类型,请使用仅针对下表列出的分类和严重性的补丁基准文档。

分类 严重性
Security Critical, Important
Bugfix All

您可以创建仅针对这些补丁的自定义补丁基准,也可以使用预定义的 AWS-AmazonLinux2DefaultPatchBaseline 补丁基准。换句话说,您可以将 AWS-AmazonLinux2DefaultPatchBaseline 与启用 Kernel Live Patching 的 Amazon Linux 2 托管式节点一起使用,并且系统会应用内核实时更新。

注意

AWS-AmazonLinux2DefaultPatchBaseline 配置指定发布最后更新补丁后的 7 天等待期,然后才会自动安装补丁。如果您不想等待 7 天再自动批准内核实时补丁,则可以创建并使用自定义补丁基准。在补丁基准中,您可以不指定自动批准等待期,也可以指定较短或更长的等待期。有关更多信息,请参阅使用自定义补丁基准

我们建议使用以下策略通过内核实时更新来修补托管式节点:

  1. 在 Amazon Linux 2 托管式节点上启用 Kernel Live Patching。

  2. 使用 Run Command(Amazon Systems Manager 的一项功能)在托管式节点上运行 Scan 操作,这些节点使用预定义 AWS-AmazonLinux2DefaultPatchBaseline 或自定义补丁基准,该基准也仅针对严重性分类为 CriticalImportant,以及 All 的严重性为 BugfixSecurity 更新。

  3. 使用合规性(Amazon Systems Manager 的一项功能)查看是否报告了任何已扫描的托管式节点中修补不合规情况。如果是这样,请查看节点合规性详细信息,以确定托管式节点中是否缺少任何内核实时补丁。

  4. 要安装缺少的内核实时补丁,请将 Run Command 与之前指定的相同补丁基准一起使用,但这次运行 Install 操作而不是 Scan 操作。

    由于无需重启即可安装内核实时补丁,因此您可以为此操作选择 NoReboot 重启选项。

    注意

    如果托管式节点上安装的其他类型补丁需要,或者要更新到较新的内核,您仍然可以重启托管式节点。在这些情况下,请改为选择 RebootIfNeeded 重启选项。

  5. 返回到合规性以验证安装了内核实时补丁。

使用 Run Command 来启用 Kernel Live Patching

要启用 Kernel Live Patching,您可以在托管式节点上运行 yum 命令,或使用 Run Command 以及您创建的自定义 Systems Manager 文档(SSM 文档)。

有关通过直接在托管式节点上运行 yum 命令来启用 Kernel Live Patching 的信息,请参阅适用于 Linux 实例的 Amazon EC2 用户指南中的启用 Kernel Live Patching

注意

当您启用内核实时修补时,如果已在托管式节点上运行的内核为比 kernel-4.14.165-131.185.amzn2.x86_64(支持的最低版本)更早,进程将安装最新的可用内核版本并重启托管式节点。如果节点已运行 kernel-4.14.165-131.185.amzn2.x86_64 或更高版本,进程不会安装更新的版本,也不会重启节点。

使用 Run Command 来启用 Kernel Live Patching (控制台)
  1. 访问 https://console.aws.amazon.com/systems-manager/,打开 Amazon Systems Manager 控制台。

  2. 在导航窗格中,选择 Run Command

    -或者-

    如果首先打开 Amazon Systems Manager 主页,选择菜单图标 ( 
    The menu icon
  ) 以打开导航窗格,然后选择 Run Command

  3. 选择 Run command(运行命令)

  4. 命令文档列表中,选择自定义 SSM 文档 AWS-ConfigureKernelLivePatching

  5. Command parameters(命令参数)部分中,指定是否希望作为此操作的一部分重启托管式节点。

  6. 有关使用此页上的其余控件的信息,请参阅 从控制台运行命令

  7. 选择 运行

启用 Kernel Live Patching (Amazon CLI)
  • 在本地计算机上运行以下命令。

    Linux & macOS
    aws ssm send-command \ --document-name "AWS-ConfigureKernelLivePatching" \ --parameters "EnableOrDisable=Enable" \ --targets "Key=instanceids,Values=instance-id"
    Windows Server
    aws ssm send-command ^ --document-name "AWS-ConfigureKernelLivePatching" ^ --parameters "EnableOrDisable=Enable" ^ --targets "Key=instanceids,Values=instance-id"

    instance-id 替换为要启用该功能的 Amazon Linux 2 托管式节点的 ID,例如 i-02573cafcfEXAMPLE。您可以使用以下任一格式,在多个托管式节点上启用该功能。

    • --targets "Key=instanceids,Values=instance-id1,instance-id2"

    • --targets "Key=tag:tag-key,Values=tag-value"

    有关可以在命令中使用的其他选项的信息,请参阅《Amazon CLI Command Reference》中的 send-command

使用 Run Command 应用内核实时补丁

要应用内核实时补丁,您可以在托管式节点上运行 yum 命令,也可以使用 Run Command 和 SSM 文档 AWS-RunPatchBaseline

有关通过在托管式节点上直接运行 yum 命令来应用内核实时补丁的信息,请参阅适用于 Linux 实例的 Amazon EC2 用户指南中的应用内核实时补丁

使用 Run Command 应用内核实时补丁(控制台)
  1. 访问 https://console.aws.amazon.com/systems-manager/,打开 Amazon Systems Manager 控制台。

  2. 在导航窗格中,选择 Run Command

    -或者-

    如果首先打开 Amazon Systems Manager 主页,选择菜单图标 ( 
    The menu icon
  ) 以打开导航窗格,然后选择 Run Command

  3. 选择 Run command(运行命令)

  4. 命令文档列表中,请选择 SSM 文档 AWS-RunPatchBaseline

  5. Command parameters ( 命令参数) 部分,执行以下操作之一:

    • 如果要检查是否有新的内核实时补丁,请对于 Operation (操作) 选择 Scan。对于 Reboot Option(重启选项),如果不希望托管式节点在此操作后重启,请选择 NoReboot。操作完成后,您可以在合规性中检查新的补丁和合规性状态。

    • 如果您已经检查了补丁合规性,并准备好应用可用的内核实时补丁,请对于 Operation (操作) 选择 Install。对于 Reboot Option(重启选项),如果不希望托管式节点在此操作后重启,请选择 NoReboot

  6. 有关使用此页上的其余控件的信息,请参阅 从控制台运行命令

  7. 选择 运行

使用 Run Command (Amazon CLI) 应用内核实时补丁
  1. 要在合规性检查结果出来之前执行 Scan 操作,请从本地计算机运行以下命令。

    Linux & macOS
    aws ssm send-command \ --document-name "AWS-RunPatchBaseline" \ --targets "Key=InstanceIds,Values=instance-id" \ --parameters '{"Operation":["Scan"],"RebootOption":["RebootIfNeeded"]}'
    Windows Server
    aws ssm send-command ^ --document-name "AWS-RunPatchBaseline" ^ --targets "Key=InstanceIds,Values=instance-id" ^ --parameters {\"Operation\":[\"Scan\"],\"RebootOption\":[\"RebootIfNeeded\"]}

    有关可以在命令中使用的其他选项的信息,请参阅《Amazon CLI Command Reference》中的 send-command

  2. 要在合规性检查结果出来之后执行 Install 操作,请从本地计算机运行以下命令。

    Linux & macOS
    aws ssm send-command \ --document-name "AWS-RunPatchBaseline" \ --targets "Key=InstanceIds,Values=instance-id" \ --parameters '{"Operation":["Install"],"RebootOption":["NoReboot"]}'
    Windows Server
    aws ssm send-command ^ --document-name "AWS-RunPatchBaseline" ^ --targets "Key=InstanceIds,Values=instance-id" ^ --parameters {\"Operation\":[\"Install\"],\"RebootOption\":[\"NoReboot\"]}

在上述两个命令中,将 instance-id 替换为要应用内核实时补丁的 Amazon Linux 2 托管式节点的 ID,例如 i-02573cafcfEXAMPLE。您可以使用以下任一格式,在多个托管式节点上启用该功能。

  • --targets "Key=instanceids,Values=instance-id1,instance-id2"

  • --targets "Key=tag:tag-key,Values=tag-value"

有关可以在这些命令中使用的其他选项的信息,请参阅《Amazon CLI Command Reference》中的 send-command

使用 Run Command 来关闭 Kernel Live Patching

要关闭 Kernel Live Patching,您可以在托管式节点上运行 yum 命令,也可以使用 Run Command 以及自定义 SSM 文档 AWS-ConfigureKernelLivePatching

注意

如果您不再需要使用内核实时修补,可以随时关闭它。在大多数情况下,不需要关闭该功能。

有关通过直接在托管式节点上运行 yum 命令来关闭 Kernel Live Patching 的信息,请参阅适用于 Linux 实例的 Amazon EC2 用户指南中的启用 Kernel Live Patching

注意

关闭 Kernel Live Patching 时,该进程会卸载 Kernel Live Patching 插件,然后重启托管式节点。

使用 Run Command 来关闭 Kernel Live Patching (控制台)
  1. 访问 https://console.aws.amazon.com/systems-manager/,打开 Amazon Systems Manager 控制台。

  2. 在导航窗格中,选择 Run Command

    -或者-

    如果首先打开 Amazon Systems Manager 主页,选择菜单图标 ( 
    The menu icon
  ) 以打开导航窗格,然后选择 Run Command

  3. 选择 Run command(运行命令)

  4. 命令文档 列表中,请选择 SSM 文档 AWS-ConfigureKernelLivePatching

  5. Command parameters (命令参数) 部分中,为必需的参数指定值。

  6. 有关使用此页上的其余控件的信息,请参阅 从控制台运行命令

  7. 选择 运行

关闭 Kernel Live Patching (Amazon CLI)
  • 运行类似于下面的命令。

    Linux & macOS
    aws ssm send-command \ --document-name "AWS-ConfigureKernelLivePatching" \ --targets "Key=instanceIds,Values=instance-id" \ --parameters "EnableOrDisable=Disable"
    Windows Server
    aws ssm send-command ^ --document-name "AWS-ConfigureKernelLivePatching" ^ --targets "Key=instanceIds,Values=instance-id" ^ --parameters "EnableOrDisable=Disable"

    instance-id 替换为要关闭该功能的 Amazon Linux 2 托管式节点的 ID,例如 i-02573cafcfEXAMPLE。要在多个托管式节点上关闭该功能,您可以使用以下任一格式。

    • --targets "Key=instanceids,Values=instance-id1,instance-id2"

    • --targets "Key=tag:tag-key,Values=tag-value"

    有关可以在命令中使用的其他选项的信息,请参阅《Amazon CLI Command Reference》中的 send-command