【已评审】支持北向接口进行内部通信管理

背景

框式设备包含管理板和节点板,管理板通过证书认证和节点板之间进行通信,框内通信使用的证书包含管理板的身份证书和节点板的CA证书。支持用户通过管理板导入框内通信身份证书和CA证书。

关联ISSUE

整体方案

为了保证证书匹配,需要约束框内通信身份证书和框内通信CA证书同时导入,导入时对两本证书做匹配校验;导入框内通信证书操作需要支持四个能力:

  1. 导出框内通信身份证书的CSR
    • rest接口导出框内通信身份证书的CSR
  2. 导入框内通信证书
    • rest接口导入框内通信身份证书和CA证书
  3. 查询框内通信对接状态
    • rest接口查询框内通信状态
  4. 向选定节点导入框内通信CA证书
    • rest接口向选定节点导入框内通信CA证书

评审点

  1. 新增资源协作路径 /bmc/kepler/Chassis/:ChassisId/Enclosure/AggregationService
    1. 新增资源协作接口 bmc.kepler.Chassis.AggregationService.CertificateService
      1. 新增导入框内通信证书方法ImportCertificate
      2. 新增导入框内通信CA证书方法ImportCACertificate
    2. 新增资源协作接口 bmc.kepler.Chassis.AggregationService.CommunicateState
      1. 新增查询框内通信状态方法GetCommunicationStates
  2. 新增rest接口 /UI/Rest/Chassis/Enclosure/AggregationService/Actions/AggregationService.ExportCSR
  3. 新增rest接口/UI/Rest/Chassis/Enclosure/AggregationService/Actions/AggregationService.ImportCertificate
  4. 新增rest接口 /UI/Rest/Chassis/Enclosure/AggregationService/OverView
  5. 新增rest接口 /UI/Rest/Chassis/Enclosure/AggregationService/Actions/AggregationService.ImportCACertificate

详细描述

评审点1:新增资源协作路径 /bmc/kepler/Chassis/:ChassisId/Enclosure/AggregationService

路径描述:新增接口用于提供管理板框内通信管理能力。
path(新增): /bmc/kepler/Chassis/:ChassisId/Enclosure/AggregationService
interface(新增): bmc.kepler.Chassis.AggregationService.CertificateService
interface(新增): bmc.kepler.Chassis.AggregationService.CommunicateState

实现接口

实现接口 实现接口描述 CSR配置影响 持久化影响 其他影响
bmc.kepler.Chassis.AggregationService.CertificateService 实现ImportCertificate方法和ImportCACertificate方法,提供框内通信证书管理功能 不涉及CSR配置,无影响 不涉及持久化,无影响 仅实现方法,属性当前暂不实现
bmc.kepler.Chassis.AggregationService.CommunicateState 实现GetCommunicationStates方法,提供框内通信状态查询能力 不涉及CSR配置,无影响 不涉及持久化,无影响 仅实现方法,属性当前暂不实现

新增方法

方法名称 请求签名 请求参数描述 响应签名 响应参数描述 方法描述 访问权限 变更影响
ImportCertificate sssbsa{ss} Type: s,文件导入类型,可以是text或URI,text表示文本内容,URI表示文件路径;配合Certificate字段和CACertificate字段使用,Type值为text时,Certificate和CACertificate是证书文本内容,Type值为URI时,Certificate和CACertificate是证书文件路径;路径包含本地路径和远程路径,本地路径要在/tmp目录下,远程路径支持https、scp、sftp、cifs、nfs协议

Certificate: s,身份证书文本内容或文件路径,和Type字段配合使用

CACertificate: s,CA证书文本内容或文件路径,和Type字段配合使用

WithEncryptedKey: b,身份证书是否携带加密私钥

Password: s,身份证书文件密码,当身份证书携带私钥且被密码保护时需要设置

Extra: a{ss},扩展信息,预留
ua{ss} TaskId: u 任务id
Extra: a{ss} 扩展信息,预留
导入框内通信证书,需要同时传入身份证书和CA证书 SecurityMgmt 新增方法,无影响
ImportCACertificate uss Slot: u,槽位号

UserName: s,节点板BMC用户的用户名

PassWord: s,节点板BMC用户的密码
u TaskId: u 任务id 向选定节点导入框内通信CA证书 SecurityMgmt 新增方法,无影响
GetCommunicationStates - - a(uss) CommunicationStates: a(uss) 节点板框内通信状态数组

Slot: u 节点槽位号

BoardName: s 节点板名

CommunicationState: s 节点通信状态
获取各节点框内通信状态 ReadOnly 新增方法,无影响

评审点2:新增Rest接口导出框内通信身份证书CSR

  • URI: /UI/Rest/Chassis/Enclosure/AggregationService/Actions/AggregationService.ExportCSR
  • 操作类型: POST
  • 变化类型: 新增接口
  • 接口说明: 生成并导出框内通信身份证书的CSR文件
  • 操作权限: SecurityMgmt
  • 输入参数:
