- 个人访问令牌
- OAuth2 令牌
- 模拟令牌
- 项目访问令牌
- 群组访问令牌
- 部署令牌
- 部署密钥
- Runner 注册令牌
- Runner 身份验证令牌(也称为 runner 令牌)
- CI/CD 作业令牌
- 可用范围
- 安全注意事项
极狐GitLab 令牌概览
本文档列出了极狐GitLab 中使用的令牌、它们的用途以及安全指南(如适用)。
个人访问令牌
您可以创建个人访问令牌,进行以下身份验证:
- 极狐GitLab API。
- 极狐GitLab 仓库。
- 极狐GitLab registry。
您可以限制个人访问令牌的范围和到期日期。默认情况下,它们从创建它们的用户那里继承权限。
OAuth2 令牌
极狐GitLab 可以充当 OAuth2 provider,允许其他服务代表用户访问极狐GitLab API。
您可以限制 OAuth2 令牌的范围和生命周期。
模拟令牌
模拟令牌是一种特殊类型的个人访问令牌。它只能由管理员为特定用户创建。模拟令牌可以帮助您构建应用程序或脚本,以特定用户身份使用极狐GitLab API、仓库和 registry 进行身份验证。
您可以限制模拟令牌的范围并设置到期日期。
项目访问令牌
项目访问令牌的范围为项目。与个人访问令牌一样,您可以使用它们进行以下身份验证:
- 极狐GitLab API。
- 极狐GitLab 仓库。
- 极狐GitLab registry。
您可以限制项目访问令牌的范围和到期日期。当您创建项目访问令牌时,极狐GitLab 会创建一个用于项目的机器人用户。 项目的 Bot 用户是服务帐户,不计入许可席位。
群组访问令牌
群组访问令牌的范围为群组。与个人访问令牌一样,您可以使用它们进行身份验证:
- 极狐GitLab API。
- 极狐GitLab 仓库。
- 极狐GitLab registry。
您可以限制群组访问令牌的范围和到期日期。当您创建群组访问令牌时,极狐GitLab 会创建一个用于群组的机器人用户。 群组的 Bot 用户是服务帐户,不计入许可席位。
部署令牌
部署令牌允许您在没有用户和密码的情况下,下载(git clone
)或推送、拉取项目的软件包和容器镜像库镜像。部署令牌不能与极狐GitLab API 一起使用。部署令牌可以由项目维护者和所有者管理。
部署密钥
部署密钥通过将 SSH 公钥导入极狐GitLab 实例,允许对仓库进行只读或读写访问。部署密钥不能与极狐GitLab API 或 registry 一起使用。
例如,这对于将仓库克隆到您的持续集成 (CI) 服务器很有用。通过使用部署密钥,您不必设置虚假用户帐户。
项目维护者和所有者可以为项目仓库添加或启用部署密钥。
Runner 注册令牌
Runner 注册令牌用于向极狐GitLab 注册 runner。群组或项目的所有者、实例管理员可以通过极狐GitLab 用户界面获取它们。注册令牌仅限于 runner 注册,没有其它使用范围。
您可以使用 runner 注册令牌添加在项目或群组中执行作业的 runner。Runner 可以访问项目的代码,因此在分配项目和群组级别的权限时要小心。
Runner 身份验证令牌(也称为 runner 令牌)
注册后,runner 会收到一个身份验证令牌,当从作业队列中提取作业时,它会使用该令牌对极狐GitLab 进行身份验证。身份验证令牌本地存储在 runner 的 config.toml
文件中。
在通过极狐GitLab 进行身份验证后,runner 会收到一个作业令牌,它用于执行作业。
在使用 Docker Machine/Kubernetes/VirtualBox/Parallels/SSH 执行器的情况下,执行环境无法访问 runner 身份验证令牌,因为它保留在 runner 机器上。他们只能访问作业令牌,这是执行作业所必需的。
恶意访问 runner 的文件系统可能会暴露 config.toml
文件和身份验证令牌,从而允许攻击者克隆 runner。
CI/CD 作业令牌
CI/CD 作业令牌是一个短暂的令牌,仅在作业期间有效。它使 CI/CD 作业可以访问有限数量的 API 端点。 API 身份验证通过使用触发作业的用户的授权,使用作业令牌。
作业令牌因其生命周期短且范围有限而受到保护。如果多个作业在同一台机器上运行(例如使用 shell runner),则可能会泄漏。在 Docker 机器 runner 上,建议配置 MaxBuilds=1
,确保 runner 机器只运行一个构建并在之后被销毁。这可能会影响性能,因为配置机器需要一些时间。
可用范围
此表显示每个令牌的可用范围。可以在创建令牌时进一步限制范围。
API 访问 | Registry 访问 | 仓库访问 | |
---|---|---|---|
个人访问令牌 | ✅ | ✅ | ✅ |
OAuth2 令牌 | ✅ | 🚫 | ✅ |
模拟令牌 | ✅ | ✅ | ✅ |
项目访问令牌 | ✅(1) | ✅(1) | ✅(1) |
群组访问令牌 | ✅(2) | ✅(2) | ✅(2) |
部署令牌 | 🚫 | ✅ | ✅ |
部署密钥 | 🚫 | 🚫 | ✅ |
Runner 注册令牌 | 🚫 | 🚫 | ✴️(3) |
Runner 验证令牌 | 🚫 | 🚫 | ✴️(3) |
作业令牌 | ✴️(4) | 🚫 | ✅ |
- 仅限于一个项目。
- 仅限于一个群组。
- Runner 注册和身份验证令牌不提供对仓库的直接访问,但可用于注册和验证一个新 runner,该 runner 可以执行可以访问仓库的作业。
- 仅限于某些端点。
安全注意事项
访问令牌应被视为密码并保持安全。
将它们添加到 URL 会带来安全风险。在克隆或添加远端时尤其如此,因为 Git 然后将 URL 以纯文本形式写入其 .git/config
文件。URL 通常也由代理和应用程序服务器记录,这使得系统管理员可以看到这些凭据。
相反,API 调用可以使用标头传递访问令牌,例如 Private-Token
header。
也可以使用 Git 凭据存储存储令牌。
令牌不应提交到您的源代码。相反,请考虑一种方法,例如在 CI 中使用外部机密。
创建范围令牌时,请考虑使用尽可能有限的范围,以减少意外泄漏令牌的影响。
创建令牌时,请考虑设置一个在任务完成时过期的令牌。例如,如果执行一次性导入,请将令牌设置为几小时或一天后过期。这减少了意外泄露的令牌的影响,因为它在过期时是无用的。