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

使用组访问令牌,您可以使用单个令牌来:

  • 执行组相关的操作。
  • 管理组内的项目。

您可以使用组访问令牌进行身份验证:

  • 通过 GitLab API
  • 通过 Git over HTTPS 进行身份验证。使用:
    • 任意非空值作为用户名。
    • 组访问令牌作为密码。

组访问令牌与 项目访问令牌个人访问令牌 类似,但它们是与组而不是项目或用户关联的。

您不能使用组访问令牌创建其他组、项目或个人访问令牌。

组访问令牌继承为个人访问令牌配置的 默认前缀设置

可用性

  • 在 GitLab.com 上,如果您拥有 Premium 或 Ultimate 许可层级,可以使用组访问令牌,但不能使用 试用许可证
  • 在 GitLab Dedicated 和 GitLab Self-Managed 实例上:

创建组访问令牌

扩展的最大允许生命周期可用性由功能标志控制。有关更多信息,请查看历史记录。

在 GitLab 15.4 中 弃用 并在 GitLab 16.0 中 移除 了创建没有过期日期的组访问令牌的功能。有关为现有令牌添加过期日期的更多信息,请参阅 访问令牌过期 文档。

使用 UI

要创建组访问令牌:

  1. 在左侧边栏,选择 搜索或跳转 并找到您的组。
  2. 选择 设置 > 访问令牌
  3. 选择 添加新令牌
  4. 令牌名称 中,输入一个名称。令牌名称对任何有权限查看该组的用户都可见。
  5. 可选。在 令牌描述 中,输入令牌的描述。
  6. 过期日期 中,输入令牌的过期日期:
    • 令牌在该日期午夜 UTC 过期。过期日期为 2024-01-01 的令牌在 2024-01-01 00:00:00 UTC 过期。
    • 如果您不输入过期日期,过期日期将自动设置为当前日期后 365 天。
    • 默认情况下,此日期最多可以是当前日期后 365 天。在 GitLab 17.6 或更高版本中,您可以将 此限制延长至 400 天
    • 实例范围的 最大生命周期 设置可以限制 GitLab Self-Managed 实例中的最大允许生命周期。
  7. 为令牌选择一个角色。
  8. 选择所需的 范围
  9. 选择 创建组访问令牌

将显示组访问令牌。请将组访问令牌保存在安全的地方。离开或刷新页面后,您将无法再次查看它。

组访问令牌被视为 内部用户。 如果内部用户创建组访问令牌,该令牌能够访问所有设置为 内部 可见性的项目。

使用 Rails 控制台

如果您是管理员,可以在 Rails 控制台中创建组访问令牌:

  1. Rails 控制台 中运行以下命令:

    # 设置要使用的 GitLab 管理用户。如果用户 ID 1 不可用或不是管理员,请使用 'admin = User.admins.first' 来选择管理员。
    admin = User.find(1)
    
    # 设置您要为其创建令牌的组。例如,ID 为 109 的组。
    group = Group.find(109)
    
    # 创建组机器人用户。对于其他组访问令牌,用户名应为 `group_{group_id}_bot_{random_string}`,电子邮件地址为 `group_{group_id}_bot_{random_string}@noreply.{Gitlab.config.gitlab.host}`。
    random_string = SecureRandom.hex(16)
    service_response = Users::CreateService.new(admin, { name: 'group_token', username: "group_#{group.id}_bot_#{random_string}", email: "group_#{group.id}_bot_#{random_string}@noreply.#{Gitlab.config.gitlab.host}", user_type: :project_bot }).execute
    bot = service_response.payload[:user] if service_response.success?
    
    # 确认组机器人。
    bot.confirm
    
    # 将机器人添加到组中并分配所需角色。
    group.add_member(bot, :maintainer)
    
    # 为机器人创建个人访问令牌。
    token = bot.personal_access_tokens.create(scopes:[:api, :write_repository], name: 'group_token')
    
    # 获取令牌值。
    gtoken = token.token
  2. 测试生成的组访问令牌是否有效:

    1. PRIVATE-TOKEN 标头中使用组访问令牌与 GitLab REST API。例如:

    2. 使用组令牌通过 HTTPS 克隆组的项目

撤销或轮换组访问令牌

在 GitLab 17.9 及更高版本中,您可以在访问令牌页面查看活动和非活动的组访问令牌。

非活动组访问令牌表显示已撤销和过期的令牌,直到它们被 自动删除

要撤销或轮换组访问令牌:

  1. 在左侧边栏,选择 搜索或跳转 并找到您的组。
  2. 选择 设置 > 访问令牌
  3. 对于相关令牌,选择 撤销 ( remove ) 或 轮换 ( retry )。
  4. 在确认对话框中,选择 撤销轮换

组访问令牌的范围

范围决定了您在使用组访问令牌进行身份验证时可以执行的操作。

