【已评审】支持会话最大生命周期管理

背景

基于安全要求,基于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考虑增加接口查询使能状态和超时时间

答复:当前为预埋能力,暂无使用者,暂不支持人机接口用户提示。若需提示,需要新增独立的北向接口常驻轮询,要从整体性能等方面进行分析。

预审:

  1. 关联的 issue 看不出来绝对的会话最大生命周期为什么能防 Dos 攻击?
  2. 在背景中需要说明一下必要性,如果客户/现网运维真的需要会话时间并且一直在 KeepAlive,强制中断之后会不会造成服务器脱管?

防Dos攻击主要体现在防止恶意创建多个会话达到会话上限后并持续保活,会导致后续无法创建会话;增加会话绝对超时时长也可以确保会话不会无限持续,会话token持续时间越长,被挟持攻击的概率越大。