群组访问和权限

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

群组推送规则#

  • Tier: 专业版, 旗舰版
  • Offering: JihuLab.com, 私有化部署
History
    • 在极狐GitLab 15.4 中移动至设置/仓库。

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

在极狐GitLab 15.4及以后版本中,要为群组配置推送规则:

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

在极狐GitLab 15.3及之前版本中,要为群组配置推送规则:

  1. 在左侧边栏中,选择 推送规则
  2. 选择你想要的设置。
  3. 选择 保存推送规则

群组的新子群组根据以下规则为其设置推送规则:

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

限制 Git 访问协议#

History
    • 引入于极狐GitLab 15.1。
    • 在极狐GitLab 16.0 中功能标志被移除。

你可以设置允许使用 SSH、HTTPS 或同时使用这两种协议访问群组的软件包。这一设置在管理员配置实例设置时会被禁用。

要更改群组的 Git 访问协议:

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

通过 IP 地址限制群组访问#

  • Tier: 专业版, 旗舰版
  • Offering: JihuLab.com, 私有化部署

为了确保只有你的组织成员能够访问特定资源,你可以通过 IP 地址限制对群组的访问。这一顶级群组设置适用于:

  • 极狐GitLab UI,包括子群组、项目和议题。不适用于极狐GitLab Pages。
  • API。
  • 在极狐GitLab私有化部署中,15.1及以后版本,你还可以为群组配置全局允许的 IP 地址范围

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

要通过 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 块中的用户可访问。

JihuLab.com 访问限制#

基于 IP 地址的群组访问限制不适用于极狐GitLab.com 的托管 runner。这些 runner 作为临时虚拟机运行,使用大型云提供商池(AWS、Google Cloud)中的动态 IP 地址。允许这些广泛的 IP 范围将使基于 IP 地址的访问限制失去意义。

通过域名限制群组访问#

  • Tier: 专业版, 旗舰版
  • Offering: JihuLab.com, 私有化部署
History
    • 在极狐GitLab 15.1.1 中添加了对限制群组成员资格到允许的电子邮件域名子集的支持

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

要通过域名限制群组访问:

  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: 专业版, 旗舰版
  • Offering: JihuLab.com, 私有化部署

默认情况下,群组中的项目可以进行分叉。然而,你可以阻止群组中的项目在当前顶级群组之外进行分叉。

尽可能阻止在顶级群组之外进行分叉,以减少潜在的坏人行为途径。然而,如果你预计会有很多外部协作,允许在顶级群组之外进行分叉可能是不可避免的。

前提条件:

  • 此设置仅在顶级群组中启用。
  • 所有子群组从顶级群组继承此设置,并且无法在子群组级别进行更改。

要防止项目在群组外进行分叉:

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

现有的分叉不会被删除。

防止在群组中添加成员到项目#

  • Tier: 专业版, 旗舰版
  • Offering: JihuLab.com, 私有化部署

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

例如,如果你想锁定群组进行审计事件,你可以保证在审计期间无法修改项目成员资格。

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

  • 邀请群组或添加成员到群组,以便他们可以访问 锁定 群组中的项目。
  • 更改群组成员的角色。

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

要防止在群组中添加成员到项目:

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

锁定群组的成员资格后:

  • 所有之前有权限的用户都不再能够添加成员到群组。
  • 不可能通过 API 请求向项目添加新用户。

使用 LDAP 管理群组成员资格#

  • Tier: 专业版, 旗舰版
  • Offering: 私有化部署
History
    • 对于群组中同步用户的自定义角色支持引入于极狐GitLab 17.2。

群组同步允许 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: 专业版, 旗舰版
  • Offering: 极狐GitLab私有化部署, 极狐GitLab专属

要使用 LDAP 群组 CN 创建群组链接:

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

使用过滤器创建群组链接#

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

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

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

覆盖用户权限#

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

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

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

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

故障排除#

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

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

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

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

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

无法更新群组成员的权限#

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

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

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

在启用 IP 限制后无法通过 SSH 克隆或拉取#

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

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

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