背景
在虚拟化场景下,支持对Host侧里的虚拟机进行可信启动度量。
关联ISSUE
整体方案
借鉴Host启动度量实现,复用部分已有资源协作接口,新增虚拟机启动度量的资源协作接口,并通过北向Rest接口对外呈现。
评审点
资源树接口
1、新增资源协作接口呈现虚拟机信息
path(新增): /bmc/kepler/Systems/:SystemId/VirtualMachines/:VMId
interface(新增): bmc.kepler.Systems.VirtualMachine
属性(新增):Name,UUID
2、新增资源协作接口呈现虚拟机可信启动配置信息
path(新增): /bmc/kepler/Systems/:SystemId/VirtualMachines/:VMId/TPCM
interface(新增): bmc.kepler.Systems.VirtualMachine.TPCM
属性(新增):MeasureEnabled,MeasureControlAllowed
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
属性(新增):Name,UUID
| 属性名称 | 变化类型 | 签名 | 默认值 | 取值范围 | 读写&权限 | 持久化 | 变化通知 | 接口说明 |
|---|---|---|---|---|---|---|---|---|
| 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
属性(新增):MeasureEnabled,MeasureControlAllowed
| 属性名称 | 变化类型 | 签名 | 默认值 | 取值范围 | 读写&权限 | 持久化 | 变化通知 | 接口说明 |
|---|---|---|---|---|---|---|---|---|
| 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
新增属性:Name,UUID
| 属性名称 | 变化类型 | 签名 | 默认值 | 取值范围 | 读写&权限 | 持久化 | 变化通知 | 接口说明 |
|---|---|---|---|---|---|---|---|---|
| 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
新增属性:MeasureEnabled,MeasureControlAllowed
| 属性名称 | 变化类型 | 签名 | 默认值 | 取值范围 | 读写&权限 | 持久化 | 变化通知 | 接口说明 |
|---|---|---|---|---|---|---|---|---|
| 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 | 非空 | 必选 |
遗留问题
无