Help us learn about your current experience with the documentation. Take the survey.

组访问和权限

  • Tier: Free, Premium, Ultimate
  • Offering: GitLab.com, GitLab Self-Managed, GitLab Dedicated

配置您的组以控制组权限和访问。 更多信息,请参阅共享项目和组

组推送规则

  • Tier: Premium, Ultimate
  • Offering: GitLab.com, GitLab Self-Managed, GitLab Dedicated

组推送规则允许组维护者为特定组中新创建的项目设置推送规则

为组配置推送规则:

  1. 在左侧边栏,选择 设置 > 仓库
  2. 展开 预定义推送规则 部分。
  3. 选择您想要的设置。
  4. 选择 保存推送规则

组的新子组会根据以下方式设置推送规则:

  • 具有定义的推送规则的最近父组。
  • 为整个实例设置的推送规则,如果没有父组定义推送规则。

限制 Git 访问协议

您可以将访问组仓库的允许协议设置为 SSH、HTTPS 或两者。当实例设置由管理员配置时,此设置将被禁用。

更改组的允许 Git 访问协议:

  1. 在左侧边栏,选择 搜索或跳转 并找到您的组。
  2. 选择 设置 > 常规
  3. 展开 权限和组功能 部分。
  4. 启用的 Git 访问协议 中选择允许的协议。
  5. 选择 保存更改

按 IP 地址限制组访问

  • Tier: Premium, Ultimate
  • Offering: GitLab.com, GitLab Self-Managed, GitLab Dedicated

为确保只有您组织的人员可以访问特定资源,您可以按 IP 地址限制对组的访问。此顶级组设置适用于:

  • GitLab UI,包括子组、项目和问题。不适用于 GitLab Pages。
  • API。
  • 在 GitLab 自托管版中,您还可以为组配置全局允许的 IP 地址范围

管理员可以将按 IP 地址限制的访问与全局允许的 IP 地址结合使用。

IP 限制需要正确配置 X-Forwarded-For 标头。为了降低 IP 欺骗的风险,您必须覆盖(而非追加)客户端发送的任何 X-Forwarded-For 标头。

对于没有上游代理或负载均衡器的部署,配置直接接收用户请求的服务器以保留原始客户端 IP 地址并覆盖任何 X-Forwarded-For 标头。例如,在 NGINX 中,修改配置文件以包含:

proxy_set_header X-Forwarded-For $remote_addr;

对于有上游代理或负载均衡器的部署,配置代理或负载均衡器以保留原始客户端 IP 地址并覆盖任何 X-Forwarded-For 标头。这种方法确保 GitLab 接收从原始客户端开始的完整 IP 链,并能正确评估 IP 限制。例如,在 NGINX 中,修改配置文件以包含:

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

按 IP 地址限制组访问:

  1. 在左侧边栏,选择 搜索或跳转 并找到您的组。
  2. 选择 设置 > 常规
  3. 展开 权限和组功能 部分。
  4. 按 IP 地址限制访问 文本框中,以 CIDR 表示法输入 IPv4 或 IPv6 地址范围列表。此列表:
    • 对 IP 地址范围的数量没有限制。
    • 同时适用于 SSH 或 HTTP 授权 IP 地址范围。您不能按授权类型拆分此列表。
  5. 选择 保存更改

安全影响

请注意,按 IP 地址限制组访问具有以下影响:

  • 管理员和组所有者可以从任何 IP 地址访问组设置,无论 IP 限制如何。但是:
    • 组所有者可以从不允许的 IP 地址访问子组,但不能访问属于组或子组的项目。
    • 管理员可以从不允许的 IP 地址访问属于组的项目。对项目的访问包括从中克隆代码。
    • 用户仍然可以看到组和项目名称及层次结构。仅以下内容受到限制:
  • 当您注册 runner 时,它不受 IP 限制的约束。当 runner 请求新作业或更新作业状态时,它也不受 IP 限制的约束。但是,当正在运行的 CI/CD 作业从受限 IP 地址发送 Git 请求时,IP 限制会阻止代码被克隆。
  • 用户仍然可以在其仪表板上看到来自 IP 限制组的一些事件。活动可能包括推送、合并、问题或评论事件。
  • IP 访问限制不会阻止用户使用通过电子邮件回复功能创建或编辑问题或合并请求的评论。
  • 通过 SSH 进行的 Git 操作的 IP 访问限制在 GitLab SaaS 上受支持。 应用于 GitLab 自托管实例的 IP 访问限制可以通过启用PROXY 协议gitlab-sshd 实现。
  • IP 限制不适用于属于组的共享资源。任何共享资源对用户都是可访问的,即使该用户无法访问该组。
  • 虽然 IP 限制适用于公共项目,但它们不是完整的防火墙,项目的缓存文件可能仍然对不在 IP 块中的用户可访问

GitLab.com 访问限制

