VPN 后 GitLab 自我管理的工程分析
当托管应用程序无法到达客户网络时,用于分析私有 GitLab 交付数据的安全模式。
了解网络约束
托管 SaaS 后端通常无法调用仅在公司 VPN 或专用网络上可用的 GitLab 实例。将每个客户来源添加到部署配置中无法扩展,并且要求客户公开公开 GitLab 会削弱安全边界。然而,用户的浏览器在连接到 VPN 时可能已经获得了授权的网络访问权限。这为手动、浏览器直接同步创建了一条实用的路线,前提是该产品将浏览器视为不受信任的边界,并最大限度地减少留下的内容。
让浏览器直接调用GitLab
在浏览器直接模式下,用户在页面中输入 GitLab 来源、组范围和只读令牌。浏览器中运行的 JavaScript 通过现有 VPN 连接调用 GitLab API。它仅标准化产品所需的交付元数据,并将标准化的有效负载发送到托管应用程序。令牌绝不能包含在该有效负载、应用程序日志、错误监控或分析中。可选的便利存储应该是选项卡范围的会话存储,而不是持久性本地存储,并且关闭选项卡应该删除凭据。
使用最窄的实际权限
创建用于只读 API 访问的令牌,并将同步范围限制到工作区有权分析的组或项目。将 GitLab 源验证为 HTTPS,拒绝 URL 中嵌入的凭据,并尽可能阻止对任意内部主机的调用。托管摄取路由应独立验证登录的工作区管理器、接受的提供程序类型、有效负载架构、最大大小、存储库范围和速率限制。浏览器持有的令牌减少了服务器端秘密的暴露,但它并不能消除验证浏览器提交的所有内容的需要。
优化有界页面周围的同步
使用支持的最大页面大小获取项目和最近的合并请求,尊重 GitLab 分页标头,并通过明确的时间窗口或记录限制来绑定历史记录。避免每个合并请求一个请求,除非指标确实需要详细事件。在保守的上限下同时加载昂贵的审核、参与者或迭代数据,并按已完成的工作显示进度,而不是任意旋转器。在应用程序中缓存规范化结果,以便报告不会重复 VPN 获取。手动浏览器直接模式无法在选项卡关闭后提供可靠的后台同步或 Webhook,因此请诚实地标记新鲜度。
验证安全承诺
在试点期间,检查浏览器网络面板并确认令牌仅发送到客户的 GitLab 源。检查应用程序请求是否包含标准化元数据而不是原始机密或源代码。关闭选项卡并验证令牌是否已消失。测试无效的源、过期的令牌、没有工作区权限的用户、过大的响应和部分同步。最后,将项目示例、合并请求、审阅者、标签、里程碑和迭代与 GitLab 本身进行比较。仅当用户也可以信任生成的证据时,安全架构才有用。