【已评审】新增资源协作和Rest接口支持虚机启动度量

背景

在虚拟化场景下,支持对Host侧里的虚拟机进行可信启动度量。

关联ISSUE

[需求]: 自主可信计算支持虚机度量

整体方案

借鉴Host启动度量实现,复用部分已有资源协作接口,新增虚拟机启动度量的资源协作接口,并通过北向Rest接口对外呈现。

评审点

资源树接口

1、新增资源协作接口呈现虚拟机信息
path(新增)/bmc/kepler/Systems/:SystemId/VirtualMachines/:VMId
interface(新增)bmc.kepler.Systems.VirtualMachine
属性(新增)NameUUID

2、新增资源协作接口呈现虚拟机可信启动配置信息
path(新增)/bmc/kepler/Systems/:SystemId/VirtualMachines/:VMId/TPCM
interface(新增)bmc.kepler.Systems.VirtualMachine.TPCM
属性(新增)MeasureEnabledMeasureControlAllowed

3、新增属性判断是否支持虚机度量及新增方法批量设置虚拟机基准值
path(已有)/bmc/kepler/Managers/:ManagerId/TPCM/Config
interface(已有)bmc.kepler.Managers.TPCM.Config
属性(新增)vTPCMSupported
方法(新增)SetStandardDigest

4、新增资源协作路径呈现虚拟机可信启动度量信息
path(新增)

  • /bmc/kepler/Systems/:SystemId/VirtualMachines/:VMId/TPCM/Measured/BIOS
  • /bmc/kepler/Systems/:SystemId/VirtualMachines/:VMId/TPCM/Measured/SHIM
  • /bmc/kepler/Systems/:SystemId/VirtualMachines/:VMId/TPCM/Measured/GRUB
  • /bmc/kepler/Systems/:SystemId/VirtualMachines/:VMId/TPCM/Measured/OSCfg
  • /bmc/kepler/Systems/:SystemId/VirtualMachines/:VMId/TPCM/Measured/OSKernel
  • /bmc/kepler/Systems/:SystemId/VirtualMachines/:VMId/TPCM/Measured/OSInitrd

interface(已有): bmc.kepler.Managers.TPCM.Measured

REST接口

新增REST接口获取虚拟机信息、可信启动配置信息及更新度量开关/控制策略、度量对象基准值

  • GET: /UI/Rest/TrustedComputing/VirtualMachines
  • POST: /UI/Rest/TrustedComputing/VirtualMachines/:VMId
  • POST: /UI/Rest/TrustedComputing/TPCM/SetStandardDigest

详细信息

资源树接口

1、新增资源协作接口呈现虚拟机信息
path(新增)/bmc/kepler/Systems/:SystemId/VirtualMachines/:VMId
interface(新增)bmc.kepler.Systems.VirtualMachine
属性(新增)NameUUID

属性名称 变化类型 签名 默认值 取值范围 读写&权限 持久化 变化通知 接口说明
Name 新增属性 s 长度1-1024 只读-ReadOnly 掉电持久化 false 虚机名称
UUID 新增属性 s 长度36 只读-ReadOnly 掉电持久化 false 虚机UUID,
Pattern: ^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$

2、新增资源协作接口呈现虚拟机可信启动配置信息
path(新增)/bmc/kepler/Systems/:SystemId/VirtualMachines/:VMId/TPCM
interface(新增)bmc.kepler.Systems.VirtualMachine.TPCM
属性(新增)MeasureEnabledMeasureControlAllowed

属性名称 变化类型 签名 默认值 取值范围 读写&权限 持久化 变化通知 接口说明
MeasureEnabled 新增属性 b true true, false 读写,读:ReadOnly
写:UserMgmt
掉电持久化 true 度量开关,是否在虚机启动过程中进行度量
MeasureControlAllowed 新增属性 b false true, false 读写,读:ReadOnly
写:UserMgmt
掉电持久化 true 控制策略,是否允许在度量不一致时启动虚机

3、新增属性判断是否支持虚机度量及新增方法批量设置基准值
path(已有)/bmc/kepler/Managers/:ManagerId/TPCM/Config
interface(已有)bmc.kepler.Managers.TPCM.Config
方法(新增)SetStandardDigest
属性(新增)vTPCMSupported

新增方法

项目 说明
方法名 SetStandardDigest
方法描述 设置度量对象基准值
权限 UserMgmt
请求签名 yasss
请求说明 HostingSystemId - 宿主机Id
VMIds - 虚拟机Id列表
MeasureObject - 度量对象为字符串枚举(Bios、Shim、Grub、Grub.Cfg、Kernel、Initrd)
StandardDigest - 度量对象基准值,Pattern: ^[0-9a-fA-F]{64}$
响应签名
响应说明

新增属性

属性名称 变化类型 签名 默认值 取值范围 读写&权限 持久化 变化通知 接口说明
vTPCMSupported 新增属性 b false true, false 只读,读:ReadOnly 不持久化 false 是否支持vTPCM