基于 IP 地址的组访问限制不适用于 GitLab.com 的托管 runner。 这些 runner 作为具有来自大型云提供商池(AWS、Google Cloud)的[动态 IP 地址](../gitlab_com/_index.md#ip-range)的临时虚拟机运行。允许这些广泛的 IP 范围违背了基于 IP 地址的访问限制的目的。

按域名限制组访问

  • Tier: Premium, Ultimate
  • Offering: GitLab.com, GitLab Self-Managed, GitLab Dedicated

您可以在顶级命名空间中定义电子邮件域允许列表,以限制哪些用户可以访问组及其项目。用户的主电子邮件域必须与允许列表中的条目匹配才能访问该组。子组继承相同的允许列表。

按域名限制组访问:

  1. 在左侧边栏,选择 搜索或跳转 并找到您的组。
  2. 选择 设置 > 常规
  3. 展开 权限和组功能 部分。
  4. 按电子邮件限制成员资格 字段中,输入要允许的域名。
  5. 选择 保存更改

下次您尝试将用户添加到组时,他们的主电子邮件必须匹配允许的域名之一。

您不能限制最受欢迎的公共电子邮件域,例如:

  • aol.com, gmail.com, hotmail.co.uk, hotmail.com,
  • hotmail.fr, icloud.com, live.com, mail.com,
  • me.com, msn.com, outlook.com,
  • proton.me, protonmail.com, tutanota.com,
  • yahoo.com, yandex.com, zohomail.com

当您共享组时,源和目标命名空间都必须允许成员电子邮件地址的域。

按电子邮件限制成员资格 列表中删除域不会从组或其项目中删除具有该域的现有用户。 此外,如果您将组或项目与另一个组共享,目标组可以向其列表添加更多电子邮件域,这些域不在源组的列表中。 因此,此功能不能确保当前成员始终符合 按电子邮件限制成员资格 列表。

防止用户请求访问组

作为组所有者,您可以防止非成员请求访问您的组。

  1. 在左侧边栏,选择 搜索或跳转 并找到您的组。
  2. 选择 设置 > 常规
  3. 展开 权限和组功能 部分。
  4. 取消选中 允许用户请求访问 复选框。
  5. 选择 保存更改

防止组外项目分叉

  • Tier: Premium, Ultimate
  • Offering: GitLab.com, GitLab Self-Managed, GitLab Dedicated

默认情况下,组中的项目可以被分叉。 但是,您可以防止组中的项目在当前顶级组之外被分叉。

尽可能防止在顶级组外分叉,以减少潜在的不良行为者途径。 但是,如果您期望大量外部协作,允许在顶级组外分叉可能是不可避免的。

先决条件:

  • 此设置仅在顶级组上启用。
  • 所有子组都从顶级组继承此设置,并且不能在子组级别更改。

防止项目在组外被分叉:

  1. 在左侧边栏,选择 搜索或跳转 并找到您的组。
  2. 选择 设置 > 常规
  3. 展开 权限和组功能 部分。
  4. 选中 防止在当前组外分叉项目
  5. 选择 保存更改

现有的分叉不会被移除。

防止成员被添加到组中的项目

  • Tier: Premium, Ultimate
  • Offering: GitLab.com, GitLab Self-Managed, GitLab Dedicated

作为组所有者,您可以防止组中所有项目的新项目成员资格,从而对项目成员资格进行更严格的控制。

例如,如果您想为审计事件锁定组,您可以保证在审计期间项目成员资格不能被修改。

如果启用了组成员资格锁定,组所有者仍然可以:

  • 邀请组或将成员添加到组,以授予他们对锁定组中项目的访问权限。
  • 更改组成员的角色。

该设置不会级联。子组中的项目遵循子组配置,忽略父组。

防止成员被添加到组中的项目:

  1. 在左侧边栏,选择 搜索或跳转 并找到您的组。
  2. 选择 设置 > 常规
  3. 展开 权限和组功能 部分。
  4. 成员资格 下,选择 用户不能被添加到此组中的项目
  5. 选择 保存更改

锁定组的成员资格后:

  • 所有先前具有权限的用户不能再向组添加成员。
  • 向项目添加新用户的 API 请求是不可能的。

使用 LDAP 管理组成员资格

  • Tier: Premium, Ultimate
  • Offering: GitLab Self-Managed

组同步允许将 LDAP 组映射到 GitLab 组。这提供了对每组用户管理的更多控制。要配置组同步,请编辑 group_base DN ('OU=Global Groups,OU=GitLab INT,DC=GitLab,DC=org')。此 OU 包含所有与 GitLab 组关联的组。

可以通过使用 CN 或过滤器创建组链接。要创建这些组链接,请转到组的 设置 > LDAP 同步 页面。配置链接后,用户可能需要超过一小时才能与 GitLab 组同步。配置链接后:

  • 在 GitLab 16.7 及更早版本中,组所有者不能向组添加成员或从组中删除成员。LDAP 服务器被视为使用 LDAP 凭据登录的所有用户组成员资格的单一事实来源。
  • 在 GitLab 16.8 及更高版本中,组所有者可以使用成员角色 API组成员 API向组添加服务帐户用户或从组中删除服务帐户用户,即使为组启用了 LDAP 同步。组所有者不能添加或删除非服务帐户用户。

当用户属于配置为同一 GitLab 组的两个 LDAP 组时,GitLab 会为他们分配两个关联角色中较高的一个。 例如:

  • 用户是 LDAP 组 OwnerDev 的成员。
  • GitLab 组配置了这两个 LDAP 组。
  • 当组同步完成时,用户被授予 Owner 角色,因为这是两个 LDAP 组角色中较高的一个。

有关 LDAP 和组同步管理的更多信息,请参阅主要 LDAP 文档

当您添加 LDAP 组同步时,如果 LDAP 用户是组成员但不是 LDAP 组的成员,他们将被从组中移除。

您可以使用通过 LDAP 组管理项目访问权限的解决方法。

使用 CN 创建组链接

  • Tier: Premium, Ultimate
  • Offering: GitLab Self-Managed, GitLab Dedicated

使用 LDAP 组 CN 创建组链接:

  1. 选择链接的 LDAP 服务器
  2. 作为 同步方法,选择 LDAP Group cn
  3. LDAP Group cn 字段中,开始输入组的 CN。在配置的 group_base 中有一个匹配 CN 的下拉列表。从此列表中选择您的 CN。
  4. LDAP 访问 部分,为在此组中同步的用户选择默认角色自定义角色
  5. 选择 添加同步

使用过滤器创建组链接

  • Tier: Premium, Ultimate
  • Offering: GitLab Self-Managed, GitLab Dedicated

使用 LDAP 用户过滤器创建组链接:

  1. 选择链接的 LDAP 服务器
  2. 作为 同步方法,选择 LDAP user filter
  3. LDAP 用户过滤器 框中输入您的过滤器。遵循用户过滤器文档
  4. LDAP 访问 部分,为在此组中同步的用户选择默认角色自定义角色
  5. 选择 添加同步

覆盖用户权限

  • Tier: Premium, Ultimate
  • Offering: GitLab Self-Managed, GitLab Dedicated

管理员可以手动覆盖用户权限。要覆盖用户权限:

  1. 在左侧边栏,选择 搜索或跳转 并找到您的组。
  2. 选择 管理 > 成员。如果 LDAP 同步 已授予用户具有以下权限的角色:
    • 比父组成员资格更多权限,该用户显示为具有组的直接成员资格
    • 与父组成员资格相同或更少权限,该用户显示为具有组的继承成员资格
  3. 可选。如果要编辑的用户显示为具有继承成员资格, 在覆盖用户权限之前过滤子组以显示直接成员
  4. 在您正在编辑的用户行中,选择铅笔( pencil )图标。
  5. 在对话框中选择 编辑权限

现在您可以从 成员 页面编辑用户权限。

设置可以使用管道变量的默认角色

此设置控制组中新创建项目的运行新管道时使用管道变量的最低允许角色 项目设置的默认值。

此设置不是强制选项。项目创建后,维护者或所有者可以更改项目设置。

先决条件:

  • 您必须是组中的维护者。
  • 组必须是顶级组,而不是子组。

设置默认最低角色:

  1. 在左侧边栏,选择 搜索或跳转 并找到您的组。
  2. 选择 设置 > CI/CD > 变量
  3. 使用管道变量的默认角色 下选择最低角色,或选择 不允许任何人 以防止任何用户使用管道变量。
  4. 选择 保存更改

故障排除

验证访问是否被 IP 限制阻止

如果用户尝试访问特定组时看到 404 错误,他们的访问可能被 IP 限制阻止。

auth.log rails 日志中搜索一个或多个以下条目:

  • json.message: 'Attempting to access IP restricted group'
  • json.allowed: false

查看日志条目时,将 remote.ip 与组的允许 IP 地址列表进行比较。

无法更新组成员权限

如果组所有者无法更新组成员权限,请检查列出的成员资格。组所有者只能更新直接成员资格。

直接添加到子组的成员如果他们在父组中具有相同或更高的角色,仍然被视为继承成员

要查看和更新直接成员资格,过滤组以显示直接成员

问题 337539 提出了一个重新设计的成员页面,该页面列出直接和间接成员资格,并能够按类型过滤。

启用 IP 限制后无法使用 SSH 克隆或拉取

如果您在添加 IP 地址限制后遇到 Git SSH 操作问题,请检查您的连接是否默认使用 IPv6。

某些操作系统在 IPv6 和 IPv4 都可用时优先使用 IPv6, 这可能从 Git 终端反馈中不明显。

如果您的连接使用 IPv6,您可以通过将 IPv6 地址添加到允许列表来解决此问题。