Redfish PrivilegeMap配置说明

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(不需要单独配置)

正常资源

根据接口评审/详细设计中预期的配置,配置对应的权限

  1. 找到资源的Entity:在资源响应体中的@odata.type属性中,去掉版本号的内容,即为资源的Entity
  2. 配置对应的权限:
    若资源在PrivilegeMap中已配置,且与新增接口的权限一致,则不需改动
    若资源未在PrivilegeMap中配置,需要添加配置,配置内容包含Entity与OperationMap
    若资源在PrivilegeMap中已配置,且与新增接口的权限不一致,则将新增接口作为特例配置在ResourceURIOverrides中,配置内容包含Targets与OperationMap,可以将相同权限的uri合并
  3. 若资源里有部分属性与其他属性权限不一致(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