属性 数据类型 属性说明 取值范围 约束
Country string 国家缩写 ^[A-Za-z]{2}$ 必选
State string 州/省 ^[0-9a-zA-Z_ \\-.]{0,128}$ 非必选
City string 城市 ^[0-9a-zA-Z_ \\-.]{0,128}$ 非必选
OrgName string 组织 ^[0-9a-zA-Z_ \\-.]{0,64}$ 非必选
OrgUnit string 部门 ^[0-9a-zA-Z_ \\-.]{0,64}$ 非必选
CommonName string 证书实体名称 ^[0-9a-zA-Z_ \\-.]{1,64}$ 必选
AlternativeNames array[string] 使用者可选名称 数组长度最大50,单个string的长度是0-255 非必选

ReqBody示例:

{
    "Country": "****",
    "State": "****",
	"City": "****",
	"OrgName": "****",
	"OrgUnit": "****",
    "CommonName": "OpenUBMC",
    "AlternativeNames": ["DNS:1.1.1.1","email:111@example.com","IP:1.1.1.1","URI:example.com"]
}

RspBody示例:

{
	"url": "/UI/Rest/Task/1"
}

评审点3:新增Rest接口导入框内通信证书

  • URI: /UI/Rest/Chassis/Enclosure/AggregationService/Actions/AggregationService.ImportCertificate
  • 操作类型: POST
  • 变化类型: 新增接口
  • 接口说明: 导入框内通信证书,需要同时选择身份证书和CA证书进行导入;身份证书可选带私钥证书和不带私钥的证书
  • 操作权限: SecurityMgmt
  • 输入参数:
属性 数据类型 属性说明 取值范围 约束
CertificateType string 证书类型(是否带私钥) Client/Custom 必选
Certificate string 框内通信身份证书路径 NA 必选
CACertificate string 框内通信CA证书路径 NA 必选
Password string 密码 NA,敏感信息 非必选

ReqBody示例:

{
    "CertificateType": "Custom",
    "Certificate": "/tmp/Certificate.p12",
	"CACertificate": "/tmp/CACertificate.pem",
	"Password": "****"
}

RspBody示例:

{
	"url": "/UI/Rest/Task/1"
}

评审点4:新增Rest接口查询框内节点板信息

  • URI: /UI/Rest/Chassis/Enclosure/AggregationService/OverView
  • 操作类型: GET
  • 变化类型: 新增接口
  • 接口说明: 查询框内各节点板的信息
  • 操作权限: ReadOnly
  • 响应体结构:
属性 数据类型 属性说明
Count integer 在位节点数量
Members array[object] 在位节点集合
Slot integer 节点槽位号
BoardName string 节点板名
CommunicationState string 节点板框内通信状态

RspBody示例:

{
	"Members": [
		{
			"Slot": 1,
			"BoardName": "Blade1",
			"CommunicationState": ""
		},
		...
	]
}

评审点5:新增Rest接口进行向节点板导入框内通信CA证书操作

  • URI: /UI/Rest/Chassis/Enclosure/AggregationService/Actions/AggregationService.ImportCACertificate
  • 操作类型: POST
  • 变化类型: 新增接口
  • 接口说明: 选择节点板,输入节点板用户名密码进行认证,向节点板导入框内通信CA证书
  • 操作权限: SecurityMgmt
  • 输入参数:
属性 数据类型 属性说明 取值范围 约束
Slot integer 节点槽位号 由查询时获取到的Slot号决定 必选
UserName string 节点板用户名 NA 必选
Password string 节点板密码 NA 必选

ReqBody示例:

{
    "Slot": "1",
    "UserName": "Administrator",
	"Password": "****"
}

RspBody示例:

{
	"url": "/UI/Rest/Task/1"
}

是否准备好AI预审

评审结论

同意新增接口:

  1. 新增资源协作路径 /bmc/kepler/Chassis/:ChassisId/Enclosure/AggregationService
    1. 新增资源协作接口 bmc.kepler.Chassis.AggregationService.CertificateService
      1. 新增导入框内通信证书方法ImportCertificate
      2. 新增导入框内通信CA证书方法ImportCACertificate
    2. 新增资源协作接口 bmc.kepler.Chassis.AggregationService.CommunicateState
      1. 新增查询框内通信状态方法GetCommunicationStates
  2. 新增rest接口 /UI/Rest/Chassis/Enclosure/AggregationService/Actions/AggregationService.ExportCSR
  3. 新增rest接口/UI/Rest/Chassis/Enclosure/AggregationService/Actions/AggregationService.ImportCertificate
  4. 新增rest接口 /UI/Rest/Chassis/Enclosure/AggregationService/OverView
  5. 新增rest接口 /UI/Rest/Chassis/Enclosure/AggregationService/Actions/AggregationService.ImportCACertificate

