iLO驱动程序的UEFI安全启动支持

https://blueprints.launchpad.net/ironic/+spec/uefi-secure-boot

一些Ironic部署驱动程序支持UEFI启动。对于对安全性敏感的用户来说,使用UEFI的安全启动功能进行更安全的部署将会很有用。本规范提出了在iLO驱动程序的裸机配置中支持安全启动的替代方案。

问题描述

安全启动是UEFI规范的一部分(http://www.uefi.org)。它有助于确保节点仅使用管理员/最终用户信任的软件进行启动。

安全启动与TPM(可信平台模块)不同。TPM是安全加密处理器的标准,是一种专用的微处理器,旨在通过将加密密钥集成到设备中来保护硬件。安全启动是UEFI规范的一部分,可以通过防止加载未用可接受的数字签名签名的驱动程序或操作系统加载程序来保护启动过程。

当节点以启用安全启动的方式启动时,系统固件会检查每个启动软件的签名,包括固件驱动程序(选项ROM)、引导加载程序和操作系统。如果签名有效,节点将启动,并且固件会将控制权交给操作系统。

由于他们打算在配置的节点上运行的工作负载,管理员和最终用户对裸机配置的安全性有敏感性,他们将有兴趣使用UEFI提供的安全启动功能。

一旦为节点启用了安全启动,就无法使用未签名的启动镜像进行启动。因此,如果节点要使用安全启动进行启动,则使用已签名的引导加载程序和内核非常重要。

提议的变更

准备环境

  • 操作员使用节点的capabilities属性告知Ironic。操作员可以在该节点的properties中的capabilities中添加一个新的capability secure_boot=True。这是一个可选属性,如果节点需要为安全启动配置,则可以使用它。默认行为将如同将此属性设置为False一样。未来的iLO硬件发现功能(提议)可以自动发现节点的安全启动capability,并将节点capability创建到该节点对象中。

  • 如果用户在flavor中设置了secure_boot capability,iLO驱动程序有能力使用proliantutil库调用动态地将启动模式更改为UEFI并准备节点以进行安全启动。

准备flavor以进行安全启动

  • nova flavor中的extra_specs字段应用于指示安全启动。用户需要通过将“capabilities:secure_boot=True”添加到其中来创建flavor。

  • 如果flavor中不存在“secure_boot”capability或设置为“False”,iLO驱动程序将不会执行安全启动。如果extra_spec中存在“secure_boot”,Nova调度器会将secure_boot capability作为节点选择标准之一。如果extra_spec中不存在“secure_boot”,则Nova调度器将不会将“secure_boot”capability作为节点选择标准。

  • Ironic virt Driver需要将flavor capability信息作为实例信息的一部分传递给驱动程序。将capability信息作为实例信息的一部分将有助于驱动程序适当地准备和退役节点。对于安全启动功能,实例信息应包含与secure_boot相关的capability信息。这些信息将由iLO驱动程序用于:-

    • 在配置期间,驱动程序可以打开安全启动capability以

      验证引导加载程序和内核的签名。

    • 在清理阶段的退役过程中,可以添加一个clean_step来启动清除存储在节点签名数据库中的任何签名的步骤。

准备启动和部署镜像

需要对Disk Image builder进行更改,以集成已签名的shim和grub引导加载程序。shim引导加载程序是必需的,因为它使用Microsoft UEFI CA签名进行签名,并识别相应的Linux供应商证书作为有效的证书。启用了安全启动的Proliant UEFI系统预加载了Microsoft UEFI CA签名。可以支持用户签名的镜像,但用户需要使用Proliant工具手动将他们的密钥配置到系统ROM数据库。

备选方案

数据模型影响

REST API 影响

RPC API 影响

驱动程序 API 影响

Nova 驱动程序影响

安全影响

这增强了安全性。只有正确签名的固件、引导加载程序和操作系统才能启动。它为用户提供了以最安全的方式运行他们选择的软件的机会。

其他最终用户影响

用户需要使用正确签名的部署和启动组件。目前,iLO驱动程序将支持具有shim和grub签名的Linux OS供应商的部署和启动镜像。如果用户想使用自定义签名的镜像,则他们需要使用Proliant工具手动将他们的密钥配置到UEFI。

可扩展性影响

性能影响

由于安全启动中的签名验证,没有性能影响。

其他部署者影响

用户只能使用启用安全启动的已签名镜像进行部署。如果用户想使用自定义未签名镜像进行退役,则他们需要在退役阶段的clean_step中禁用节点上的安全启动,然后再启动到这些自定义镜像。

开发人员影响

实现

负责人

主要作者和联系人。

主要负责人

Shivanand Tendulker (stendulker@gmail.com)

工作项

  1. 实现支持安全启动的代码更改。

  1. 实现安全启动iLO驱动程序。

  2. 对Nova Virt Driver进行更改,以将flavor中的capability信息作为实例信息传递。它作为以下设计规范的一部分提出。 https://review.openstack.org/136104

依赖项

  1. 需要对DIB进行更改,以使用disk-image-create和ramdisk-image-create脚本将已签名的shim和grub2添加到ubuntu云镜像创建中。

  2. 对Nova Virt驱动程序的更改,以通过实例信息将flavor中的capability信息传递给驱动程序。

测试

将为所有新添加的代码添加单元测试。

升级和向后兼容性

文档影响

将适当地记录新添加的功能。

参考资料

iLO驱动程序的发现节点属性 https://review.openstack.org/#/c/103007

支持UEFI安全启动的Ironic管理接口 https://review.openstack.org/#/c/135845