极狐 GitLab

云连接器

极狐GitLab 云连接器是一种访问多个极狐GitLab 部署、实例和单元共同服务的方式。目前,云连接器本身并非一项专用服务,而是一系列 API 和代码的集合,这些 API 和代码标准化了将基于云的服务与极狐GitLab 实例集成时的身份验证和其他事项的方法。本页面旨在说明如何使用云连接器将极狐GitLab Rails 连接到一个服务。

所有权#

云连接器具有共享所有权。如果你有请求或问题,请参阅手册并与相应的团队联系。

架构#

有关云连接器的更多信息,请参阅手册中的架构页面。 有关本文档中使用的术语列表,请参阅术语

“云连接”后端#

AI 网关 是与云连接器连接的主要后端服务。在 AI 功能开发中,我们期望新功能或现有功能将由 AI 网关 提供服务。

教程:使用云连接器连接新功能#

查阅单元原语及配置以了解付费功能如何捆绑到极狐GitLab 层级和附加组件中。 决定你的功能是否需要新的单元原语。如果需要,请按照以下步骤操作:

  1. 在 JWT 颁发者中注册新功能
  2. 在极狐GitLab Rails 中实现权限检查
  3. 在后端服务中实现授权检查

在 JWT 颁发者中注册新功能#

  • 对于极狐GitLab 私有化部署,CustomersDot 是 JWT 颁发者
  • 对于 JihuLab.com 部署,JihuLab.com 是 JWT 颁发者,因为它能够为每个对云连接器功能的请求自签名并创建 JWT

你必须将新功能作为单元原语注册在 gitlab-cloud-connector 仓库中。 该仓库是所有云连接器配置的单一事实来源(SSoT)。

要注册新功能:

  1. gitlab-cloud-connector 仓库的 config/unit_primitives/ 目录中创建一个新的 YAML 文件。
  2. 定义单元原语配置,并确保遵循模式
  3. 按照我们的发布清单来发布库的新版本并在极狐GitLab 项目中使用。

在极狐GitLab Rails 中实现权限检查#

身份验证#

举例来说,该功能以名为 new_feature 的新单元原语形式提供。

调用 Gitlab::AiGateway.headers(user: user, unit_primitive_name: :new_feature, ai_feature_name: ai_feature_name_from_catalog) 将为你提供一组需要附加到每个请求至 AI 网关 的标头。 请参考 AiFeaturesCatalogue 来选择合适的 ai_feature_name_from_catalog 值。

这组标头包含了向 AI 网关 认证你的 AI 请求所需的一切信息。 特别是,它在 Authorization 字段中包含访问令牌:

  • 在 JihuLab.com 上,它将根据所提供的资源自行签发具有相应作用域的令牌:
    • 对于用户:作用域基于用户的席位分配
    • 对于命名空间:作用域基于该命名空间购买的附加组件
  • 在极狐GitLab 私有化部署上,它始终包含存储在数据库中的 ::CloudConnector::ServiceAccessToken JWT 令牌。

后端服务AI 网关)在收到请求时必须验证此令牌及其所携带的任何作用域。

你可以将任何额外的自定义标头合并到 Gitlab::AiGateway.headers 的结果中。

权限检查#

极狐GitLab Rails 中的权限检查并非强制性的,但可作为早期关卡,在请求到达 AI 网关 之前就拒绝请求,从而改善用户体验。 无论这些前端检查如何,AI 网关 都会执行所有必要的授权。

这些可选的检查可能有助于:

  • 向用户提供有关功能可用性的即时反馈
  • 减少不必要的后端服务网络请求
  • 提高整体应用性能和感知性能

实现方式:

  • 对于实验性/免费功能:如果该功能具有免费访问权限,这通常意味着实验性功能受 测试协议 约束。
    • 对于极狐GitLab Duo 功能,客户需要启用 实验性切换开关 才能免费使用实验性功能。
  • 对于 JihuLab.com 和极狐GitLab 私有化部署上的付费功能:在发出后端请求之前,检查用户是否有权使用该功能。
ruby
# 对于提供的用户,它将检查用户是否有权使用该功能。 current_user.allowed_to_use?(:new_feature)

示例#

以下示例是针对名为 :new_feature 的服务发起的请求。

ee/global_policy.rb 中添加新的策略规则:

ruby
1 condition(:new_feature_licensed) do 2 next true if ::Gitlab::Saas.feature_available?(:new_feature_on_saas) 3 ::License.feature_available?(:new_feature) 4 end 5 6 condition(:user_allowed_to_use_new_feature) do 7 @user.allowed_to_use?(:new_feature) 8 end 9 10 rule { new_feature_licensed & user_allowed_to_use_new_feature }.enable :access_new_feature

发送请求

ruby
1# 根据席位分配、附加组件购买情况,检查该功能是否对给定用户可用 2return unauthorized! unless current_user.can?(:access_new_feature) 3 4Gitlab::HTTP.post( 5 "#{ai_gateway_base_url}#{feature_endpoint}", 6 headers: Gitlab::AiGateway.headers(user: user, unit_primitive_name: :new_feature, ai_feature_name: <CORRESPONDING ENTRY FROM AiFeaturesCatalogue>), 7 body: <REQUEST BODY>, 8)

在后端服务中实现授权检查#

极狐GitLab Rails 调用 后端服务AI 网关)以提供原本对极狐GitLab 私有化部署实例不可用的功能。为了让极狐GitLab Rails 能够调用此服务,必须暴露一个端点。 后端服务必须验证极狐GitLab Rails 在 Authorization 标头中发送的每个 JWT。

有关 AI 网关 授权过程的更多信息和示例,请查阅 AI 网关授权文档

测试#

按照说明在本地环境中设置极狐GitLab Duo,以使用 AI 网关 作为后端服务运行端到端集成测试。