

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

# UEFI 安全启动已开启 AL2023
<a name="uefi-secure-boot"></a>

AL2023 从 2023.1 版本开始支持 UEFI 安全启动。您必须将 AL2023 用于同时支持 UEFI 和 UEFI 安全启动的 Amazon EC2 实例。有关更多信息，请参阅*《Amazon EC2 用户指南》*中的[在 UEFI 启动模式下启动 Amazon EC2 实例的要求](https://docs.amazonaws.cn/AWSEC2/latest/UserGuide/launch-instance-boot-mode.html)。

AL2023 启用了 UEFI Secure Boot 的实例仅接受由签名的内核级代码，包括 Linux 内核和模块，Amazon因此您可以确保您的实例仅运行由签名的内核级代码。 Amazon

 有关 Amazon EC2 实例和 UEFI 安全启动的更多信息，请参阅*《Amazon EC2 用户指南》*中的 [Amazon EC2 实例的 UEFI 安全启动](https://docs.amazonaws.cn/AWSEC2/latest/UserGuide/uefi-secure-boot.html)。

**先决条件**
+ 您必须使用版本为 2023.1 或更高 AL2023 版本的 AMI。
+ 实例类型必须支持 UEFI 安全启动。有关更多信息，请参阅*《Amazon EC2 用户指南》*中的[在 UEFI 启动模式下启动 Amazon EC2 实例的要求](https://docs.amazonaws.cn/AWSEC2/latest/UserGuide/launch-instance-boot-mode.html)。

## 启用 UEFI 安全启动 AL2023
<a name="enablement"></a>

标准版 AL2023 AMIs 包含引导加载程序和由我们的密钥签名的内核。您可以通过注册现有实例来启用 UEFI 安全启动，也可以通过注册快照中的映像在预启用 UEFI 安全启动的情况下进行创建 AMIs 。默认情况下，标准版未启用 UEFI 安全启动。 AL2023 AMIs

如果实例类型支持 UEFI`uefi-preferred`， AL2023 AMIs 则启动模式设置为可确保使用这些固件启动的实例 AMIs 将使用 UEFI 固件。如果实例类型不支持 UEFI，则使用传统 BIOS 固件启动实例。在传统 BIOS 模式下启动实例时，不会强制执行 UEFI 安全启动。

有关 Amazon EC2 实例上 AMI 启动模式的更多信息，请参阅*《Amazon EC2 用户指南》*中的 [Amazon EC2 启动模式的实例启动行为](https://docs.amazonaws.cn/AWSEC2/latest/UserGuide/ami-boot.html)。

**Topics**
+ [启用 UEFI 安全启动 AL2023](#enablement)
+ [注册现有实例](#enrollment-existing-instance)
+ [注册快照映像](#secure-boot-amis)
+ [撤消更新](#revocation-updates)
+ [UEFI 安全启动的工作原理 AL2023](#shim-use)
+ [注册您自己的密钥](#enrolling-own-keys)

## 注册现有实例
<a name="enrollment-existing-instance"></a>

要注册一个现有实例，请使用一组密钥填充特定的 UEFI 固件变量，这组密钥使固件能够验证引导加载程序，而引导加载程序又能在下次启动时验证内核。

1. Amazon Linux 提供一个简化注册流程的工具。请运行以下命令以使用一组必要的密钥和证书预置实例。

   ```
   sudo amazon-linux-sb enroll
   ```

1. 运行以下命令来重新启动实例。实例重启后，将启用 UEFI 安全启动。

   ```
   sudo reboot
   ```

**注意**  
亚马逊 Linux AMIs 目前不支持 Nitro 可信平台模块 (NitroTPM)。如果您除了需要 UEFI 安全启动还需要 NitroTPM ，请参阅下一节的信息。

## 注册快照映像
<a name="secure-boot-amis"></a>

当您使用 Amazon EC2 `register-image` API 注册来自 Amazon EBS 根卷快照的 AMI 时，可以使用包含 UEFI 变量存储状态的二进制 blob 来预置 AMI。通过提供 AL2023 `UefiData`，即可启用 UEFI 安全启动，无需按照上一节中的步骤操作。

有关创建和使用二进制 blob 的更多信息，请参阅*《Amazon EC2 用户指南》*中的[创建包含预填充变量存储的二进制 blob](https://docs.amazonaws.cn/AWSEC2/latest/UserGuide/create-ami-with-uefi-secure-boot.html#uefi-secure-boot-optionB)。

AL2023 提供一个可以直接在 Amazon EC2 实例上使用的预构建的二进制 blob。该二进制 blob 位于正在运行的实例上的 `/usr/share/amazon-linux-sb-keys/uefi.vars` 中。此 blob 由 `amazon-linux-sb-keys` RPM 软件包提供，默认情况下从 2023.1 版本 AL2023 AMIs 开始安装。

**注意**  
为确保您使用的是最新版本的密钥和撤销，请使用您用于创建 AMI 的同一版本 AL2023 的 blob。

当您注册映像时，建议您使用设置为 `uefi` 的 [https://docs.amazonaws.cn/AWSEC2/latest/APIReference/API_RegisterImage.html](https://docs.amazonaws.cn/AWSEC2/latest/APIReference/API_RegisterImage.html) API 参数 `BootMode`。这使得您可以通过将 `TpmSupport` 参数设置为 `v2.0` 来启用 NitroTPM。此外，`BootMode` 设置为 `uefi` 可以确保启用 UEFI 安全启动，并且在切换到不支持 UEFI 的实例类型时无法意外禁用该模式。

有关 NitroTPM 的更多信息，请参阅*《Amazon EC2 用户指南》*中的 [Amazon EC2 实例的 NitroTPM](https://docs.amazonaws.cn/AWSEC2/latest/UserGuide/nitrotpm.html)。

## 撤消更新
<a name="revocation-updates"></a>

Amazon Linux 可能需要发布使用更新的密钥签名的新版引导加载程序 `grub2` 或 Linux 内核。在这种情况下，就需要撤消旧密钥，以防止以前版本的引导加载程序中的可利用漏洞绕过 UEFI 安全启动验证流程。

`grub2` 或 `kernel` 软件包的更新始终会自动将撤消列表更新到正在运行的实例的 UEFI 变量存储中。这意味着，在 UEFI 安全启动启用的情况下，您在为软件包安装安全更新后，将无法再运行该软件包的旧版本。

## UEFI 安全启动的工作原理 AL2023
<a name="shim-use"></a>

与其他 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 EC2 用户指南》*中的 [UEFI 安全启动如何与 Amazon EC2 实例配合工作](https://docs.amazonaws.cn/AWSEC2/latest/UserGuide/how-uefi-secure-boot-works.html)。

## 注册您自己的密钥
<a name="enrolling-own-keys"></a>

如上一节所述，对于 Amazon EC2 上的 UEFI 安全启动，Amazon Linux 不需要 `shim`。当你阅读其他 Linux 发行版的文档时，你可能会发现使用管理计算机所有者密钥 (MOK) 数据库的文档`mokutil`，但上 AL2023没有该文档。`shim` 和 MOK 环境解决了 UEFI 固件中对于密钥注册的一些限制，但这些限制不适用于 Amazon EC2 实施 UEFI 安全启动的方式。Amazon EC2 有一套机制可以用来轻松直接地操作 UEFI 变量存储中的密钥。

如果您想注册自己的密钥，可以通过操作现有实例内的变量存储（请参阅[从实例内部向变量存储添加密钥](https://docs.amazonaws.cn/AWSEC2/latest/UserGuide/create-ami-with-uefi-secure-boot.html#uefi-secure-boot-optionA)）或构建预填充的二进制 blob（请参阅[创建包含预填充变量存储的二进制 blob](https://docs.amazonaws.cn/AWSEC2/latest/UserGuide/create-ami-with-uefi-secure-boot.html#uefi-secure-boot-optionB)）来实现。