4、复用资源协作接口呈现虚拟机可信启动度量信息
path(新增)

  • /bmc/kepler/Systems/:SystemId/VirtualMachines/:VMId/TPCM/Measured/BIOS
  • /bmc/kepler/Systems/:SystemId/VirtualMachines/:VMId/TPCM/Measured/SHIM
  • /bmc/kepler/Systems/:SystemId/VirtualMachines/:VMId/TPCM/Measured/GRUB
  • /bmc/kepler/Systems/:SystemId/VirtualMachines/:VMId/TPCM/Measured/OSCfg
  • /bmc/kepler/Systems/:SystemId/VirtualMachines/:VMId/TPCM/Measured/OSKernel
  • /bmc/kepler/Systems/:SystemId/VirtualMachines/:VMId/TPCM/Measured/OSInitrd

interface(已有): bmc.kepler.Managers.TPCM.Measured

REST接口

1、新增REST接口获取及设置虚拟机启动度量信息

  • URI:/UI/Rest/TrustedComputing/VirtualMachines
  • 操作类型: GET
  • 变化类型: 新增接口
  • 接口说明:获取所有虚拟机配置及启动度量信息

RspBody响应体结构:

属性 属性说明 数据类型
Count 虚拟机个数 integer
VirtualMachines [{ 虚拟机集合 array (object)
  Name 虚拟机名称 string
  Id 虚拟机Id string
  UUID 虚拟机UUID string
  MeasureEnabled 度量开关 boolean
  MeasureControlAllowed 控制开关 boolean
  HostingSystemId 宿主机Id integer
  Components [{ 启动度量对象集合 array
    MeasuredObject 度量对象名称 string
    Version 度量对象版本号 string
    ActualDigest 实际度量值(杂凑) string
    StandardDigest 基准值(杂凑) string
    vPCR 平台状态寄存器 string
    IsMatch 度量值与实际值是否一致 boolean
  }]
}]

RspBody响应体示例:

{
    "Count": 3,
    "VirtualMachines": [
        {
            "Name": "VM-01",
            "Id": "xxxxxxxxx",
            "UUID": "123e4567-e89b-12d3-a456-426614174000",
            "MeasureEnabled": true,
            "MeasureControlAllowed": false,
            "HostingSystemId": 1,
            "Components": [
                {
                    "Version": "21.17(U75)",
                    "IsMatch": true,
                    "MeasuredObject": "Bios",
                    "vPCR": "vPCR[0]",
                    "StandardDigest": "69c*****618",
                    "ActualDigest": "69c*****618"
                },
                ...
            ]
        },
        ....
    ]
}

  • URI:/UI/Rest/TrustedComputing/VirtualMachines/:VMId
  • 操作类型: POST
  • 变化类型: 新增接口
  • 接口说明:设置单个虚拟机启动度量配置

ReqBody请求体结构:

属性 数据类型 属性说明 取值范围 约束
HostingSystemId integer 宿主机Id 由实际查询得到的主机Id决定 必选
MeasureEnabledd boolean 度量开关 true,false 非必选
MeasureControlAllowed boolean 控制开关 true,false 非必选
ReauthKey string 二次认证key 非空 必选

ReqBody请求体示例:

{
    "HostingSystemId": 1,
    "MeasureEnabled": true,
    "MeasureControlAllowed": true,
    "ReauthKey": "xxgaxxxxxx"
}

  • URI:/UI/Rest/TrustedComputing/TPCM/SetStandardDigest
  • 操作类型: POST
  • 变化类型: 新增接口
  • 接口说明: 批量设置虚拟机启动度量基准值

ReqBody请求体结构:

属性 属性说明 数据类型 约束
HostingSystemId 宿主机Id integer 必选
VMIds 虚拟机Id集合 array[string] 必选,长度不为0
MeasuredObject 度量对象 string 必选,枚举值之一:Bios、Shim、Grub、Grub.Cfg、Kernel、Initrd
StandardDigest 度量基准值 string 必选,^[0-9a-f]{64}$
ReauthKey 二次认证key string 必选

ReqBody请求体示例:

{
    "HostingSystemId": 1,
    "VMIds": ["xxxxxxxx"],
    "MeasuredObject": "Bios",
    "StandardDigest": "xxxxxxxxxx",
    "ReauthKey": "xxgaxxxxxx"
}

评审结论

一、 同意新增以下资源树接口和属性

1、同意新增资源协作接口呈现虚拟机信息
新增path:/bmc/kepler/Systems/:SystemId/VirtualMachines/:VMId
新增interface:bmc.kepler.Systems.VirtualMachine
新增属性:NameUUID

属性名称 变化类型 签名 默认值 取值范围 读写&权限 持久化 变化通知 接口说明
Name 新增属性 s 长度1-1024 只读,读权限:ReadOnly 掉电持久化 false 虚机名称
UUID 新增属性 s 长度36 只读,读权限:ReadOnly 掉电持久化 false 虚机UUID,
Pattern: ^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$

