{{< details >}}

  • Tier: 基础版,专业版,旗舰版
  • Offering: 私有化部署

{{< /details >}}

{{< history >}}

  • 在极狐GitLab 11.10 中,从专业版移动至基础版。

{{< /history >}}

在高度控制的环境中,可能需要通过外部服务来控制访问策略,该服务允许基于项目分类和用户访问进行访问。极狐GitLab 提供了一种使用您自己定义的服务来检查项目授权的方法。

配置并启用外部服务后,当访问项目时,会向外部服务发送请求,其中包含用户信息和分配给项目的项目分类标签。当服务回复已知响应时,结果会缓存六个小时。

如果启用了外部授权,极狐GitLab 会进一步阻止呈现跨项目数据的页面和功能。这包括:

  • 仪表板下的大多数页面(活动、里程碑、代码片段、分配的合并请求、分配的议题、待办事项列表)。
  • 在特定群组下(活动、贡献分析、议题、议题板、标签、里程碑、合并请求)。
  • 全局和群组搜索被禁用。

这是为了防止一次向外部授权服务发出太多请求。

每当授予或拒绝访问时,都会记录在名为 external-policy-access-control.log 的日志文件中。阅读更多关于极狐GitLab 保持的日志的信息,请参阅 Linux 软件包文档

使用自签名证书进行 TLS 身份验证时,CA 证书需要被 OpenSSL 安装信任。使用 Linux 软件包安装的极狐GitLab 时,学习如何在 Linux 软件包文档 中安装自定义 CA。或者,学习通过使用 openssl version -d 安装自定义证书的位置。

配置

管理员可以启用外部授权服务:

  1. 在左侧边栏底部,选择 管理员
  2. 选择 设置 > 常规
  3. 展开 外部授权
  4. 完成字段。
  5. 选择 保存更改

允许使用部署令牌和部署密钥进行外部授权

{{< history >}}

  • 引入于极狐GitLab 15.9。
  • 部署令牌不再能够访问容器或软件包仓库的功能引入于极狐GitLab 16.0。

{{< /history >}}

您可以设置您的实例,允许使用部署令牌部署密钥进行 Git 操作的外部授权。

先决条件:

  • 您必须使用没有服务 URL 的分类标签进行外部授权。

要允许使用部署令牌和密钥进行授权:

  1. 在左侧边栏底部,选择 管理员
  2. 选择 设置 > 常规
  3. 展开 外部授权,并:
    • 将服务 URL 字段留空。
    • 选择 允许使用部署令牌和部署密钥进行外部授权
  4. 选择 保存更改

{{< alert type=”warning” >}}

如果您启用外部授权,部署令牌将无法访问容器或软件包注册表。如果您使用部署令牌访问这些注册表,此措施将破坏这些令牌的使用。禁用外部授权以使用容器或软件包注册表的令牌。

{{< /alert >}}

工作原理

当极狐GitLab 请求访问时,它向外部服务发送一个包含以下内容的 JSON POST 请求:

{
  "user_identifier": "jane@acme.org",
  "project_classification_label": "project-label",
  "user_ldap_dn": "CN=Jane Doe,CN=admin,DC=acme",
  "identities": [
    { "provider": "ldap", "extern_uid": "CN=Jane Doe,CN=admin,DC=acme" },
    { "provider": "bitbucket", "extern_uid": "2435223452345" }
  ]
}

user_ldap_dn 是可选的,仅当用户通过 LDAP 登录时发送。

identities 包含与用户关联的所有身份的详细信息。如果没有与用户关联的身份,这是一个空数组。

当外部授权服务以状态码 200 回复时,用户被授予访问权限。当外部服务以状态码 401 或 403 回复时,用户被拒绝访问。无论如何,请求会缓存六个小时。

拒绝访问时,可以在 JSON 主体中选择性地指定 reason

{
  "reason": "您不允许访问此项目。"
}

任何其他状态码不是 200、401 或 403 也会拒绝用户访问,但不会缓存响应。

如果服务超时(超过 500 毫秒),则显示消息“外部策略服务器未响应”。

分类标签

您可以在项目的 设置 > 常规 > 常规项目设置页面的“分类标签”框中使用您自己的分类标签。当项目上未指定分类标签时,使用在全局设置中定义的默认标签。

在所有项目页面的右上角,标签会出现。

在项目的右上角显示一个带开放锁图标的红色覆盖标签。