documentation.suse.com / SUSE Linux Enterprise Server 文档 / 虚拟化指南 / 使用 libvirt 管理虚拟机 / 使用 AMD SEV-SNP 增强虚拟机安全性
适用范围 SUSE Linux Enterprise Server 15 SP7

16 使用 AMD SEV-SNP 增强虚拟机安全性

您可以通过 AMD 安全加密虚拟化-安全嵌套分页 (SEV-SNP) 增强虚拟机的安全性。AMD SEV-SNP 功能可将虚拟机与主机系统及其他 VM 隔离,保护数据和代码。该功能会对数据进行加密,并确保能检测或跟踪 VM 中代码和数据的任何更改。由于这种做法会隔离 VM,因此其他 VM 或主机不会受到威胁影响。

本章介绍在搭载 SUSE Linux Enterprise Server 15 SP7 系统的 AMD EPYC 服务器上,启用并使用 AMD SEV-SNP 的具体步骤。

16.1 支持的硬件

运行 AMD SEV-SNP 虚拟机需要配备 AMD EPYC(第 3 代或更新版本)的系统。AMD 计算机的 BIOS 必须提供相应选项以启用平台的机密计算支持。

16.2 启用机密计算模块

AMD SEV-SNP 功能所需的软件包通过机密计算模块提供。您必须在系统安装时或之后通过 SUSEConnect 命令行工具启用该模块。

  • 要检查模块是否已启用,请运行以下命令:

     > sudo  suseconnect -l

    这将显示可用模块列表及其激活状态,以及启用非活动模块所需的命令。

    非活动的机密计算模块将显示如下:

    Confidential Computing Technical Preview Module 15 SP6 x86_64
    Activate with: suseconnect -p sle-module-confidential-computing/15.6/x86_64
  • 要启用机密计算模块技术预览,请运行以下命令:

     > sudo  suseconnect -p sle-module-confidential-computing/15.6/x86_64
    Registering system to SUSE Customer Center
    Updating system details on https://scc.suse.com ...
    Activating sle-module-confidential-computing 15.6 x86_64 ...
    Adding service to system ...
    Installing release package ...
    Successfully registered system

    机密计算模块已启用,您现在可以安装软件包。

16.3 安装软件包并配置基础系统

机密计算模块提供了支持 AMD SEV-SNP 的替代软件包。为了确保最大程度的兼容性,这些软件包基于 SUSE Linux Enterprise Server 15 SP7 的代码流。

需要替换的三个组件包括:

  • Linux 内核

  • QEMU 虚拟机监视程序

  • libvirt 框架

  1. 要安装替代软件包,请执行以下命令:

    > sudo  zypper install --from SLE-Module-Confidential-Computing-15-SP6-Pool --from SLE-Module-Confidential-Computing-15-SP6-Updates qemu-ovmf-x86_64 libvirt kernel-coco

    替换软件包后,必须通过配置更改来设置系统,以使 AMD SEV-SNP 功能处于可用状态。主机端的 IOMMU 必须配置为非直通模式。这是为了防止外围设备写入属于加密 Guest 的内存,从而破坏其数据完整性。SUSE Linux Enterprise Server 15 SP7 中的默认 IOMMU 配置为 passthrough 模式。

  2. 要在 SUSE Linux Enterprise Server 15 SP7 中禁用 IOMMU 配置,请打开 /etc/default/grub 文件,并将 iommu=nopt 添加到 GRUB_CMDLINE_LINUX_DEFAULT 变量。

  3. 要更新引导加载程序配置,请运行命令:

    > sudo ; update-bootloader
  4. 系统现在可以使用机密计算内核重新启动。引导加载程序中没有选择它作为默认内核,因此请确保在启动菜单中选择它。

16.4 验证安装

您可以验证软件包的安装和配置情况。

  1. 要验证系统是否已使用新内核启动,请查看命令 uname -r 的响应。

    > sudo  uname -r 6.4.0-150616.coco15sp6-coco

    确保显示的内核版本包含 coco 标签。

  2. 要在内核运行时检查 AMD 安全处理器的初始化结果,请运行以下命令查看内核日志:

    > sudo  dmesg | grep -i ccp
    [ 10.103166] ccp 0000:42:00.1: enabling device (0000 -> 0002)
    [ 10.114951] ccp 0000:42:00.1: no command queues available
    [ 10.127137] ccp 0000:42:00.1: sev enabled
    [ 10.133152] ccp 0000:42:00.1: psp enabled
    [ 10.240817] ccp 0000:42:00.1: SEV firmware update successful
    [ 11.128307] ccp 0000:42:00.1: SEV API:1.55 build:8
    [ 11.135057] ccp 0000:42:00.1: SEV-SNP API:1.55 build:8

    出现 SEV-SNP API 版本的相关消息表示 AMD 安全处理器已成功初始化。有时,内核日志中不显示这些消息。这种情况下,通常是由于 BIOS 设置或 IOMMU 配置的问题。

16.5 启动 AMD SEV-SNP 虚拟机

在机密计算内核启动且 AMD 安全处理器初始化完成后,您可以使用 libvirt 框架运行受 AMD SEV-SNP 保护的虚拟机。

libvirt 提供了多种设置新虚拟机的方法。本文档使用预先准备好的磁盘映像和 virt-manager 图形用户界面。

  1. 将 virt-manager 连接到 AMD EPYC 主机并创建新虚拟机。

  2. 在“创建新虚拟机”窗口中,选择以下详细信息:

    • 选择操作系统安装方式。

    • 选择 ISO 或 CD-ROM 安装介质。

    • 选择内存和 CPU 设置。

    • 选择所需的存储详情。

  3. 在第五步中,验证详细信息并选择在安装前自定义配置

    选择“在安装前自定义配置”
    图 16.1︰ 创建虚拟机
  4. 单击完成

  5. 在虚拟机配置窗口中选择“XML”选项卡。

    在“XML”选项卡中,您可以编辑由 libvirt 后端使用的虚拟机 XML 配置。

    单击“XML”选项卡
    图 16.2︰ 虚拟机配置的 XML 视图
  6. 要使用 AMD SEV-SNP 保护虚拟机,请按以下所示修改 os 部分以设置正确的固件:

    设置固件
    图 16.3︰ 设置固件

    其中 loader 行将固件设置为 SEV 版本的 OVMF。

  7. 添加 launchSecurity 部分。对于 AMD SEV-SNP,该部分应如下所示:

    添加 launchSecurity
    图 16.4︰ launchSecurity
  8. 单击应用选项卡,然后单击细节选项卡。

  9. 在左侧列表中选择 CPU,并将 CPU 型号 设置为 host-model

    选择 CPU 型号
    图 16.5︰ 虚拟机配置的详情视图
  10. 单击应用,然后单击开始安装

    这将启动虚拟机并根据您的设置进行安装。当上述流程完成后,虚拟机将正常启动,此时您可验证 AMD SEV-SNP 保护是否生效。

16.6 验证 AMD SEV-SNP 虚拟机

从虚拟机的外观来看,无法判断它是否在机密计算环境中运行。但可以通过以下几种方式从虚拟机内部进行验证。

要检查内核日志,请运行以下命令:

> sudo  dmesg | grep -i sev-snp
[ 1.986186] Memory Encryption Features active: AMD SEV SEV-ES SEV-SNP

内核日志中显示的 SEV-SNP 功能及其他活动内存加密特性,表明该虚拟机已启用此功能。

此外,还可以通过加密安全的方法验证 AMD SEV-SNP 环境的安全性。

Documentation survey