强制远程控制台会话超时

https://blueprints.launchpad.net/nova/+spec/enforce-remote-console-session-timeout

目前提供 VNC 控制台包含 3 个部分

1 - 用于 Nova 实例的工作控制台。

一旦在 hypervisor 中创建了 Nova 实例,hypervisor 本身就会提供一个控制台,无需在实例内部进行额外的安装(根据 nova.conf)。要访问控制台,操作员可以使用 virsh console instance-xxx,它提供一个串行控制台(字符终端访问)并提示实例登录控制台。

2 - 通过浏览器提供计算节点外部的控制台访问。

当用户创建控制台 URL 以通过 Web 浏览器访问控制台时。

$ openstack console URL show <vm>

该命令调用 Nova API,Nova API 反过来通过 RPC 与计算服务通信,后者返回一个用于连接到现有控制台的新 URL。

该命令不会创建新的控制台,而是生成一个用于连接到现有控制台的 URL。该 URL 包含用于通过代理进行身份验证的令牌。

可以使用此 URL 连接到 Nova 实例控制台。控制台令牌用于与代理进行身份验证,从而可以建立新的会话,直到令牌 TTL 过期。即使在令牌过期后,现有的会话仍将继续工作,直到 TCP 连接关闭。

3- 控制器的 Nova 代理:桥接客户端浏览器和计算节点

当用户通过浏览器连接到提供的 URL 时,Nova 代理充当中间体。它建立到 hypervisor 的 WebSocket 连接,并将控制台代理到客户端。对于 VNC 控制台,Nova 代理提供一个包含在用户浏览器中运行的 JavaScript 应用程序的 HTML 页面,从而提供 VNC 客户端体验。对于串行控制台,Nova 代理提供一个直接的 WebSocket 连接,而无需预构建的客户端,允许用户创建与其 WebSocket 交互的自己的客户端。

                            [ Nova API, Compute, virt driver ]
[client browser] <======>                                       <======> [target virtual machine]
                                [ Nova proxy ]

                              Controller Node                                 Compute Node

问题描述

目前,没有机制可以强制在控制台令牌过期时终止控制台会话。用户可以继续访问控制台,超出令牌过期时间,需要解决此行为以增强安全措施。

用例

  • 作为操作员,我希望确保使用控制台身份验证 TTL,控制台会话也会关闭,因此用户应自动从控制台断开连接。

提议的变更

实现一个定时器机制,以便在服务器端根据确切的令牌过期时间自动关闭目标套接字连接。这将中断客户端浏览器或其他应用程序上的实时控制台会话。

此外,引入一个新的 consoleauth 配置选项 enforce_session_timeout,允许操作员启用或禁用令牌过期检查。默认设置为禁用,其默认值为 False。这为基于其特定要求的现有控制台用户提供了灵活性。

备选方案

  • 客户端轮询以检查令牌是否过期。但是,由于有许多 VNC 客户端,最好在服务器端解决此问题,以确保会话超时的一致性。

数据模型影响

REST API 影响

安全影响

此更改启用了严格的控制台访问时间跨度,虽然它本身并不能提高控制台访问的安全性,但它确保用户必须在指定时间段后重新进行身份验证。

通知影响

其他最终用户影响

性能影响

其他部署者影响

将添加一个新的可选配置选项。

开发人员影响

升级影响

实现

负责人

主要负责人

auniyal

功能联络人

功能联络人

auniyal

工作项

  • 更新 Nova webproxy 代码

  • 测试

依赖项

测试

  • 功能

文档影响

  • 发布说明

参考资料

历史

修订版

发布名称

描述

2024.1 Caracal

引入