遗留问题

  1. URI类型要说明本地和远程,远程导入支持的协议
    结论:已补充
  2. 接口修改为bmc.kepler.Chassis.InterChassis.CertificateService,评审点1和评审点2合并,评审点2的表放到评审点1里
    结论:已合并
  3. path借鉴聚合服务的path
    结论:已刷新path
  4. GetCommunitionState 的响应建议改成a(uss)
    结论:已修改
  5. rest接口路径修改为: …/Actions/… .ExportCSR
    结论:已修改
  6. rest接口路径的interChassisCert也和资源树接口path一样改掉
    结论:已修改
  7. 查询节点信息的接口汇聚到一个接口里;
    聚合服务里增加查询节点信息的接口,查询聚合服务相关的信息,框内通信状态字段增加到聚合服务的Overview接口里
    结论:已刷新接口
  8. 导入CA证书操作的URi改成ImportCACertificate
    结论:已修改
  9. 补一下接口的返回:Task的URi
    结论:已补充

预审答案内容由AI生成,仅供参考:

帖子评审结论:【待评审】支持北向接口进行内部通信管理

帖子相关性:相关(Redfish 相关: 帖子内容包含相关关键字 ‘bmc’)

  • 总评审点数:9
  • MDB 资源协作接口评审点:3
  • 其他评审点:6

总体结果:不通过(1/3 个评审点通过)

评审点 1:新增资源协作接口路径 /bmc/kepler/Managers/:ManagerId/InterChassisCommunicate【MDB】

结果:不通过

  • 规则合规性检查:不通过(2/25 项失败)
    • 规则合规性失败项(必须项)
      规则ID:MDB-PROPERTY-014
      级别:必须项
      问题描述:方法请求参数的签名与描述中的类型标记不一致,且描述中的类型标记与业务语义不符。
      处理建议:1. 修正 ImportCertificate 方法请求参数 Extra 的描述类型,当前签名定义为 a{ss}(字典数组),描述中误写为 s(字符串),请修正描述以匹配签名。
  1. 修正 ImportCACertificate 方法请求参数 UserName 和 PassWord 的描述类型,当前签名定义为 s(字符串),描述中误写为 u(uint32),请修正描述以匹配签名及业务语义。

    规则ID:MDB-METHOD-016
    级别:必须项
    问题描述:方法 ImportCertificate 和 ImportCACertificate 的请求参数描述与签名不一致,Extra 参数描述为 s 类型但签名为 a{ss},UserName 和 PassWord 参数描述为 u 类型但签名为 s。
    处理建议:请修正参数描述中的类型标注,使其与签名一致:ImportCertificate 的 Extra 参数类型应为 a{ss}(字典数组),ImportCACertificate 的 UserName 和 PassWord 参数类型应为 s(字符串)。

  • 警告项(建议性)
    规则ID:MDB-RISK-004
    级别:建议性
    问题描述:涉及证书导入和凭据传递的高风险安全操作,未说明防误操作、失败恢复及审计日志策略。
    处理建议:severity=‘should’ 建议性规则,建议修改以提升规范符合性

    规则ID:MDB-INTERFACE-008
    级别:建议性
    问题描述:新增资源协作接口仅定义了方法,未提供属性定义,可能缺少状态属性或配置属性。
    处理建议:severity=‘should’ 建议性规则,建议修改以提升规范符合性

评审点 2:新增资源协作接口 bmc.kepler.Managers.InterChassisCommunicate【MDB】

结果:通过

  • 规则合规性检查:通过(25 项检查全部通过)
    • 警告项(建议性)
      规则ID:MDB-REVIEW-001
      级别:建议性
      问题描述:评审点编号不一致,帖子标题为“评审点2”,正文标题为“评审点1”,属于编号错乱。
      处理建议:severity=‘should’ 建议性规则,建议修改以提升规范符合性

      规则ID:MDB-REVIEW-003
      级别:建议性
      问题描述:评审点缺少业务背景、消费方/使用场景及变更原因说明。
      处理建议:severity=‘should’ 建议性规则,建议修改以提升规范符合性

      规则ID:MDB-RISK-004
      级别:建议性
      问题描述:涉及证书导入和密码传递的高风险方法未充分说明防误操作、失败恢复及审计策略。
      处理建议:severity=‘should’ 建议性规则,建议修改以提升规范符合性

评审点 3:新增导入框内通信证书方法ImportCertificate【MDB】

结果:不通过

  • 规则合规性检查:不通过(1/25 项失败)
    • 规则合规性失败项(必须项)
      规则ID:MDB-METHOD-016
      级别:必须项
      问题描述:方法请求签名与参数描述中的类型标注不一致,ImportCACertificate 的 UserName/PassWord 类型标注为 u 但签名为 s,ImportCertificate 的 Extra 类型标注为 s 但签名为 a{ss}
      处理建议:请修正参数描述中的类型标注,使其与请求签名一致:ImportCACertificate 的 UserName 和 PassWord 类型应标注为 s(string);ImportCertificate 的 Extra 类型应标注为 a{ss}(字典数组)