资源协作接口权限配置指导
本贴用于指导社区开发者在设计和开发资源协作接口时,如何进行权限配置。
权限介绍
openUBMC总共分为九大权限:
“UserMgmt”,“BasicSetting”,“KVMMgmt”,“VMMMgmt”,“SecurityMgmt”,“PowerMgmt”, “DiagnoseMgmt”,“ReadOnly”,“ConfigureSelf”。
九大权限说明
| 权限名称 | 权限功能 | 说明 |
|---|---|---|
| ReadOnly | 查询功能 | 除特定敏感信息或业务特殊配置的默认最低权限 |
| BasicSetting | 常规设置 | 服务器带外管理基本配置,如产品信息配置、性能监控配置、告警、事件等功能 |
| UserMgmt | 用户配置 | 用户和密码相关的配置,如用户管理、许可证管理、权限管理、恢复出厂设置 |
| PowerMgmt | 电源控制 | 服务器上下电设置 |
| SecurityMgmt | 安全配置 | 安全性的查询和配置,如操作日志、安全日志、登录规则、端口服务、一键收集日志 |
| DiagnoseMgmt | 调试诊断 | 现场定位、调试操作如传感器模拟、串口重定向记录 |
| VMMMgmt | 远程媒体 | 注销会话、虚拟媒体的挂载和使用 |
| KVMMgmt | 远程控制 | 通过HTML5集成远程控制台、独立远程控制台和VNC客户端访问服务器实时桌面、设置键盘布局、SSL加密等 |
| ConfigureSelf | 配置自身 | 可以配置帐户自身的密码以及管理SSH公钥、SNMPv3加密密码、SNMPv3加密算法和鉴权算法;预置角色默认拥有此权限;用户在首次登录强制修改密码的状态下,仅有配置自身权限 |
权限与用户角色关系
九大权限与用户角色关系如下表所示,除了自定义用户的部分权限可以被设置(需要拥有UserMgmt权限的管理员设置)外,其他角色的权限不可更改。对应到用户上,一个用户对应一个角色,即一个用户可拥有多个权限。
| 权限/角色 | 管理员 | 操作员 | 普通用户 | 自定义用户1/2/3/4 | 无权限用户 |
|---|---|---|---|---|---|
| 用户配置 UserMgmt | |||||
| 常规设置 BasicSetting | |||||
| 远程控制 KVMMgmt | 可设置 | ||||
| 远程媒体 VMMMgmt | 可设置 | ||||
| 安全配置 SecurityMgmt | 可设置 | ||||
| 电源控制 PowerMgmt | 可设置 | ||||
| 调试诊断 DiagnoseMgmt | 可设置 | ||||
| 查询功能 ReadOnly | |||||
| 配置自身 ConfigureSelf |
与redfish权限对应关系
在开发北向redfish接口时,接口对应属性的PrivilegeMap按以下表格配置:
| BMC权限名称 | Redfish PrivilegeMap配置权限 | 说明 |
|---|---|---|
| 查询功能 ReadOnly | Login | Refish 标准权限 |
| 用户配置 UserMgmt | ConfigureUsers | Refish 标准权限 |
| 配置自身ConfigureSelf | ConfigureSelf | Refish 标准权限 |
| 常规设置 BasicSetting | ConfigureComponents | Refish 标准权限 |
| 电源控制 PowerMgmt | OemPowerControl | Refish Oem权限 |
| 安全配置 SecurityMgmt | OemSecurityMgmt | Refish Oem权限 |
| 远程控制 KVMMgmt | OemKvm | Refish Oem权限 |
| 远程媒体 VMMMgmt | OemVmm | Refish Oem权限 |
| 调试诊断 DiagnoseMgmt | OemDiagnosis | Refish Oem权限 |
权限校验说明
对于一个资源树接口来说, 开发者可以赋予接口的方法、属性(读、写)指定的权限集合。当北向接口或其他组件访问这个接口的属性或方法时,上下文中的用户的权限必须满足数据模型指定的所有访问权限才允许用户进行访问。
权限模型
资源协作接口的定义和权限配置存放在每个app组件仓库的mds/model.json中,当执行bingo gen命令时会根据model.json的配置自动生成相应的业务代码。
资源协作path权限、interface权限、property/method权限间存在多重继承关系,当多个层级都配置权限时,采用局部继承全局的原则,即实际需要的权限是:
- 资源协作接口属性/方法访问权限(privilege/privilege)组合了 资源协作接口的访问权限(privilege)和 D-Bus路径访问权限(privilege),即多个权限需要同时满足
- 资源协作接口的访问权限(privilege)组合了D-Bus路径访问权限(privilege),即多个权限需要同时满足。
graph TD
A[property/method privilege] -->|extend| B[interface privilege]
B -->|extend| C[path privilege]
以下为model.json中资源协作接口的3层权限配置示例:
{
"ClassA": {
"tableName":"t_classa",
"path": "/bmc/kepler/xxx/${Id}",
"privilege": ["UserMgmt", "BasicSetting"], // path 权限配置
"interfaces":{
"bmc.kepler.IClassA":{
"privilege": ["SecurityMgmt"], // interface 权限配置
"properties":{
"PropA1": {
"privilege": { // property 权限配置
"read": ["ReadOnly"],
"write": ["ConfigureSelf"],
}
},
"methods": {
"MethodA1": {
"privilege":["UserMgmt"] // method 权限配置
}
}
}
}
}
}
配置指导
在设计资源树接口时,按以下步骤进行配置:
graph TD
A[开始] --> B[方法/属性]
B -->|方法| C[根据业务匹配九大权限对应说明,配置不同的权限]
B -->|属性| D[读/写]
D -->|写| E[是否可写]
E -->|否| F[不需要配置]
E -->|是| G[根据业务匹配九大权限对应说明,配置不同的权限]
D -->|读| H[是否敏感信息]
H -->|否| I[普通属性,默认可读]
H -->|是| J[安全配置或用户管理权限]
注:
- 资源协作接口属性是否可写
readOnly配置在mdb_interface仓库的接口定义中。 - 当一个属性只想让管理员能访问和设置时,需要使用
UserMgmt。
评审流程
在新增资源协作接口时,或变更已有资源协作接口时,需要在Interface Sig申报议题,评审通过后方可修改上库。
评审操作指导:
配置案例
- 不可写只读属性
【已评审】新增ThermalMetrics相关资源协作接口属性 - 可读可写属性