本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
UEFI 在 023 上安全启动 AL2
AL2从 2023.1 版本开始,023 支持 UEFI 安全启动。您必须将 AL2 023 用于同时支持 UEFI 和 UEFI 安全启动的 Amazon EC2 实例。有关更多信息,请参阅 Amazon EC2 用户指南中的启动实例。
AL2023 启用 UEFI 安全启动的实例仅接受由签名的内核级别代码,包括 Linux 内核和模块 Amazon 因此,您可以确保您的实例仅运行由签名的内核级代码 Amazon。
有关亚马逊 EC2 实例和 UEFI 安全启动的更多信息,请参阅亚马逊用户指南中的 UEFI 安全启动。 EC2
先决条件
-
您必须使用版本为 AL2 023 2023.1 或更高版本的 AMI。
-
实例类型必须支持 UEFI 安全启动。有关更多信息,请参阅 Amazon EC2 用户指南中的启动实例。
在 023 上启用 UEFI 安全启动 AL2
标准 AL2 023 AMIs 包含引导加载程序和由我们的密钥签名的内核。您可以通过注册现有实例来启用 UEFI 安全启动,也可以通过注册快照中的映像在预启用 UEFI 安全启动的情况下进行创建 AMIs 。默认情况下,标准 AL2 023 不启用 UEFI 安全启动。 AMIs
如果实例类型支持 UEFIuefi-preferred
, AMIs 则启动模式设置为 AL2 023,可确保使用这些启动的实例 AMIs 将使用 UEFI 固件。如果实例类型不支持 UEFI,则使用传统 BIOS 固件启动实例。在传统 BIOS 模式下启动实例时,不会强制执行 UEFI 安全启动。
有关亚马逊 EC2 实例上的 AMI 启动模式的更多信息,请参阅亚马逊 EC2 用户指南中的启动模式。
注册现有实例
要注册一个现有实例,请使用一组密钥填充特定的 UEFI 固件变量,这组密钥使固件能够验证引导加载程序,而引导加载程序又能在下次启动时验证内核。
-
Amazon Linux 提供一个简化注册流程的工具。请运行以下命令以使用一组必要的密钥和证书预置实例。
sudo amazon-linux-sb enroll
-
运行以下命令来重新启动实例。实例重启后,将启用 UEFI 安全启动。
sudo reboot
注意
亚马逊 Linux AMIs 目前不支持 Nitro 可信平台模块 (NitroTPM)。如果您除了需要 UEFI 安全启动还需要 NitroTPM ,请参阅下一节的信息。
注册快照映像
使用亚马逊 EC2 register-image
API 从亚马逊 EBS 根卷的快照注册 AMI 时,您可以使用包含 UEFI 变量存储状态的二进制 blob 来配置 AMI。通过提供 AL2 023UefiData
,即可启用 UEFI 安全启动,无需执行上一节中的步骤。
有关创建和使用二进制 blob 的更多信息,请参阅 A ma EC2 zon 用户指南中的选项 B:创建包含预先填充的变量存储的二进制 blob。
AL2023 提供了一个预先构建的二进制 blob,可以直接在 Amazon 实例上使用。 EC2 该二进制 blob 位于正在运行的实例上的 /usr/share/amazon-linux-sb-keys/uefi.vars
中。此 blob 由 amazon-linux-sb-keys
RPM 软件包提供,从 2023.1 版本 AMIs 开始,该软件包默认安装在 AL2 023 上。
注意
为确保您使用的是最新版本的密钥和撤销,请使用与创建 AMI 相同的版本 AL2 023 中的 blob。
当您注册映像时,建议您使用设置为 uefi
的 RegisterImage
API 参数 BootMode
。这使得您可以通过将 TpmSupport
参数设置为 v2.0
来启用 NitroTPM。此外,BootMode
设置为 uefi
可以确保启用 UEFI 安全启动,并且在切换到不支持 UEFI 的实例类型时无法意外禁用该模式。
有关 NitrotPM 的更多信息,请参阅亚马逊用户指南中的 Nitrot PM。 EC2
撤消更新
Amazon Linux 可能需要发布使用更新的密钥签名的新版引导加载程序 grub2
或 Linux 内核。在这种情况下,就需要撤消旧密钥,以防止以前版本的引导加载程序中的可利用漏洞绕过 UEFI 安全启动验证流程。
grub2
或 kernel
软件包的更新始终会自动将撤消列表更新到正在运行的实例的 UEFI 变量存储中。这意味着,在 UEFI 安全启动启用的情况下,您在为软件包安装安全更新后,将无法再运行该软件包的旧版本。
UEFI Secure Boot 在 023 上是如何工作的 AL2
与其他 Linux 发行版不同,Amazon Linux 不提供一个名为 shim 的额外组件来充当第一阶段引导加载程序。shim 通常使用 Microsoft 密钥签名。例如,在提供 shim 的 Linux 发行版上,shim 会加载 grub2
引导加载程序,该引导加载程序使用 shim 自己的代码来验证 Linux 内核。此外,shim 在机器所有者密钥 (MOK) 数据库中维护自己的一组密钥和撤消,该数据库位于 UEFI 变量存储中并使用 mokutil
工具进行控制。
Amazon Linux 不提供 shim。因为 AMI 所有者控制 UEFI 变量,所以不需要此中间步骤,而此中间步骤会对启动和引导时间产生不利影响。此外,我们默认选择不包括对任何供应商密钥的信任,这减少了执行不想要的二进制文件的机会。当然,如果客户选择信任,则可以包括想要的二进制文件。
使用 Amazon Linux,UEFI 可以直接加载和验证我们的 grub2
引导加载程序。grub2
引导加载程序已修改为在加载 Linux 内核后,使用 UEFI 对其进行验证。因此,使用存储在通常 UEFI db
变量(授权密钥数据库)中的相同证书验证 Linux 内核,并根据与引导加载程序和其他 UEFI 二进制文件相同的 dbx
变量(撤消数据库)测试 Linux 内核。因为我们提供自己的 PK 和 KEK 密钥来控制对 db 数据库和 dbx 数据库的访问,所以我们可以根据需要分发签名的更新和撤消,而无需像 shim 这样的中介。
有关 UEFI 安全启动的更多信息,请参阅 Amazon 用户指南中的 UEFI 安全启动的工作原理。 EC2
注册您自己的密钥
如上一节所述,亚马逊 Linux 不要求在亚马逊上使用 UEFI 安全启动。shim
EC2当你阅读其他 Linux 发行版的文档时,你可能会找到使用管理机器所有者密钥 (MOK) 数据库的文档mokutil
, AL2023 上不存在该文档。shim
和 MOK 环境绕过了 UEFI 固件中密钥注册的一些限制,这些限制不适用于亚马逊 EC2 实施 UEFI 安全启动的方式。借助 Amazon, EC2 有一些机制可以轻松地直接操作 UEFI 变量存储中的密钥。
如果您想要注册自己的密钥,有两种办法:一是在现有实例内操作变量存储(请参阅从实例内向变量存储中添加密钥),二是构造预填充的二进制 blob(请参阅创建包含预填充变量存储的二进制 blob)。