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 来启用。其他可能的值是:disabled 和 optional。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_boot 和 os_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 中。
测试¶
单元测试。
将由 Hyper-V CI 进行测试。
文档影响¶
新的镜像属性需要记录。
参考资料¶
- [1] Hyper-V 第 2 代 VM
- [2] 安全启动不支持
- [3] 安全启动支持
- Ubuntu, SUSE 在 Hyper-V 技术预览版上
https://technet.microsoft.com/en-us/library/dn765471.aspx#BKMK_linux
- [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