组访问令牌
- 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 实例上:
- 您可以在任何许可层级使用组访问令牌。如果您使用 Free 层级:
- 请审查关于 用户自助注册 的安全和合规策略。
- 考虑 限制组访问令牌的创建 以降低潜在的滥用风险。
- 如果设置了限制,组访问令牌受与个人访问令牌相同的 最大生命周期限制。
- 您可以在任何许可层级使用组访问令牌。如果您使用 Free 层级:
创建组访问令牌
扩展的最大允许生命周期可用性由功能标志控制。有关更多信息,请查看历史记录。
使用 UI
要创建组访问令牌:
- 在左侧边栏,选择 搜索或跳转 并找到您的组。
- 选择 设置 > 访问令牌。
- 选择 添加新令牌。
- 在 令牌名称 中,输入一个名称。令牌名称对任何有权限查看该组的用户都可见。
- 可选。在 令牌描述 中,输入令牌的描述。
- 在 过期日期 中,输入令牌的过期日期:
- 令牌在该日期午夜 UTC 过期。过期日期为 2024-01-01 的令牌在 2024-01-01 00:00:00 UTC 过期。
- 如果您不输入过期日期,过期日期将自动设置为当前日期后 365 天。
- 默认情况下,此日期最多可以是当前日期后 365 天。在 GitLab 17.6 或更高版本中,您可以将 此限制延长至 400 天。
- 实例范围的 最大生命周期 设置可以限制 GitLab Self-Managed 实例中的最大允许生命周期。
- 为令牌选择一个角色。
- 选择所需的 范围。
- 选择 创建组访问令牌。
将显示组访问令牌。请将组访问令牌保存在安全的地方。离开或刷新页面后,您将无法再次查看它。
使用 Rails 控制台
如果您是管理员,可以在 Rails 控制台中创建组访问令牌:
-
在 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 -
测试生成的组访问令牌是否有效:
撤销或轮换组访问令牌
在 GitLab 17.9 及更高版本中,您可以在访问令牌页面查看活动和非活动的组访问令牌。
非活动组访问令牌表显示已撤销和过期的令牌,直到它们被 自动删除。
要撤销或轮换组访问令牌:
- 在左侧边栏,选择 搜索或跳转 并找到您的组。
- 选择 设置 > 访问令牌。
- 对于相关令牌,选择 撤销 ( ) 或 轮换 ( )。
- 在确认对话框中,选择 撤销 或 轮换。
组访问令牌的范围
范围决定了您在使用组访问令牌进行身份验证时可以执行的操作。
| 范围 | 描述 |
|---|---|
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 轮换此令牌的权限。不允许轮换其他令牌。 |
限制组访问令牌的创建
为了限制潜在的滥用,您可以限制用户为组层次结构创建令牌。此设置仅可配置顶级组,并适用于每个下游子组和项目。任何现有的组访问令牌在过期日期之前或手动撤销之前都保持有效。
要限制组访问令牌的创建:
- 在左侧边栏,选择 搜索或跳转 并找到您的组。 此组必须是顶级组。
- 选择 设置 > 常规。
- 展开 权限和组功能。
- 在 权限 下,清除 用户可以在此组中创建项目访问令牌和组访问令牌 复选框。
- 选择 保存更改。
访问令牌过期
您的现有组访问令牌是否自动应用过期日期取决于您使用的 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}。例如,group_123_bot_4ffca233d8298ea1@noreply.example.com。
所有其他属性与 项目的机器人用户 相似。
令牌可用性
组访问令牌仅在付费订阅中可用,在试用订阅中不可用。有关更多信息,请参阅 GitLab 常见问题解答中的"包含内容"部分。