2、同意新增资源协作接口呈现虚拟机可信启动配置信息
新增path:/bmc/kepler/Systems/:SystemId/VirtualMachines/:VMId/TPCM
新增interface:bmc.kepler.Systems.VirtualMachine.TPCM
新增属性:MeasureEnabledMeasureControlAllowed

属性名称 变化类型 签名 默认值 取值范围 读写&权限 持久化 变化通知 接口说明
MeasureEnabled 新增属性 b true true, false 读写,读:ReadOnly
写:UserMgmt
掉电持久化 true 度量开关,是否在虚机启动过程中进行度量
MeasureControlAllowed 新增属性 b false true, false 读写,读:ReadOnly
写:UserMgmt
掉电持久化 true 控制策略,是否允许在度量不一致时启动虚机

3、同意在接口bmc.kepler.Managers.TPCM.Config下新增属性vTPCMSupported判断是否支持虚机度量,新增方法SetStandardDigest批量设置虚拟机基准值。

新增属性

属性名称 变化类型 签名 默认值 取值范围 读写&权限 持久化 变化通知 接口说明
vTPCMSupported 新增属性 b false true, false 只读,读:ReadOnly 不持久化 false 是否支持vTPCM

新增方法

项目 说明
方法名 SetStandardDigest
方法描述 设置度量对象基准值
权限 UserMgmt
请求签名 yasss
请求说明 HostingSystemId - 宿主机Id,签名为y
VMIds - 虚拟机Id列表,签名为as
MeasureObject - 度量对象,签名为s,取值范围:Bios、Shim、Grub、Grub.Cfg、Kernel、Initrd
StandardDigest - 度量对象基准值,签名为s,Pattern: ^[0-9a-fA-F]{64}$
响应签名
响应说明

4、同意新增以下资源协作路径并复用bmc.kepler.Managers.TPCM.Measured接口,呈现虚拟机可信启动度量信息:

  • /bmc/kepler/Systems/:SystemId/VirtualMachines/:VMId/TPCM/Measured/BIOS
  • /bmc/kepler/Systems/:SystemId/VirtualMachines/:VMId/TPCM/Measured/SHIM
  • /bmc/kepler/Systems/:SystemId/VirtualMachines/:VMId/TPCM/Measured/GRUB
  • /bmc/kepler/Systems/:SystemId/VirtualMachines/:VMId/TPCM/Measured/OSCfg
  • /bmc/kepler/Systems/:SystemId/VirtualMachines/:VMId/TPCM/Measured/OSKernel
  • /bmc/kepler/Systems/:SystemId/VirtualMachines/:VMId/TPCM/Measured/OSInitrd

二、同意新增以下webrest接口

1、同意新增接口获取虚拟机信息和可信启动配置信息
URL:/UI/Rest/TrustedComputing/VirtualMachines
操作类型:GET
权限:ReadOnly
响应体:

属性 属性说明 数据类型
Count 虚拟机个数 integer
VirtualMachines [{ 虚拟机集合 array (object)
  Name 虚拟机名称 string
  Id 虚拟机Id string
  UUID 虚拟机UUID string
  MeasureEnabled 度量开关 boolean
  MeasureControlAllowed 控制开关 boolean
  HostingSystemId 宿主机Id integer
  Components [{ 启动度量对象集合 array
    MeasuredObject 度量对象名称 string
    Version 度量对象版本号 string
    ActualDigest 实际度量值(杂凑) string
    StandardDigest 基准值(杂凑) string
    vPCR 平台状态寄存器 string
    IsMatch 度量值与实际值是否一致 boolean
  }]
}]

2、同意新增接口更新度量开关/控制策略
URL:/UI/Rest/TrustedComputing/VirtualMachines/:VMId
操作类型:POST
权限:UserMgmt
请求体:

属性 数据类型 属性说明 取值范围 约束
HostingSystemId integer 宿主机Id 由实际查询得到的主机Id决定 必选
MeasureEnabledd boolean 度量开关 true,false 非必选
MeasureControlAllowed boolean 控制开关 true,false 非必选
ReauthKey string 二次认证key 非空 必选

3、同意新增接口度量对象基准值
URL: /UI/Rest/TrustedComputing/TPCM/SetStandardDigest
操作类型:POST
权限:UserMgmt
请求体:

属性 数据类型 属性说明 取值范围 约束
HostingSystemId integer 宿主机Id 由实际查询到的主机Id决定 必选
VMIds array(元素类型string) 虚拟机Id集合 由实际查询到的虚拟机Id决定 必选
MeasuredObject string 度量对象 Bios、Shim、Grub、Grub.Cfg、Kernel、Initrd 必选
StandardDigest string 度量基准值 ^[0-9a-zA-F]{64}$ 必选
ReauthKey string 二次认证key 非空 必选

遗留问题