尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Teleport RFD 0093 深度解析:Auth 离线时如何保障 `tsh ssh` 对节点的稳健访问

Teleport RFD 0093 深度解析:Auth 离线时如何保障 `tsh ssh` 对节点的稳健访问 网络安全认证鉴权运维后端【免费下载链接】teleportThe easiest, and most secure way to access and protect all of your infrastructure.项目地址https://gitcode.com/gh_mirrors/tel/teleport点击查看免费下载导读本篇文章围绕 Teleport 开源仓库中的设计文档 RFD 0093 - Robust Access to Nodes离线访问展开探讨在 Auth 服务器间歇性不可用或完全离线时用户如何仍然能够通过tsh ssh访问节点。文章先系统梳理必须依赖 Auth 连接与无需 Auth 连接两类场景的边界再深入tsh、Node 侧会话跟踪器SessionTracker与 MFA 判定链路的源码实现说明设计提案如何在保证安全审计的前提下把 Auth 从连接路径中摘除。读完本文你将掌握 Teleport 离线访问能力的适用范围、底层调用链IsMFARequired与CreateSessionTracker以及该能力在 Connect 中的自动继承机制。背景为什么要把 Auth 从连接路径中摘除在 Teleport 的经典访问模型中Auth 服务器承担着证书签发、RBAC 校验、MFA 认证、会话跟踪等关键职责。一旦 Auth 不可用用户即使已经通过tsh login拿到了有效证书也可能无法访问任何资源——因为连接路径上的多个环节都需要与 Auth 通信。RFD 0093 指出Auth 连接性是一个单点故障源。最典型的场景是集群管理员执行 Auth 升级升级期间存在潜在停机窗口若升级后发现问题需要回滚停机时间还会进一步拉长。如果一个用户此前已经获得有效证书那么在部分配置场景下访问节点时不应强制要求再次连接 Auth。这正是本 RFD 想要解决的核心问题。需要强调的是本 RFD 属于draft草案状态见 rfd/0093-offline-access.md 头部 front-matter本文介绍的若干提案属于设计方向其中部分机制如IsMFARequired前置检查在当前仓库代码中仍然存在阅读时需注意区分现状与提案。必须依赖 Auth 连接的场景基于标签的tsh sshtsh ssh userfoobar当使用标签选择节点时tsh需要向 Auth 服务器发起proto.AuthService/ListResources请求由 Auth 解析出所有匹配foobar标签的节点集合tsh才能据此确定连接目标。一旦与 Auth 断开连接节点解析便无法完成因此该场景必须依赖 Auth。Sync 录制模式proxy-sync与node-syncTeleport 的会话录制模式定义在 api/types/constants.go 中nodeRecordAtNode默认会话在节点录制proxyRecordAtProxy代理拦截并录制offRecordOff完全关闭录制node-syncRecordAtNodeSync节点以同步模式流式上传录制proxy-syncRecordAtProxySync录制代理以同步模式流式上传录制。其中proxy-sync与node-sync两种模式需要与 Auth 保持持久连接以上传会话录制。因此即使tsh ssh本身不需要连接 Auth只要录制无法启动会话也无法创建最终仍会阻止与节点的连接建立。也就是说会话录制模式是离线访问的硬性门槛之一。Per-Session MFA每会话 MFA当在集群级或角色级启用了 per-session MFA 时每次会话都需要与 Auth 服务器完成 MFA 仪式。tsh无法在离线状态下独立完成该仪式因此不可能在没有 Auth 连接的情况下访问资源。RFD 0093 还指出一个未来改进方向根据 RFD 80硬件密钥支持中的配置当把require_session_mfa设置为hardware_key_touch时MFA 仪式不再依赖 Auth 服务器——PIV 中存储的密钥只需一次 PIV 触控即可满足 per-session MFA 要求。这一能力落地后离线 per-session MFA 的场景将成为可能。在当前仓库的角色校验逻辑中require_session_mfa对应的 MFA 验证仍是强制前置步骤见 lib/services/role.go 附近对 MFA 验证的注释说明。Moderated Sessions受监管会话受监管会话需要将types.SessionTracker资源持久化到后端以便用户创建或加入会话时评估加入条件。如果持久化types.SessionTracker失败会话必须中止以防未授权访问——这一点对 proxy 录制和 node 录制两种模式都成立。在仓库实现中会话跟踪器由lib/srv/sessiontracker.go的NewSessionTracker创建其内部调用services.SessionTrackerService的CreateSessionTracker将跟踪器写入后端见 lib/srv/sessiontracker.go后端的持久化实现位于 lib/services/local/sessiontracker.go。这印证了 RFD 描述的持久化失败即中止会话的机制。Web UI所有通过 Web UI 的访问都必须连接 Auth。原因有二没有任何 auth connector 资源被复制到 Proxy因此用户无法在离线状态下登录 Web UI即使是在断连之前已登录的用户Proxy 也不会在本地执行 RBAC而是将所有请求代理到 Auth 服务器由 Auth 代为执行 RBAC。严格锁定模式Strict Lockingkind: role version: v5 metadata: name: lock-strict spec: options: lock: strict严格模式并非默认模式。在该模式下当无法保证锁lock处于最新状态时所有交互都会被终止。当与 Auth 的连接中断、锁无法复制时出于审慎考虑新建连接最终会被中止。因此启用lock: strict的角色同样无法享受离线访问能力。无需 Auth 连接即可访问节点的场景直接以主机名、IP 或 UUID 连接当用户直接指定目标节点时而非通过标签解析理论上不应要求连接 Authtsh ssh foobar tsh ssh foo127.0.0.1 tsh ssh foof409a8b6-1275-4f0f-887e-8185426147f4但 RFD 指出截至文档编写时该能力尚不可用主要有两个阻塞点proto.AuthService/IsMFARequired前置检查types.SessionTracker的持久化依赖。下文分别展开。阻塞点一IsMFARequired前置检查与连接顺序反转现状连接前先问 Authtsh在连接节点之前就要判断 per-session MFA 是否必需这意味着每次tsh ssh调用都需要连接 Auth。当前实现中tsh通过TeleportClient向 Auth 发起IsMFARequired请求例如 lib/client/api.go 中的runCommandOnNodes会在执行远程命令前先调用clt.AuthClient.IsMFARequired(...)用节点名与HostLogin构造IsMFARequiredRequestIsMFARequired的接口定义在 lib/client/client.go请求目标类型Node、KubernetesCluster、Database、App、WindowsDesktop、LinuxDesktop由ReissueParams.isMFARequiredRequest统一构造见 lib/client/client.go。Auth 可用时的成功连接流程Auth 不可用时的失败流程当前现状提案先连节点必要时再问 AuthRFD 0093 的关键洞察是最终决定连接是否应建立的不是 Auth 服务器而是节点。节点会对所有入站连接执行 RBAC 检查以确定其中包括per-session MFA 是否必需、MFA 仪式是否已执行。因此tsh应总是先尝试连接节点仅当节点返回trace.AccessDenied错误时才回退调用proto.AuthService/IsMFARequired如果 per-session MFA 确实必需则执行 MFA 仪式并再次尝试连接节点如果 MFA 并非必需则把原始的trace.AccessDenied错误原样返回——此时说明用户因角色原因无权访问该节点。这一顺序反转带来的收益与代价收益happy path降低连接延迟把 Auth 从连接路径中移除提升节点可用性代价当 per-session MFA 必需时多一次连接节点的尝试延迟略有增加。Auth 不可用且不需要per-session MFA 时的成功流程提案后Auth 不可用且需要per-session MFA 时的失败流程提案后备选方案对比RFD 同时评估了两种备选方案先查IsMFARequired但无论结果如何都尝试连接节点对不需要 per-session MFA 的 happy path 增加延迟多了IsMFARequired调用对需要 per-session MFA 的场景降低延迟目标节点的连接只需建立一次。并行执行IsMFARequired与节点连接结果与推荐方案大体相同由于连接节点几乎总是比连接 Auth 更耗时并行带来的收益主要体现在 happy path 上。综合权衡RFD 推荐先连节点、按需回退的方案。阻塞点二SessionTracker 的持久化与降级策略现状持久化失败即中止会话每次会话都会创建新的 session tracker。如果持久化 session tracker 失败会话立即中止。这与NewSessionTracker的实现一致当CreateSessionTracker返回错误时NewSessionTracker直接返回该错误见 lib/srv/sessiontracker.go会话无法继续。提案非受监管会话可降级为本地 trackerRFD 提出与其在 session tracker 无法持久化时立即中止会话节点可以先检查是否需要受监管会话如果需要受监管会话则保持现状中止会话因为缺少跟踪器就无法评估加入条件如果不需要受监管会话则允许会话使用本地 session tracker 资源继续。这种降级虽然放行了访问但会带来三个可见的副作用会话不会出现在活跃会话列表中其他用户无法加入该会话会话录制在 UploadCompleter 处理之前不可用。关于第三点仓库中的 UploadCompleter 负责在会话结束后补全上传其配置与默认宽限期定义见 lib/events/complete.go 与 lib/events/auditlog.go说明录制数据的最终落库仍由后端异步机制兜底。从源码结构看受监管会话的判定与执行路径集中在lib/srvauthhandlers.go中会校验请求的 OS 用户是否为会话加入主体、以及用户角色是否支持受监管会话见 lib/srv/authhandlers.goctx.go中则同时承载了受监管会话的加入检查与非受监管会话的启动放行逻辑见 lib/srv/ctx.go 附近。RFD 的本地 tracker 提案若落地将主要改动此类启动路径。Connect自动继承离线能力Teleport Connect 的后端操作全部复用tsh。因此它当前承受与tsh ssh相同的离线访问限制它也自动受益于本 RFD 提出的全部改动任何捆绑了包含这些改动的tsh版本的 Connect 发行版都会在满足集群配置要求的前提下自动获得离线访问节点的能力无需为 Connect 编写任何专属代码。测试与安全评估测试RFD 计划为文档中描述的每一种场景添加测试验证每种配置下对节点的访问行为是否符合预期离线允许、离线拒绝等。安全影响RFD 明确评估对tsh的改动不应影响任何安全性per-session MFA 的强制要求依然会被执行节点仍然是访问决策的最终裁决者对入站连接执行 RBAC 检查提案中的改动全部是客户端侧的。唯一被指出的审计风险在于允许非受监管会话在没有后端 session tracker 的情况下继续运行会在会话跟踪与审计层面造成一定缺口例如活跃会话列表缺失、录制延迟可见。UX 影响对健康集群而言tsh ssh的用户体验没有任何可感知变化当 Auth 发生中断时在允许的配置组合下用户应能照常访问节点唯一变长的失败场景是Auth 中断 per-session MFA 必需的情况但此时的总耗时不会超过 Auth 可用时建立节点连接所需的时间。落地路线图与仓库对照能力当前仓库状态涉及路径IsMFARequired前置检查现状存在连接前调用 Authlib/client/api.go、lib/client/client.go录制模式常量已定义node/proxy/off/node-sync/proxy-syncapi/types/constants.goSessionTracker 持久化后端实现 失败即中止lib/srv/sessiontracker.go、lib/services/local/sessiontracker.go受监管会话判定节点侧校验角色与加入主体lib/srv/authhandlers.go、lib/srv/ctx.goUploadCompleter会话录制补全上传机制lib/events/complete.go角色 MFA 选项require_session_mfa强制校验lib/services/role.go结语RFD 0093 为 Teleport 的离线访问能力划定了一条清晰的边界标签解析、sync 录制、per-session MFA、受监管会话、Web UI 与严格锁定模式仍必须依赖 Auth而直接指定主机名/IP/UUID 的tsh ssh则完全有机会在离线状态下工作。其核心工程手法是连接顺序反转先连节点、按需回退 MFA 判定与SessionTracker 本地降级并且所有改动都坚持节点裁决、客户端让步的安全原则。结合仓库源码可以看到当前实现仍保留IsMFARequired前置检查与tracker 持久化失败即中止的旧行为本 RFD 的落地意味着在 lib/client 与 lib/srv 两个目录中做针对性改造。对于希望提升集群在 Auth 升级或故障期间可用性的工程师而言这份文档既是设计蓝图也是判断哪些配置组合可以离线的权威依据。赞分享网络安全认证鉴权运维后端【免费下载链接】teleportThe easiest, and most secure way to access and protect all of your infrastructure.项目地址https://gitcode.com/gh_mirrors/tel/teleport点击查看免费下载相关推荐Teleport RFD 22 深度解读tsh ssh 的 SSH Agent 转发行为对齐 OpenSSHTeleport RFD 22 深度解读tsh ssh 的 SSH Agent 转发行为对齐 OpenSSH 导读 本文以 Teleport 仓库中的设计文档网络安全认证鉴权运维后端Teleport Connect My ComputerRFD 133深度解析一键将本机接入 Teleport 集群成为 SSH 节点Teleport Connect My ComputerRFD 133深度解析一键将本机接入 Teleport 集群成为 SSH 节点 本文基于 Tele网络安全认证鉴权运维后端Teleport Kubernetes 离线访问指南Auth 中断场景下的健壮连接机制解析Teleport Kubernetes 离线访问指南Auth 中断场景下的健壮连接机制解析 导读 本指南以 Teleport 仓库中的 RFD 0122 Ro网络安全认证鉴权运维后端上一篇破局与进化Kendo UI Core 2022兼容性重构与模块化革命全指南下一篇Scully极速优化Angular静态站点生成完全指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表