Hyper-V UEFI 安全启动

https://blueprints.launchpad.net/nova/+spec/hyper-v-uefi-secureboot

安全启动是一种机制,它仅在引导加载程序的签名保持完整时才启动引导加载程序,确保只有经过批准的组件才能运行。安全启动依赖于 UEFI。

问题描述

目前,Nova Hyper-V 驱动程序中已禁用安全启动,因为它不支持 Linux 来宾 [2],仅支持 Windows 来宾 [3]。新的 Windows / Hyper-V Server 技术预览版引入了对 Linux 来宾的安全启动支持。 [3]

用例

此功能将提高生成的实例的安全性,确保它们在启动前保持完整性。

提议的变更

为了启用实例上的安全启动,必须在创建实例的 Msvm_VirtualSystemSettingData WMI 对象时将字段 SecureBootEnabled 设置为 True。

由于并非所有来宾都支持安全启动,因此为不支持它的实例启用它会导致 VM 挂起。因此,安全启动功能将通过将 os_secure_boot 镜像属性或 os:secure_boot flavor extra spec 设置为 required 来启用。其他可能的值是:disabledoptional。flavor extra spec 值将覆盖镜像属性值。

镜像属性值为:disabled, optional, required。如果未定义该属性,则默认值 disabled 将被使用。flavor extra spec 的可接受值为:required。任何其他值都将被忽略。

Linux 来宾在 Windows / Hyper-V Server 技术预览版中受支持,它们还需要引导加载程序的数字签名。 这也将作为镜像属性 os_secure_boot_signature (字符串) 提供。

如果给定的实例需要安全启动,但它不包含 hw_machine_type=hyperv-gen2 镜像属性,则实例创建应失败,因为安全启动需要第 2 代 VM。第 2 代 VM 在 Windows / Hyper-V Server 2012 R2 中引入,并在 Kilo 版本中引入了对它们的的支持(请参阅依赖关系部分)。

调度由 ImagePropertiesFilter [5] 保证,它检查镜像属性 hypervisor_version_requires 是否满足给定主机。这是解决调度问题的初始方法。理想情况下,此问题将通过将此功能作为主机功能公开,并使 os_secure_bootos_type 镜像属性与主机功能匹配来解决。

备选方案

数据模型影响

os_secure_boot 字段必须添加到 ImageMetaProps 对象,因为没有用于同名镜像属性的字段。

REST API 影响

安全影响

此功能将确保生成的实例是安全的。

通知影响

其他最终用户影响

性能影响

其他部署者影响

镜像必须为安全启动做好准备。例如,准备镜像的 VM 必须是启用安全启动的第 2 代 VM。使用此类镜像的实例可以启用或禁用安全启动,而使用未为安全启动准备的镜像的实例只能禁用安全启动。

镜像应该是第 2 代 VM 镜像。镜像属性 hw_machine_type=hyperv-gen2 是必需的。

需要安全启动的 Linux 镜像必须在 Windows / Hyper-V Server 技术预览版上生成。为了使实例正确调度,镜像必须包含属性 hypervisor_version_requires='>=10.0'。在这种情况下,需要包含引导加载程序数字签名的镜像属性 os_secure_boot_signature (字符串)。

Nova 调度程序应使用 ImagePropertiesFilter [5],它检查主机是否满足 hypervisor_version_requires 镜像属性。为了使用此过滤器,它应添加到调度程序的 nova.conf 文件中的 scheduler_default_filters 字段。默认情况下,此过滤器包含在列表中。

为了正确使用安全启动,应该按如下方式创建镜像

  • Windows 镜像(Windows 8 或 Windows / Hyper-V Server 2012 R2 或更高版本)

    glance image-create –property hypervisor_type=hyperv

    –property hw_machine_type=hyperv-gen2 –property hypervisor_version_requires=’>=6.3’ –property os_secure_boot=required –name win-secure –disk-format vhd –container-format bare –file path/to/windows.vhdx

    或者

    glance image-update –property hw_machine_type=hyperv-gen2 win-secure

    glance image-update –property os_secure_boot=required win-secure

    glance image-update –property hypervisor_version_requires=’>=6.3’ win-secure

  • Linux 镜像

    glance image-create –property hypervisor_type=hyperv

    –property hw_machine_type=hyperv-gen2 –property hypervisor_version_requires=’>=10.0’ –property os_secure_boot=required –property os_secure_boot_signature=$SIGNATURE –name im-secure –disk-format vhd –container-format bare –file path/to/linux.vhdx

    或者

    glance image-update –property hw_machine_type=hyperv-gen2 im-secure

    glance image-update –property os_secure_boot=required im-secure

    glance image-update –property os_secure_boot_signature=$SIGNATURE im-secure

    glance image-update –property hypervisor_version_requires=’>=10.0’ im-secure

os_secure_boot 镜像属性的可接受值为:disabled, optional, required。如果未定义该属性,则 disabled 将用作默认值。optional 值表示镜像能够安全启动,但需要 flavor extra spec 才能使用此功能。

安全启动 VM 也可以作为名为 os:secure_boot 的 flavor extra spec 请求,其值为 required。示例

nova flavor-key m1.your.flavor set “os:secure_boot=required”

开发人员影响

实现

负责人

主要负责人

Claudiu Belu <cbelu@cloudbasesolutions.com>

工作项

如“拟议的变更”中所述。

依赖项

Hyper-V VM 第 2 代 nova 规范。功能合并在 Kilo 中。

https://review.openstack.org/#/c/103945/5

测试

  • 单元测试。

  • 将由 Hyper-V CI 进行测试。

文档影响

新的镜像属性需要记录。

参考资料

[1] Hyper-V 第 2 代 VM

http://blogs.technet.com/b/jhoward/archive/2013/11/04/hyper-v-generation-2-virtual-machines-part-7.aspx

[2] 安全启动不支持
[3] 安全启动支持
[4] Msvm_VirtualSystemSettingData

https://msdn.microsoft.com/en-us/library/hh850257%28v=vs.85%29.aspx

[5] Nova 调度程序 ImagePropertiesFilter

https://github.com/openstack/nova/blob/master/nova/scheduler/filters/image_props_filter.py#L75

历史