PrivilegeMap资源简介
通过PrivilegeMap,管理员用户可以获取资源与权限的映射关系。
| 属性 | 含义 |
|---|---|
| PrivilegesUsed | 权限列表 |
| Mappings | 资源与资源权限的映射关系列表 |
| Entity | 资源名称,取值源自资源的“@odata.type” |
| OperationMap | 资源与权限的映射关系 |
| ResourceURIOverrides | URI权限覆盖(一类资源中的权限有特例场景,在此补充说明) |
| PropertyOverrides | 属性权限覆盖(资源中的部分属性权限与资源的权限不一致,在此补充说明) |
Privilege为获取redfish资源与资源权限映射关系的资源,资源主体为odata.type,Mappings为权限表。
接口实现
接口配置路径为 rackmount 仓的 AccountService/PrivilegeMap/PrivilegeMap.json 文件,uri为 /Expand/AccountService/PrivilegeMap,在openUBMC获取PrivlegeMap使用接口 /redfish/v1/AccountService/PrivilegeMap
权限对应关系表
| PrivilegeMap配置权限 | 接口九大权限 | 九大权限英文名称 |
|---|---|---|
| Login | 查询功能 | ReadOnly |
| ConfigureUsers | 用户配置 | UserMgmt |
| ConfigureSelf | 配置自身 | ConfigureSelf |
| ConfigureComponents | 常规设置 | BasicSetting |
| OemPowerControl | 电源控制 | PowerMgmt |
| OemSecurityMgmt | 安全配置 | SecurityMgmt |
| OemKvm | 远程控制 | KVMMgmt |
| OemVmm | 远程媒体 | VMMMgmt |
| OemDiagnosis | 调试诊断 | DiagnoseMgmt |
资源示例:
{
"@odata.context": "/redfish/v1/$metadata#PrivilegeRegistry.PrivilegeRegistry",
"@odata.id": "/redfish/v1/AccountService/PrivilegeMap",
"@odata.type": "#PrivilegeRegistry.v1_0_0.PrivilegeRegistry",
"Id": "PrivilegeMap",
"Name": "Privilege Map Registry",
"PrivilegesUsed": [
"Login",
"ConfigureUsers",
"ConfigureSelf",
"ConfigureComponents"
],
"OEMPrivilegesUsed": [
"OemPowerControl",
"OemSecurityMgmt",
"OemKvm",
"OemVmm",
"OemDiagnosis"
],
"Mappings": [
{
"Entity": "ServiceRoot",
"OperationMap": {
"GET": [
{
"Privilege": [
"Login"
]
}
]
},
"PropertyOverrides": [
{
"Targets": [
"UUID"
],
"OperationMap": {
"GET": [
{
"Privilege": [
"Login"
]
}
],
"PATCH": [
{
"Privilege": [
"ConfigureUsers"
]
}
]
}
}
]
},
... ...
通常场景
Entity代表资源类型,OperationMap代表该资源对应的权限
例如资源ManagerCollection:
{
"@odata.context": "/redfish/v1/$metadata#ManagerCollection.ManagerCollection",
"@odata.id": "/redfish/v1/Managers",
"@odata.type": "#ManagerCollection.ManagerCollection",
"Name": "Manager Collection",
"Members@odata.count": 1,
"Members": [
{
"@odata.id": "/redfish/v1/Managers/1"
}
]
}
其需要的权限为查询功能(ReadOnly,在PrivilegeMap中为Login),其在PrivilegeMap中的配置如下
{
"Entity": "ManagerCollection",
"OperationMap": {
"GET": [
{
"Privilege": [
"Login"
]
}
]
}
},
特殊的属性
部分资源中,有特殊的属性,在PropertyOverrides中声明
例如SnmpService中,ReadOnlyCommunity和ReadWriteCommunity只有管理员才可以获取,该场景在PropertyOverrides中声明,方法如下。
{
"Entity": "HwSnmpService",
"OperationMap": {
"GET": [
{
"Privilege": [
"Login"
]
}
],
"PATCH": [
{
"Privilege": [
"ConfigureUsers"
]
}
]
},
"PropertyOverrides": [
{
... ...
},
{
"Targets": [
"ReadOnlyCommunity",
"ReadWriteCommunity"
],
"OperationMap": {
"GET": [
{
"Privilege": [
"ConfigureUsers"
]
}
],
"PATCH": [
{
"Privilege": [
"ConfigureUsers"
]
}
]
}
}
],
特殊的接口
有时候,一个资源类型中,会出现不同uri所需的权限不一致,这时需要用到ResourceURIOverrides。
例如LogEntryCollection资源中,运行日志和事件只需查询权限即可,安全日志和操作日志需要具有安全配置权限,使用ResourceURIOverrides单独声明安全日志和操作日志,方法如下:
{
"Entity": "LogEntryCollection",
"OperationMap": {
"GET": [
{
"Privilege": [
"Login"
]
}
]
},
"ResourceURIOverrides": [
{
"Targets": [
"/redfish/v1/Managers/1/LogServices/OperateLog/Entries",
"/redfish/v1/Managers/1/LogServices/SecurityLog/Entries"
],
"OperationMap": {
"GET": [
{
"Privilege": [
"OemSecurityMgmt"
]
}
]
}
}
]
},
Action接口
Action接口是执行某种操作的接口,这种接口的Uri里面有一级为Actions,并且Uri中有Actions的接口都是Action接口。
Action接口没有GET方法,其权限需要附在父资源的ResourceURIOverrides中。
例如,/redfish/v1/Managers/1/SPService/SPFWUpdate/1/Actions/SPFWUpdate.SimpleUpdate资源的父资源为/redfish/v1/Managers/1/SPService/SPFWUpdate/1,父资源类型为HwSPFWUpdate,在PrivilegeMap中如下声明:
{
"Entity": "HwSPFWUpdate",
"OperationMap": {
"GET": [
{
"Privilege": [
"Login"
]
}
]
},
"ResourceURIOverrides": [
{
"Targets": [
"/redfish/v1/Managers/1/SPService/SPFWUpdate/1/Actions/SPFWUpdate.SimpleUpdate"
],
"OperationMap": {
"POST": [
{
"Privilege": [
"ConfigureComponents"
]
}
]
}
}
]
},
新增接口属性配置PrivilegeMap
新增接口
新增接口分三种情况
- 正常资源
- Action方法
- ActionInfo(不需要单独配置)
正常资源
根据接口评审/详细设计中预期的配置,配置对应的权限
- 找到资源的Entity:在资源响应体中的@odata.type属性中,去掉版本号的内容,即为资源的Entity
- 配置对应的权限:
若资源在PrivilegeMap中已配置,且与新增接口的权限一致,则不需改动
若资源未在PrivilegeMap中配置,需要添加配置,配置内容包含Entity与OperationMap
若资源在PrivilegeMap中已配置,且与新增接口的权限不一致,则将新增接口作为特例配置在ResourceURIOverrides中,配置内容包含Targets与OperationMap,可以将相同权限的uri合并 - 若资源里有部分属性与其他属性权限不一致(GET方法与PATCH方法中),需要在PropertyOverrides进行声明,配置内容包含Targets与OperationMap,Target中的属性层级中若包含数组,则省略数组下标层级,可以将相同权限的属性合并
若响应体中为"aaa": [ { "bbb": "xxx" } ]在PropertyOverrides中配置的Target内容为"aaa/bbb"
Action方法
根据接口评审/详细设计中预期的配置,配置对应的权限
Action方法均有父资源,去掉接口uri中Actions或Oem/{{OemIdentifier}}/Actions后面的内容,前面的内容就是其父资源对应的uri
Action方法权限需要配置在父资源的ResourceURIOverrides中,配置内容包含Targets与OperationMap,可以将相同权限的uri合并
构建屏蔽
若希望在不配置PrivilegeMap的前提下进行个人构建,可以在mapper_check/MapperCheck.py文件中找到checker.check_privilege_map()进行注释,对应位置有注释说明,注释方法为直接在该行前面添加#
合入内容不允许缺失PrivilegeMap