极狐GitLab 令牌概览
Tier: 基础版, 专业版, 旗舰版
Offering: JihuLab.com, 私有化部署
本文档列出了极狐 GitLab 中使用的令牌,它们的用途以及适用的安全指导。
安全注意事项
为了保持令牌的安全:
- 像对待密码一样对待令牌,并保证其安全。
- 创建范围令牌时,使用最有限的范围,以减少意外泄露令牌的影响。
- 如果不同的进程需要不同的范围(例如,读取和写入),请考虑使用单独的令牌,每个范围一个。如果一个令牌泄露,它提供的访问权限会比具有广泛范围的单个令牌(如完整 API 访问)更少。
- 创建令牌时,考虑在任务完成后设置令牌的过期时间。例如,如果您需要执行一次性导入,请将令牌设置为在几个小时后过期。
- 如果您设置了一个演示环境来展示您正在进行的项目,并且您录制了一段视频或写了一篇博文来描述该项目,请确保不要意外泄露密钥。演示结束后,撤销演示期间创建的所有密钥。
- 将令牌添加到 URL 中可能存在安全风险。相反,可以使用类似 Private-Token 的头部传递令牌。
- 当使用 URL 中的令牌进行克隆或添加远程时,Git 会将 URL 以明文形式写入其 .git/config 文件。
- URL 通常会被代理和应用服务器记录,这可能会将这些凭据泄露给系统管理员。
- 您可以使用 Git 凭据存储 存储令牌。
- 定期审查所有类型的活动访问令牌,并撤销任何不需要的令牌。
不要:
- 将令牌以明文形式存储在您的项目中。如果令牌是极狐 GitLab CI/CD 的外部密钥,请查看如何 在 CI/CD 中使用外部密钥 的建议。
- 在问题、MR 描述、评论或任何其他自由文本输入中粘贴代码、控制台命令或日志输出时包括令牌。
- 在控制台日志或产物中记录凭据。考虑 保护 和 隐藏 您的凭据。
CI/CD 中的令牌
尽可能避免将个人访问令牌用作 CI/CD 变量,因为它们的范围很广。如果 CI/CD 作业需要访问其他资源,请使用以下选项之一,按访问范围从小到大排序:
- 作业令牌(最低访问范围)
- 项目令牌
- 群组令牌
有关 CI/CD 变量安全性 的其他建议包括:
个人访问令牌
您可以创建 个人访问令牌 来进行身份验证:
- 极狐 GitLab API。
- 极狐 GitLab 仓库。
- 极狐 GitLab 注册表。
您可以限制个人访问令牌的范围和到期日期。默认情况下,它们继承创建它们的用户的权限。
您可以使用个人访问令牌 API 来编程地执行操作,例如 旋转个人访问令牌。
当您的个人访问令牌即将过期时,您会 收到一封电子邮件。
在考虑需要权限令牌的 CI/CD 作业时,尽量避免使用个人访问令牌,尤其是在将其存储为 CI/CD 变量时。CI/CD 作业令牌和项目访问令牌通常可以以更小的风险实现相同的结果。
OAuth 2.0 令牌
极狐 GitLab 可以作为一个 OAuth 2.0 提供商,允许其他服务代表用户访问极狐 GitLab API。
您可以限制 OAuth 2.0 令牌的范围和生命周期。
模拟令牌
模拟令牌 是一种特殊类型的个人访问令牌。它只能由管理员为特定用户创建。模拟令牌可以帮助您构建以特定用户身份通过极狐 GitLab API、仓库和极狐 GitLab 注册表进行身份验证的应用程序或脚本。
您可以限制模拟令牌的范围并设置其过期日期。
项目访问令牌
项目访问令牌 限定于项目。与个人访问令牌一样,您可以使用它们进行身份验证:
- 极狐 GitLab API。
- 极狐 GitLab 仓库。
- 极狐 GitLab 注册表。
您可以限制项目访问令牌的范围和到期日期。当您创建项目访问令牌时,极狐 GitLab 会创建一个 项目的机器人用户。项目的机器人用户是服务帐户,不算作许可座位。
您可以使用 项目访问令牌 API 编程地执行操作,例如 旋转项目访问令牌。
具有至少维护者角色的项目成员在项目访问令牌即将过期时会 收到电子邮件。
群组访问令牌
群组访问令牌 限定于群组。与个人访问令牌一样,您可以使用它们进行身份验证:
- 极狐 GitLab API。
- 极狐 GitLab 仓库。
- 极狐 GitLab 注册表。
您可以限制群组访问令牌的范围和到期日期。当您创建群组访问令牌时,极狐 GitLab 会创建一个 群组的机器人用户。群组的机器人用户是服务帐户,不算作许可座位。
您可以使用 群组访问令牌 API 编程地执行操作,例如 旋转群组访问令牌。
具有所有者角色的群组成员在群组访问令牌即将过期时会 收到电子邮件。
部署令牌
部署令牌 允许您在没有用户和密码的情况下克隆、推送和拉取项目的软件包和容器注册表镜像。部署令牌不能用于极狐 GitLab API。
要管理部署令牌,您必须是至少具有维护者角色的项目成员。
部署密钥
部署密钥 通过将 SSH 公钥导入您的极狐 GitLab 实例来允许对您的仓库进行只读或读写访问。部署密钥不能用于极狐 GitLab API 或注册表。
您可以使用部署密钥克隆仓库到您的持续集成服务器,而无需设置虚假用户帐户。
要为项目添加或启用部署密钥,您必须至少具有维护者角色。
Runner 身份验证令牌
在极狐 GitLab 16.0 及更高版本中,您可以使用 runner 身份验证令牌而不是 runner 注册令牌来注册 runner。Runner 注册令牌在 弃用。
创建 runner 及其配置后,您会收到一个 runner 身份验证令牌,用于注册 runner。Runner 身份验证令牌存储在本地 config.toml 文件中,您可以使用它来配置 runner。
Runner 使用 runner 身份验证令牌与极狐 GitLab 进行身份验证,当它从作业队列中接收作业时。Runner 与极狐 GitLab 进行身份验证后,会收到一个 作业令牌,它用于执行作业。
Runner 身份验证令牌保留在 runner 机器上。以下执行器的执行环境仅能访问作业令牌,而不能访问 runner 身份验证令牌:
- Docker Machine
- Kubernetes
- VirtualBox
- Parallels
- SSH
对 runner 文件系统的恶意访问可能会暴露 config.toml 文件和 runner 身份验证令牌。攻击者可以使用 runner 身份验证令牌 克隆 runner。
您可以使用 runners API 旋转或撤销 runner 身份验证令牌。
Runner 注册令牌(已弃用)
Runner 注册令牌用于 注册 与极狐 GitLab 的 runner。群组或项目所有者或实例管理员可以通过极狐 GitLab 用户界面获得它们。注册令牌仅限于 runner 注册,没有进一步的范围。
您可以使用 runner 注册令牌添加执行项目或群组作业的 runners。Runner 可以访问项目的代码,因此在为项目或群组分配权限时要小心。
CI/CD 作业令牌
CI/CD 作业令牌是一个仅在作业期间有效的短期令牌。它为 CI/CD 作业提供访问有限数量 API 端点的权限。API 身份验证通过使用触发作业的用户的授权来使用作业令牌。
作业令牌因其短暂的生命周期和有限的范围而受到保护。如果多个作业在同一台机器上运行(例如,使用 shell runner),则该令牌可能会泄露。您可以使用 项目允许列表 进一步限制作业令牌可以访问的内容。在 Docker Machine runners 上,您应该配置 MaxBuilds=1 以确保 runner 机器仅运行一个构建,并在之后被销毁。配置需要时间,因此此配置可能会影响性能。
极狐 GitLab 集群代理令牌
当您 注册一个极狐 GitLab Kubernetes 代理 时,极狐 GitLab 会生成一个访问令牌来验证集群代理与极狐 GitLab 的身份。
要撤销此集群代理令牌,您可以选择:
对于这两种方法,您必须知道令牌、代理和项目 ID。要查找此信息,请使用 Rails 控制台:
ruby1# 查找令牌 ID 2Clusters::AgentToken.find_by_token('glagent-xxx').id 3 4# 查找代理 ID 5Clusters::AgentToken.find_by_token('glagent-xxx').agent.id 6=> 1234 7 8# 查找项目 ID 9Clusters::AgentToken.find_by_token('glagent-xxx').agent.project_id 10=> 12345
您还可以直接在 Rails 控制台中撤销令牌:
ruby# 使用 RevokeService 撤销令牌,包括生成审计事件 Clusters::AgentTokens::RevokeService.new(token: Clusters::AgentToken.find_by_token('glagent-xxx'), current_user: User.find_by_username('admin-user')).execute # 手动撤销令牌,不生成审计事件 Clusters::AgentToken.find_by_token('glagent-xxx').revoke!
其他令牌
Feed 令牌
每个用户都有一个长效的 feed 令牌,不会过期。使用此令牌进行身份验证:
- RSS 阅读器,用于加载个性化 RSS feed。
- 日历应用程序,用于加载个性化日历。
您不能使用此令牌访问任何其他数据。
您可以对所有 feed 使用用户作用域的 feed 令牌。然而,feed 和日历 URL 是用一个只针对单个 feed 的不同令牌生成的。
任何拥有您的令牌的人都可以查看您的 feed 活动,包括机密议题,就像他们是您一样。如果您认为您的令牌已泄露,请立即 重置令牌。
禁用 feed 令牌
先决条件:
- 您必须是管理员。
- 在左侧边栏的底部,选择 管理员。
- 选择 设置 > 常规。
- 展开 可见性和访问控制。
- 在 Feed 令牌 下,选择 禁用 feed 令牌 复选框,然后选择 保存更改。
收件电子邮件令牌
每个用户都有一个不需过期的收件电子邮件令牌。令牌包含在与个人项目关联的电子邮件地址中。您可以使用此令牌 通过电子邮件创建新议题。
您不能使用此令牌访问任何其他数据。任何拥有您的令牌的人都可以创建议题和合并请求,就像他们是您一样。如果您认为您的令牌已泄露,请立即重置令牌。
可用范围
此表显示每种令牌的默认范围。对于某些令牌,您可以在创建令牌时进一步限制范围。
| 令牌名称 | API 访问 | 注册表访问 | 仓库访问 |
|---|---|---|---|
| 个人访问令牌 | 是 | 是 | 是 |
| OAuth 2.0 令牌 | 是 | 否 | 是 |
| 模拟令牌 | 是 | 是 | 是 |
| 项目访问令牌 | 是1 | 是1 | 是1 |
| 群组访问令牌 | 是2 | 是2 | 是2 |
| 部署令牌 | 否 | 是 | 是 |
| 部署密钥 | 否 | 否 | 是 |
| Runner 注册令牌 | 否 | 否 | 有限3 |
| Runner 身份验证令牌 | 否 | 否 | 有限3 |
| 作业令牌 | 有限4 | 否 | 是 |
脚注:
- 限定于一个项目。
- 限定于一个群组。
- Runner 注册和身份验证令牌不提供对仓库的直接访问,但可以用于注册和验证可以执行具有仓库访问权限的作业的新 runners。
- 仅限于 某些端点。
令牌前缀
下表显示了每种令牌类型的前缀。
| 令牌名称 | 前缀 |
|---|---|
| 个人访问令牌 | glpat- |
| OAuth 应用程序密钥 | gloas- |
| 模拟令牌 | glpat- |
| 项目访问令牌 | glpat- |
| 群组访问令牌 | glpat- |
| 部署令牌 | gldt- (在极狐 GitLab 16.7 中添加) |
| Runner 身份验证令牌 | glrt- 或 glrtr-(如果通过注册令牌创建) |
| CI/CD 作业令牌 | glcbt- • (在极狐 GitLab 16.8 中引入,使用名为 prefix_ci_build_tokens 的功能标志 • (在极狐 GitLab 16.9 中 GA。删除了功能标志 prefix_ci_build_tokens。) |
| 触发令牌 | glptt- |
| Feed 令牌 | glft- |
| 收件邮件令牌 | glimt- |
| 极狐 GitLab Kubernetes 代理令牌 | glagent- |
| 极狐 GitLab 会话 Cookie | _gitlab_session= |
| SCIM 令牌 | glsoat- • (在极狐 GitLab 16.8 中引入,使用名为 prefix_scim_tokens 的功能标志。默认禁用。) • (在极狐 GitLab 16.9 中 GA。删除了功能标志 prefix_scim_tokens。) |
| 功能标志客户端令牌 | glffct- |