极狐GitLab 正式推出面向 GitLab 老旧版本(12.x、13.x、14.x、15.x 等)免费用户的专业升级服务,点击查看详情

返回列表 发布新帖

LDAP同步-02

692 0
发表于 2024-4-9 11:53:40 | 显示全部楼层 阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

×
群组同步
如果您的 LDAP 支持 memberof 属性,则当用户第一次登录极狐GitLab 时,会触发用户所在的群组的同步。 这样他们就不必等待每小时同步来授予对他们的群组和项目的访问权限。
群组同步进程每小时运行一次,必须在 LDAP 配置中设置 group_base 才能使基于组 CN 的 LDAP 同步工作。允许极狐GitLab 群组成员根据 LDAP 组成员自动更新。
group_base 配置应该是一个基本的 LDAP “容器”,例如一个 “组织” 或 “组织单位”,其中包含可用于极狐GitLab 的 LDAP 组。例如,group_base 可以是 ou=groups,dc=example,dc=com。在配置文件中,示例如下。
Omnibus
  • 编辑 /etc/gitlab/gitlab.rb:
    gitlab_rails['ldap_servers' = {  'main' => {    'group_base' => 'ou=groups,dc=example,dc=com',    }}
  • 保存文件并重新配置极狐GitLab:
    sudo gitlab-ctl reconfigure
Kubernetes
  • 导出 Helm 值:
    helm get values gitlab > gitlab_values.yaml
  • 编辑 gitlab_values.yaml:
    global:  appConfig:    ldap:      servers:        main:          group_base: ou=groups,dc=example,dc=com
  • 保存文件并应用新值:
    helm upgrade -f gitlab_values.yaml gitlab gitlab/gitlab
Docker
  • 编辑 docker-compose.yml:
    version: "3.6"services:  gitlab:    environment:      GITLAB_OMNIBUS_CONFIG: |        gitlab_rails['ldap_servers'] = {          'main' => {            'group_base' => 'ou=groups,dc=example,dc=com',            }        }
  • 保存文件并重启极狐GitLab:
    docker compose up -d
源安装
  • 编辑 /home/git/gitlab/config/gitlab.yml:
    production: &base  ldap:    servers:      main:        group_base: ou=groups,dc=example,dc=com
  • 保存文件并重启极狐GitLab:
    # For systems running systemdsudo systemctl restart gitlab.target# For systems running SysV initsudo service gitlab restart
要利用群组同步,群组所有者或具有维护者角色的用户必须创建一个或多个 LDAP 群组链接
添加群组链接
有关使用 CN 和 filter 添加群组链接的信息,请参阅极狐GitLab 群组文档
管理员同步
作为群组同步的扩展,您可以自动管理您的全局极狐GitLab 管理员。为 admin_group 指定一个组 CN,LDAP 组的所有成员都被授予管理员权限。配置如下所示。
除非在 admin_group 旁边还指定了 group_base,否则不会同步管理员。此外,仅指定 admin_group 的 CN,而不是完整的 DN。 此外,如果 LDAP 用户具有 admin 角色,但不是 admin_group 组的成员,系统会在同步时撤销其 admin 角色。

Omnibus
  • 编辑 /etc/gitlab/gitlab.rb:
    gitlab_rails['ldap_servers' = {  'main' => {    'group_base' => 'ou=groups,dc=example,dc=com',    'admin_group' => 'my_admin_group',    }}
  • 保存文件并重新配置极狐GitLab:
    sudo gitlab-ctl reconfigure
Kubernetes
  • 导出 Helm 值:
    helm get values gitlab > gitlab_values.yaml
  • 编辑 gitlab_values.yaml:
    global:  appConfig:    ldap:      servers:        main:          group_base: ou=groups,dc=example,dc=com          admin_group: my_admin_group
  • 保存文件并应用新值:
    helm upgrade -f gitlab_values.yaml gitlab gitlab/gitlab
Docker
  • 编辑 docker-compose.yml:
    version: "3.6"services:  gitlab:    environment:      GITLAB_OMNIBUS_CONFIG: |        gitlab_rails['ldap_servers'] = {          'main' => {            'group_base' => 'ou=groups,dc=example,dc=com',            'admin_group' => 'my_admin_group',            }        }
  • 保存文件并重启极狐GitLab:
    docker compose up -d
源安装
  • 编辑 /home/git/gitlab/config/gitlab.yml:
    production: &base  ldap:    servers:      main:        group_base: ou=groups,dc=example,dc=com        admin_group: my_admin_group
  • 保存文件并重启极狐GitLab:
    # For systems running systemdsudo systemctl restart gitlab.target# For systems running SysV initsudo service gitlab restart
全局群组成员锁定
极狐GitLab 管理员可以阻止群组成员邀请新成员加入与 LDAP 同步成员的子组。
全局群组成员锁定仅适用于配置了 LDAP 同步的顶级组的子组。任何用户都不能修改由 LDAP 同步配置的顶级群组的成员身份。
启用全局群组成员锁定时:
  • 只有管理员可以管理任何群组的成员资格,包括访问级别。
  • 不允许用户与其他群组共享项目,或邀请成员加入群组中创建的项目。
要启用它,您必须:
  • 配置 LDAP
  • 在左侧边栏中,选择 搜索或转到。
  • 选择 管理中心。
  • 在左侧边栏中,选择 设置 > 通用。
  • 展开 可见性和访问控制 部分。
  • 确保选中 锁定成员身份到 LDAP 同步 复选框。
更改 LDAP 群组同步设置管理
默认情况下,具有所有者角色的群组成员可以管理 LDAP 群组同步设置
极狐GitLab 管理员可以从群组所有者中删除此权限:
  • 配置 LDAP
  • 在左侧边栏中,选择 搜索或转到。
  • 选择 管理中心。
  • 在左侧边栏中,选择 设置 > 通用。
  • 展开 可见性和访问控制 部分。
  • 确保未选中 允许群组所有者管理 LDAP 相关设置 复选框。
当禁用允许群组所有者管理 LDAP 相关设置时:
  • 群组所有者无法更改顶级群组和子组的 LDAP 同步设置。
  • 实例管理员可以管理实例上所有群组的 LDAP 同步设置。
调整 LDAP 群组同步计划
默认情况下,系统每小时运行一次群组同步过程。 显示的值采用 cron 格式。如果需要,您可以使用 Crontab Generator
不要太频繁地启动同步过程,因为这可能导致多个同步同时运行。此问题主要针对具有大量 LDAP 用户的安装实例。在继续之前,请查看 LDAP 群组同步 benchmark 指标 以了解您的安装情况。

您可以通过设置以下配置值来手动配置 LDAP 群组同步时间。下面的示例显示了如何将群组同步设置为每两小时运行一次。
Omnibus
  • 编辑 /etc/gitlab/gitlab.rb:
    gitlab_rails['ldap_group_sync_worker_cron' = "0 */2 * * * *"
  • 保存文件并重新配置极狐GitLab:
    sudo gitlab-ctl reconfigure
Kubernetes
  • 导出 Helm 值:
    helm get values gitlab > gitlab_values.yaml
  • 编辑 gitlab_values.yaml:
    global:  appConfig:    cron_jobs:      ldap_group_sync_worker:        cron: "*/30 * * * *"
  • 保存文件并应用新值:
    helm upgrade -f gitlab_values.yaml gitlab gitlab/gitlab
Docker
  • 编辑 docker-compose.yml:
    version: "3.6"services:  gitlab:    environment:      GITLAB_OMNIBUS_CONFIG: |        gitlab_rails['ldap_group_sync_worker_cron'] = "0 */2 * * * *"
  • 保存文件并重启极狐GitLab:
    docker compose up -d
源安装
  • 编辑 /home/git/gitlab/config/gitlab.yml:
    production: &base  ee_cron_jobs:    ldap_group_sync_worker:      cron: "*/30 * * * *"
  • 保存文件并重启极狐GitLab:
    # For systems running systemdsudo systemctl restart gitlab.target# For systems running SysV initsudo service gitlab restart

外部群组
使用 external_groups 设置允许您将属于这些群组的所有用户标记为外部用户。 通过 LdapGroupSync 后台任务定期检查群组成员身份。
Omnibus
  • 编辑 /etc/gitlab/gitlab.rb:
    gitlab_rails['ldap_servers' = {  'main' => {    'external_groups' => ['interns', 'contractors'],    }}
  • 保存文件并重新配置极狐GitLab:
    sudo gitlab-ctl reconfigure
Kubernetes
  • 导出 Helm 值:
    helm get values gitlab > gitlab_values.yaml
  • 编辑 gitlab_values.yaml:
    global:  appConfig:    ldap:      servers:        main:          external_groups: ['interns', 'contractors']
  • 保存文件并应用新值:
    helm upgrade -f gitlab_values.yaml gitlab gitlab/gitlab
Docker
  • 编辑 docker-compose.yml:
    version: "3.6"services:  gitlab:    environment:      GITLAB_OMNIBUS_CONFIG: |        gitlab_rails['ldap_servers'] = {          'main' => {            'external_groups' => ['interns', 'contractors'],          }        }
  • 保存文件并重启极狐GitLab:
    docker compose up -d
源安装
  • 编辑 /home/git/gitlab/config/gitlab.yml:
    production: &base  ldap:    servers:      main:        external_groups: ['interns', 'contractors']
  • 保存文件并重启极狐GitLab:
    # For systems running systemdsudo systemctl restart gitlab.target# For systems running SysV initsudo service gitlab restart
群组同步技术细节
本节概述了 LDAP 执行的查询以及您可以从群组同步中获得什么。
如果 LDAP 组成员身份发生变化,组成员访问权限将从更高级别降级。 例如,如果用户在组中的所有者角色,下一次组同步显示他们应该只有开发人员角色,他们的访问权限会相应调整。唯一的例外是如果用户是组中的最后一个所有者。群组需要至少一名所有者来履行管理职责。
支持的 LDAP 组类型/属性
极狐GitLab 支持使用成员属性的 LDAP 组:
  • member
  • submember
  • uniquemember
  • memberof
  • memberuid
这意味着组同步支持(至少)具有以下对象类的 LDAP 组:
  • groupOfNames
  • posixGroup
  • groupOfUniqueNames
如果成员被定义为上述属性之一,则其他对象类应该可以工作。
Active Directory 支持嵌套组。如果在配置文件中设置了active_directory: true,则组同步会递归地解析成员身份。
嵌套组成员资格
仅当在配置的 group_base 中找到嵌套组时,才会解析嵌套组成员身份。例如,如果极狐GitLab 看到一个带有 DN cn=nested_group,ou=special_groups,dc=example,dc=com 的嵌套组,但配置的 group_base 是 ou=groups,dc=example,dc=com,cn=nested_group 被忽略。
Queries
  • 每个 LDAP 组最多查询一次,使用基础 group_base 和过滤器 (cn=<cn_from_group_link>)。
  • 如果 LDAP 组具有 memberuid 属性,系统会为每个成员执行另一个 LDAP 查询以获取每个用户的完整 DN。这些查询使用基础 base、范围 “base object” 和过滤器执行,具体取决于是否设置了 user_filter。过滤器可以是 (uid=<uid_from_group>) 或 user_filter 的结合。
Benchmarks
写入组同步是为了尽可能提高性能。缓存数据,优化数据库查询,最小化 LDAP 查询。最后一次 benchmark 显示了以下指标:
对于 20,000 个 LDAP 用户、11,000 个 LDAP 组和 1,000 个 GitLab 群组,每个群组具有 10 个 LDAP 组链接:
  • 初始同步(在系统中没有分配现有成员)耗时 1.8 小时
  • 后续同步(检查成员资格,无写入)耗时 15 分钟
这些指标旨在提供基准,性能可能因多种因素而异。这个基准是极端的,大多数实例没有这么多的用户或群组。磁盘速度、数据库性能、网络和 LDAP 服务器响应时间会影响这些指标。

回复

使用道具 举报

意见建议

Email:forum@gitlab.cn
  • 关注公众号
  • 添加专业顾问
Copyright © 2001-2024 极狐GitLab论坛 版权所有 All Rights Reserved. 鄂ICP备2021008419号-1|鄂公网安备42018502006137号
关灯 快速发帖
扫一扫添加专业顾问
返回顶部
快速回复 返回顶部 返回列表