背景
基于安全要求,基于Session的会话管理需要有固定的绝对超时时长限制,会话创建超过该时长后,不管会话是否是活跃的,系统都会将该会话进行销毁。
当前会话仅实现了不活跃超时时长,若会话持续保活,会存在会话存在时间无限期延长的情况,遂需要增加配置对会话的最大可用时间进行限制。
关联ISSUE
整体方案
对于Web、Redfish、Ssh、Sftp等长会话场景,增加提供会话绝对超时的使能开关与绝对超时时长配置,当打开使能后,结合会话的创建时间进行超时检查,若会话创建已超过绝对超时时长,无论该会话是否处于活跃状态,均会将该会话超时踢出。
若已有纳管服务器通过持续保活的形式持续长期使用会话,为避免会话绝对超时导致会话强制中断并影响原有纳管业务行为,会话绝对超时使能默认关闭。
当会话存在超过绝对超时时长后,会话被踢出,后续再使用该token访问会返回错误信息 SessionTimeout。
评审点
1、资源协作接口 bmc.kepler.SessionService.Sessions 新增属性 AbsoluteSessionTimeoutEnabled、AbsoluteSessionTimeout
2、redfish 接口 /redfish/v1/SessionService 新增标准属性 AbsoluteSessionTimeoutEnabled、AbsoluteSessionTimeout
3、新增配置导入导出项 Session/AbsoluteSessionTimeoutEnabled、Session/AbsoluteSessionTimeout
详细描述
评审点1:变更资源协作接口 bmc.kepler.SessionService.Sessions
- 场景1:变更资源协作接口 bmc.kepler.SessionService.Sessions
变更描述:接口承载会话管理服务的相关功能,新增属性 AbsoluteSessionTimeoutEnabled、AbsoluteSessionTimeout 用于对所有会话的绝对超时行为管理,同属于会话管理服务功能的一部分。
接口链接:bmc.kepler.SessionService.Sessions 接口定义
| 变更类型 | 属性名称 | 签名 | 只读 | 变化通知 | 属性描述 | 访问权限 | 属性来源 | 持久化类型 | 变更影响 |
|---|---|---|---|---|---|---|---|---|---|
| 新增 | AbsoluteSessionTimeoutEnabled | b | False | True | 是否使用 AbsoluteSessionTimeout 代表的时长限制会话的最大生命周期。 当使能打开后,会基于每个会话的创建时间与当前时间进行比较,若会话创建已超过绝对超时时长,会将该会话超时踢出。 默认值:false |
Read:ReadOnly Write:BasicSetting |
掉电持久化 | 无影响 | |
| 新增 | AbsoluteSessionTimeout | u | False | True | 会话可保持打开状态的最长时间,单位:秒 默认值:86400 取值范围:30 ~ 86400 |
Read:ReadOnly Write:BasicSetting |
掉电持久化 | 无影响 |
评审点2:变更 redfish 接口 /redfish/v1/SessionService
- 场景1:变更 redfish 接口 /redfish/v1/SessionService,新增 SessionService 标准资源 AbsoluteSessionTimeoutEnabled、AbsoluteSessionTimeout
资源URI:/redfish/v1/SessionService
资源版本:SessionService.v1_2_0
Required属性:“@odata.idodata.idodata.idodata.idodata.idodata.idodata.idodata.id”、“@odata.type”、“Id”、“Name”
嵌套资源:SessionService 资源嵌套于 ServiceRoot 资源中
Link资源:不涉及
属性列表:
| 属性名 | 类型 | 示例/取值约束 | readonly | 易变属性 | 实现PATCH | 操作权限 | 描述 |
|---|---|---|---|---|---|---|---|
| AbsoluteSessionTimeoutEnabled | boolean | true/false | false | 否 | 是 | BasicSetting | 指示是否对会话应用绝对会话超时时间 |
| AbsoluteSessionTimeout | integer | 30 ~ 86400 | false | 否 | 是 | BasicSetting | 会话在服务关闭该会话之前保持打开状态的最长时间(秒),无论是否活跃 |
评审点3:新增配置导入导出项
- 场景1:新增配置导入导出项
| 配置项名称 | 配置项类别 | 配置项 | 归属组件 | 取值说明 | 默认值 | 导入导出类型 | 导出后是否可直接导入(无修改) |
|---|---|---|---|---|---|---|---|
| 会话绝对超时使能 | Session | AbsoluteSessionTimeoutEnabled | iam | boolean | false | ImportAndExport | 是 |
| 会话绝对超时时长 | Session | AbsoluteSessionTimeout | iam | integer 取值范围:30~86400 |
86400 | ImportAndExport | 是 |
示例:
{
....,
"ConfiData": {
"type": "object",
"properties": {
....,
"Session": {
"type": "object",
"properties": {
....,
"AbsoluteSessionTimeoutEnabled": {
"type": "boolean",
"Import": "true",
"AttributeType": "ImportAndExport",
"description": "指示是否对会话应用绝对会话超时时间"
},
"AbsoluteSessionTimeout": {
"type": "integer",
"Import": "true",
"minimum": 30,
"maximum": 86400,
"AttributeType": "ImportAndExport",
"description": "会话在服务关闭该会话之前保持打开状态的最长时间(秒),无论是否活跃"
}
}
}
}
}
}
评审结论
1、同意在资源协作接口 bmc.kepler.SessionService.Sessions 下新增属性 AbsoluteSessionTimeoutEnabled、AbsoluteSessionTimeout,用于管理会话的绝对超时能力
属性:
- AbsoluteSessionTimeoutEnabled,签名为b,读写权限:Read:ReadOnly、Write:BasicSetting,默认值:false。通过本使能可控制是否应用会话绝对超时能力,打开使能后,会基于会话创建时间与当前时间进行比较判断,达到绝对超时时长后踢出会话。
- AbsoluteSessionTimeout,签名为u,读写权限:Read:ReadOnly、Write:BasicSetting,单位:秒,取值范围:30~86400,默认值:86400。代表会话绝对超时时长。若绝对超时使能打开,会话无论是否活跃,从创建开始达到该时长后会被系统踢出。
2、同意redfish SessionService 资源新增标准属性 AbsoluteSessionTimeoutEnabled、AbsoluteSessionTimeout
属性说明:
- AbsoluteSessionTimeoutEnabled,属性类型:boolean,可通过PATCH方法修改。
- AbsoluteSessionTimeout,属性类型:integer,取值范围:30~86400,可通过PATCH方法修改。
3、同意新增配置导入导出项 iam/Session/AbsoluteSessionTimeoutEnabled、iam/Session/AbsoluteSessionTimeout
属性说明:
- iam/Session/AbsoluteSessionTimeoutEnabled,取值类型:boolean,默认值:false,可导入导出,可在导出后直接导入。
- iam/Session/AbsoluteSessionTimeout,取值类型:integer,单位:秒,取值范围:30~86400,默认值:86400,可导入导出,可在导出后直接导入。
遗留问题
1、人机接口在会话超时时需要考虑增加用户提示,webui考虑增加接口查询使能状态和超时时间
答复:当前为预埋能力,暂无使用者,暂不支持人机接口用户提示。若需提示,需要新增独立的北向接口常驻轮询,要从整体性能等方面进行分析。