范围 描述
api 授予对范围组及相关项目 API 的完全读写访问权限,包括 容器注册表依赖代理包注册表
read_api 授予对范围组及相关项目 API 的读取访问权限,包括 包注册表
read_registry 如果组内的任何项目是私有的且需要授权,授予对 容器注册表 镜像的读取(拉取)权限。
write_registry 授予对 容器注册表 的写入(推送)权限。您需要同时具有读取和写入权限才能推送镜像。
read_virtual_registry 如果项目是私有的且需要授权,授予通过 依赖代理 对容器镜像的只读(拉取)访问权限。仅在启用依赖代理时可用。
write_virtual_registry 如果项目是私有的且需要授权,授予通过 依赖代理 对容器镜像的读取(拉取)、写入(推送)和删除访问权限。仅在启用依赖代理时可用。
read_repository 授予对组内所有仓库的读取(拉取)访问权限。
write_repository 授予对组内所有仓库的读写(拉取和推送)访问权限。
create_runner 授予在组中创建运行程序的权限。
manage_runner 授予在组中管理运行程序的权限。
ai_features 授予执行 GitLab Duo API 操作的权限。此范围设计用于与 GitLab Duo Plugin for JetBrains 配合使用。对于所有其他扩展,请参阅范围要求。
k8s_proxy 授予使用组中 Kubernetes 代理执行 Kubernetes API 调用的权限。
self_rotate 授予使用 个人访问令牌 API 轮换此令牌的权限。不允许轮换其他令牌。

限制组访问令牌的创建

为了限制潜在的滥用,您可以限制用户为组层次结构创建令牌。此设置仅可配置顶级组,并适用于每个下游子组和项目。任何现有的组访问令牌在过期日期之前或手动撤销之前都保持有效。

要限制组访问令牌的创建:

  1. 在左侧边栏,选择 搜索或跳转 并找到您的组。 此组必须是顶级组。
  2. 选择 设置 > 常规
  3. 展开 权限和组功能
  4. 权限 下,清除 用户可以在此组中创建项目访问令牌和组访问令牌 复选框。
  5. 选择 保存更改

访问令牌过期

您的现有组访问令牌是否自动应用过期日期取决于您使用的 GitLab 产品,以及您何时升级到 GitLab 16.0 或更高版本:

  • 在 GitLab.com 上,在 16.0 里程碑期间,没有过期日期的现有组访问令牌自动被赋予当前日期后 365 天的过期日期。
  • 在 GitLab Self-Managed 上,如果您从 GitLab 15.11 或更早版本升级到 GitLab 16.0 或更高版本:
    • 在 2024 年 7 月 23 日或之前,没有过期日期的现有组访问令牌自动被赋予当前日期后 365 天的过期日期。这是一个破坏性更改。
    • 在 2024 年 7 月 24 日或之后,没有过期日期的现有组访问令牌不会设置过期日期。

在 GitLab Self-Managed 上,如果您安装以下 GitLab 版本之一,您的现有组访问令牌不会自动应用过期日期:

  • 16.0.9
  • 16.1.7
  • 16.2.10
  • 16.3.8
  • 16.4.6
  • 16.5.9
  • 16.6.9
  • 16.7.9
  • 16.8.9
  • 16.9.10
  • 16.10.9
  • 16.11.7
  • 17.0.5
  • 17.1.3
  • 17.2.1

组访问令牌过期邮件

GitLab 每天在 UTC 1:00 运行一次检查,以识别即将在未来几天内过期的组访问令牌。拥有 Owner 角色的组成员在令牌在特定天数内过期时会收到电子邮件通知。天数因 GitLab 版本而异:

  • 在 GitLab 17.6 及更高版本中,当检查识别出组访问令牌将在未来 60 天内过期时,组所有者会收到电子邮件通知。当检查识别出组访问令牌将在未来 30 天内过期时,会发送额外的电子邮件。
  • 当检查识别出组访问令牌将在未来 7 天内过期时,组所有者会收到电子邮件通知。
  • 在 GitLab 17.7 及更高版本中,在组中继承 Owner 角色的成员也可以接收通知电子邮件。您可以通过更改以下内容来配置此功能:

您的过期访问令牌列在 非活动组访问令牌表 中,直到它们被 自动删除

组的机器人用户

组的机器人用户是 GitLab 创建的非计费用户。 每次您创建组访问令牌时,都会创建一个机器人用户并添加到组中。 这些机器人用户类似于 项目的机器人用户,但它们是添加到组而不是项目中。组的机器人用户:

  • 不是计费用户,因此不计入许可证限制。
  • 在组中最多可以拥有 Owner 角色。有关更多信息,请参阅 创建组访问令牌
  • 用户名设置为 group_{group_id}_bot_{random_string}。例如,group_123_bot_4ffca233d8298ea1
  • 电子邮件地址设置为 group_{group_id}_bot_{random_string}@noreply.{Gitlab.config.gitlab.host}。例如,[email protected]

所有其他属性与 项目的机器人用户 相似。

令牌可用性

组访问令牌仅在付费订阅中可用,在试用订阅中不可用。有关更多信息,请参阅 GitLab 常见问题解答中的"包含内容"部分

相关主题