背景
历史仅提供了对 ManagerAccount 资源通过PATCH的形式修改账户密码,该操作无法进行二次认证,与安全规范存在差异。
经分析,当前 Redfish 标准已支持在 ManagerAccount 资源下提供 ChangePassword 方法进行带二次认证的密码修改,并在 AccountService 资源中提供属性 RequireChangePasswordAction 来判断是否拦截PATCH修改账户密码的形式。
关联ISSUE
[缺陷]: Redfish通过PATCH修改账户密码无二次认证行为
整体方案
- 新增资源协作属性 RequireChangePasswordAction ,默认值false,保障新增该能力后的兼容性
- 实现 AccountService 资源下的 RequireChangePasswordAction 属性,用于设置/查询资源协作属性 RequireChangePasswordAction
- 新增 ManagerAccount 资源标准 Action:ManagerAccount.ChangePassword 接口,提供修改账户密码的能力
评审点
- 新增资源协作接口属性 RequireChangePasswordAction,代表是否要求仅可使用 ManagerAccount.ChangePassword 的方式来修改账户密码
- 新增Redfish标准属性 RequireChangePasswordAction
- 新增 ManagerAccount 资源标准 Action:/redfish/v1/AccountService/Accounts/:manager_account_id/Actions/ManagerAccount.ChangePassword
详细描述
评审点1:新增资源协作接口属性 RequireChangePasswordAction,代表是否要求仅可使用 ManagerAccount.ChangePassword 的方式来修改账户密码
path(已有):/bmc/kepler/AccountService
interface(已有):bmc.kepler.AccountService
变更类型:新增属性
| 属性名称 | 变化类型 | 签名 | 默认值 | 取值范围 | 读写&权限 | 持久化 | 变化通知 | 接口说明 | 接口约束 |
|---|---|---|---|---|---|---|---|---|---|
| RequireChangePasswordAction | 新增属性 | b | false | true、false | r:ReadOnly,w:UserMgmt | 掉电持久化 | true | 说明是否仅可通过 ManagerAccount.ChangePassword 接口来修改账户密码 |
评审点2:AccountService 资源新增标准属性 RequireChangePasswordAction
URI:/redfish/v1/AccountService
@odata.type:AccountService.v1_15_1
操作类型:GET/PATCH
变化类型:新增属性
| 属性名称 | 取值类型 | 取值范围 | 默认值 | 操作权限 | 是否频繁变化并需要屏蔽变化事件 | 约束 |
|---|---|---|---|---|---|---|
| RequireChangePasswordAction | boolean | true、false | false | GET:ReadOnly PATCH:UserMgmt |
否 |
说明: 当 RequireChangePasswordAction 属性设为 true 后,通过 PATCH ManagerAccount 资源修改用户密码时,抛出错误 AccountNotModified(已有)
错误信息:
"AccountNotModified": {
"Description": "Indicates that the modification requested for the account was not successful.",
"Message": "The account modification request failed.",
"Severity": "Warning",
"NumberOfArgs": 0,
"Resolution": "The modification may have failed due to permission issues or issues with the request body.",
"HttpStatusCode": 400,
"IpmiCompletionCode": "0xFF",
"SnmpStatusCode": 5,
"TraceDepth": 0
}
评审点3:新增 ManagerAccount 资源标准 Action 用于修改账户密码
URI: /redfish/v1/AccountService/Accounts/:manager_account_id/Actions/ManagerAccount.ChangePassword
操作类型: POST
@odata.type:ManagerAccount.v1_11_0
操作权限: ConfigureSelf
变化类型:新增方法
请求参数:
| 属性名称 | 取值类型 | 取值范围 | 默认值 | 约束 | 说明 |
|---|---|---|---|---|---|
| NewPassword | string | 最大长度512,业务中基于不同用户类型进行密码规则校验 | 无 | 必需参数 | 待设置的新密码 |
| SessionAccountPassword | string | 最大长度512 | 无 | 必需参数 | 当前会话对应账户的密码,用于二次认证 |
评审结论
通过,具体结论如下:
- 同意资源协作接口
bmc.kepler.AccountService增加资源协作属性RequireChangePasswordAction,用于判断 Redfish 是否仅可使用 ChangePassword 的 Action 来进行账户密码修改操作;属性签名为b,默认值为 false,属性支持读写,读权限为 ReadOnly,写权限为 UserMgmt,变更需要发送信号通知并且记录安全日志 - 同意 Redfish 接口
/redfish/v1/AccountService新增标准属性RequireChangePasswordAction;属性类型为 boolean,支持 GET/PATCH,GET 权限为ReadOnly,PATCH 权限为 UserMgmt;对应 schema 版本为 AccountService.v1_15_1 - 同意 Redfish 新增标准 Action
/redfish/v1/AccountService/Accounts/:manager_account_id/Actions/ManagerAccount.ChangePassword,对应 schema 版本为 ManagerAccount.v1_11_0;Action 有且仅有两个必需的参数:
(1) NewPassword,待设置的新密码,最大长度512,由业务进行复杂度等校验
(2) SessionAccountPassword,当前会话对应账户的密码,用于进行二次认证
遗留问题
无