【待评审】storage组件相关的REST接口delete操作整改

背景

当前用于删除逻辑盘的web rest接口的操作类型为DELETE,存在安全隐患,客户希望用POST操作替代。

关联ISSUE

[需求]: REST接口delete操作整改-rackmount-AtomGit | GitCode

整体方案

删除原来用于“删除逻辑盘”的delete操作,在uri “/UI/Rest/System/Storage/:storageid/Volumes”下实现用于“删除逻辑盘”的Post操作。

业务 ACTION 原始URI 整改类型 新URI
查询逻辑盘信息 GET /UI/Rest/System/Storage/:controllerid/Volumes/:volumeid 不调整
设置逻辑盘信息 PATCH /UI/Rest/System/Storage/:controllerid/Volumes/:volumeid 不调整
创建逻辑盘 POST /UI/Rest/System/Storage/:storageid/Volumes 新增属性 属性名RequestMethod,支持删除操作
属性名VolumeIds,当RequestMethod为DELETE时支持设置
删除逻辑盘 DELETE /UI/Rest/System/Storage/:controllerid/Volumes/:volumeid 整改URI 增加url使用条件,当AllowHttpDelete为False时无法访问,为True则可以访问

详细描述

评审点4:通用硬件接口整改

相关接口:

(1)查询逻辑盘信息:/UI/Rest/System/Storage/:controllerid/Volumes/:volumeid(Get操作)
(2)设置逻辑盘信息:/UI/Rest/System/Storage/:controllerid/Volumes/:volumeid(Patch操作)
(3)创建逻辑盘:/UI/Rest/System/Storage/:storageid/Volumes(Post操作)
(4)删除逻辑盘:/UI/Rest/System/Storage/:controllerid/Volumes/:volumeid(Delete操作)

1、 变更用于“删除逻辑盘”的WebRest接口Delete操作

资源URI (已有):/UI/Rest/System/Storage/:controllerid/Volumes/:volumeid
变化类型 :变更应用场景
操作类型 :Delete
应用场景 :删除逻辑盘
操作权限 :BasicSetting
输入参数 :无

说明:该接口DELETE操作是否支持依赖于资源协作接口bmc.kepler.Managers.WebService下的AllowHttpDelete 属性:
1)无法获取AllowHttpDelete 属性(社区新版本配套旧版本SDK场景),或AllowHttpDelete 属性值为true时,支持DELETE操作。
2)AllowHttpDelete 属性值为false时,不支持DELETE操作。

2、变更用于“创建逻辑盘”的WebRest接口

资源URI(已有):/UI/Rest/System/Storage/:storageid/Volumes
变化类型:新增输入参数
操作类型:Post
应用场景:用于创建和删除逻辑盘(删除功能与原uri /UI/Rest/System/Storage/:controllerid/Volumes/:volumeid下的Delete操作一致,创建功能与原/UI/Rest/System/Storage/:storageid/Volumes下的功能一致)
操作权限:BasicSetting
输入参数

参数变更:

属性 数据类型 属性说明 取值范围 约束
VolumeIds(新增) Array(string) 要删除的逻辑盘Id数组 数组元素(要删除的逻辑盘Id)的取值范围为字符串 当RequestMethod为“POST”时为不可选,当RequestMethod为“DELETE”时为必选
RequestMethod(新增) string 操作类型,当取值为“POST”时,实现创建逻辑盘功能;当取值为“DELETE”时,实现删除逻辑盘功能 枚举值:“POST”、“DELETE”,默认值为“POST”。 可选
Drives(已有) Array(number) 物理盘Id数组 数组元素(物理盘Id)的取值范围为number 当RequestMethod为“POST”时为必选,当RequestMethod为“DELETE”时不可选
VolumeRaidLevel(已有) string RAID级别 枚举值:“RAID0”, “RAID1”,“RAID5”, “RAID6”, “RAID10”,“RAID50”,“RAID60”, “RAID1(ADM)”,“RAID10(ADM)”,“RAID1Triple”,“RAID10Triple” 当RequestMethod为“POST”时为必选,当RequestMethod为“DELETE”时不可选

ReqBody请求体示例:
创建逻辑盘:

{
    "RequestMethod": "POST",
    "Drives": [0, 1],
    "VolumeRaidLevel": "RAID0"
}

删除逻辑盘:

{
    "RequestMethod": "DELETE",
    "VolumeIds":  [“LogicalDrive238”]
}

遗留问题

1、

@luchen @changxingOpenUBMC

  1. 这里的安全隐患指的是什么安全隐患,新增了POST之后原有的安全隐患能消除吗?
  2. UIRest 接口新增 POST 接口,Redfish 接口是否需要?
  1. 客户用工具安全扫描的时候,识别到我们的web rest接口的DELETE操作有风险,要求整改成POST操作;
  2. 需求描述仅涉及web接口,不涉及redfish接口。