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
框架
要安装替代软件包,请执行以下命令:
>
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
模式。要在 SUSE Linux Enterprise Server 15 SP7 中禁用 IOMMU 配置,请打开
/etc/default/grub
文件,并将iommu=nopt
添加到GRUB_CMDLINE_LINUX_DEFAULT
变量。要更新引导加载程序配置,请运行命令:
>
sudo
;update-bootloader
系统现在可以使用机密计算内核重新启动。引导加载程序中没有选择它作为默认内核,因此请确保在启动菜单中选择它。
16.4 验证安装 #
您可以验证软件包的安装和配置情况。
要验证系统是否已使用新内核启动,请查看命令
uname -r
的响应。>
sudo
uname -r
6.4.0-150616.coco15sp6-coco确保显示的内核版本包含 coco 标签。
要在内核运行时检查 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 图形用户界面。
将 virt-manager 连接到 AMD EPYC 主机并创建新虚拟机。
在“创建新虚拟机”窗口中,选择以下详细信息:
选择操作系统安装方式。
选择 ISO 或 CD-ROM 安装介质。
选择内存和 CPU 设置。
选择所需的存储详情。
在第五步中,验证详细信息并选择在安装前自定义配置。
图 16.1︰ 创建虚拟机 #单击完成。
在虚拟机配置窗口中选择“XML”选项卡。
在“XML”选项卡中,您可以编辑由
libvirt
后端使用的虚拟机 XML 配置。图 16.2︰ 虚拟机配置的 视图 #要使用 AMD SEV-SNP 保护虚拟机,请按以下所示修改
os
部分以设置正确的固件:图 16.3︰ 设置固件 #其中
loader
行将固件设置为 SEV 版本的 OVMF。添加
launchSecurity
部分。对于 AMD SEV-SNP,该部分应如下所示:图 16.4︰ launchSecurity #单击应用选项卡,然后单击细节选项卡。
在左侧列表中选择 CPU,并将 CPU 型号 设置为
host-model
:图 16.5︰ 虚拟机配置的 视图 #单击应用,然后单击开始安装。
这将启动虚拟机并根据您的设置进行安装。当上述流程完成后,虚拟机将正常启动,此时您可验证 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 环境的安全性。