部署令牌
- Tier: 基础版,专业版,旗舰版
- Offering: JihuLab.com, 私有化部署
极狐GitLab 部署令牌提供对极狐GitLab 资源的安全访问,而无需将权限绑定到个人用户账户。使用它们进行 Git 操作、容器镜像仓库和软件包注册表,为您的部署自动化提供所需的准确访问。
使用部署令牌,您可以:
- 通过从自动化系统中移除个人凭证来实现更安全的部署
- 使用每个令牌的特定权限进行细粒度访问控制
- 使用内置认证变量简化 CI/CD 流水线
- 可靠的部署过程不会因团队成员更改而中断
- 通过专用令牌身份跟踪部署来获得更好的审计跟踪
- 与外部构建系统和部署工具的无缝集成
部署令牌是一对值:
- 用户名:HTTP 认证框架中的 username。默认的用户名格式是 gitlab+deploy-token-{n}。您可以在创建部署令牌时指定自定义用户名。
- 令牌:HTTP 认证框架中的 password。
部署令牌不支持 SSH 认证。
您可以使用部署令牌进行 HTTP 认证到以下端点:
- 极狐GitLab 软件包注册表公共 API。
- Git 命令。
您可以在项目或群组级别创建部署令牌:
- 项目部署令牌:权限仅适用于项目。
- 群组部署令牌:权限适用于群组中的所有项目。
默认情况下,部署令牌不会过期。您可以在创建时选择设置过期日期。过期发生在该日期的 UTC 午夜。
如果启用了 外部授权,则不能使用新的或现有的部署令牌进行 Git 操作和软件包注册表操作。
范围
部署令牌的范围决定了它可以执行的操作。
范围 | 描述 |
---|---|
read_repository | 使用 git clone 对存储库的只读访问。 |
read_registry | 访问项目的 容器镜像仓库 中图像的只读访问。 |
write_registry | 对项目的 容器镜像仓库 的写入访问(推送)。您需要同时具备读取和写入权限才能推送图像。 |
read_virtual_registry | 如果项目是私有的并且需要授权,则通过 依赖代理 授予容器图像的只读(拉取)访问。仅在启用了依赖代理时可用。 |
write_virtual_registry | 如果项目是私有的并且需要授权,则通过 依赖代理 授予容器图像的读取(拉取)、写入(推送)和删除访问。仅在启用了依赖代理时可用。 |
read_package_registry | 对项目的软件包注册表的只读访问。 |
write_package_registry | 对项目的软件包注册表的写入访问。 |
极狐GitLab 部署令牌
History
- 支持在群组级别的 gitlab-deploy-token 在极狐GitLab 15.1 中引入,使用名为 ci_variable_for_group_gitlab_deploy_token 的功能标志。默认启用。
- 极狐GitLab 15.4 中删除了功能标志 ci_variable_for_group_gitlab_deploy_token。
极狐GitLab 部署令牌是一种特殊类型的部署令牌。如果您创建名为 gitlab-deploy-token 的部署令牌,则部署令牌会自动作为变量暴露给项目 CI/CD 作业:
- CI_DEPLOY_USER: 用户名
- CI_DEPLOY_PASSWORD: 令牌
例如,要使用极狐GitLab 令牌登录到您的极狐GitLab 容器镜像仓库:
shellecho "$CI_DEPLOY_PASSWORD" | docker login $CI_REGISTRY -u $CI_DEPLOY_USER --password-stdin
在极狐GitLab 15.0 及更早版本中,gitlab-deploy-token 部署令牌的特殊处理不适用于群组部署令牌。要使群组部署令牌可用于 CI/CD 作业,请在 设置 > CI/CD > 变量 中将 CI_DEPLOY_USER 和 CI_DEPLOY_PASSWORD CI/CD 变量设置为群组部署令牌的名称和令牌。
当 gitlab-deploy-token 在群组中定义时,CI_DEPLOY_USER 和 CI_DEPLOY_PASSWORD CI/CD 变量仅适用于群组的直接子项目。
极狐GitLab 部署令牌安全性
极狐GitLab 部署令牌是长期有效的,这使得它们对攻击者具有吸引力。
为了防止令牌泄露,您还应该配置您的 runners 以确保安全:
- 如果机器被重复使用,请避免使用 Docker privileged 模式。
- 当作业在同一机器上运行时,请避免使用 shell 执行器。
不安全的极狐GitLab Runner 配置会增加其他作业令牌被盗的风险。
极狐GitLab 公共 API
部署令牌不能用于极狐GitLab 公共 API。然而,您可以在某些端点使用部署令牌,例如来自软件包注册表的端点。您可以通过 URL 中包含字符串 packages/<format> 来判断端点属于软件包注册表。例如:https://gitlab.example.com/api/v4/projects/24/packages/generic/my_package/0.0.1/file.txt。有关更多信息,请参阅 与注册表认证。
创建部署令牌
创建部署令牌以自动化可以独立于用户账户运行的部署任务。
先决条件:
- 要创建群组部署令牌,您必须具有群组的拥有者角色。
- 要创建项目部署令牌,您必须至少具有项目的维护者角色。
- 在左侧侧边栏中选择 搜索或转到,然后找到您的项目或群组。
- 选择 设置 > 存储库。
- 展开 部署令牌。
- 选择 添加令牌。
- 完成字段,并选择所需的 范围。
- 选择 创建部署令牌。
记录部署令牌的值。离开或刷新页面后,您无法再次访问它。
撤销部署令牌
当不再需要时撤销令牌。
先决条件:
- 要撤销群组部署令牌,您必须具有群组的拥有者角色。
- 要撤销项目部署令牌,您必须至少具有项目的维护者角色。
要撤销部署令牌:
- 在左侧侧边栏中选择 搜索或转到,然后找到您的项目或群组。
- 选择 设置 > 存储库。
- 展开 部署令牌。
- 在 活动部署令牌 部分,选择要撤销的令牌旁边的 撤销。
克隆存储库
您可以使用部署令牌来克隆存储库。
先决条件:
- 具有 read_repository 范围的部署令牌。
使用部署令牌克隆存储库的示例:
shellgit clone https://<username>:<deploy_token>@gitlab.example.com/tanuki/awesome_project.git
从容器镜像仓库中拉取图像
您可以使用部署令牌来从容器镜像仓库中拉取图像。
先决条件:
- 具有 read_registry 范围的部署令牌。
使用部署令牌从容器镜像仓库中拉取图像的示例:
shellecho "$DEPLOY_TOKEN" | docker login -u <username> --password-stdin registry.example.com docker pull $CONTAINER_TEST_IMAGE
向容器镜像仓库推送图像
您可以使用部署令牌向容器镜像仓库推送图像。
先决条件:
- 具有 read_registry 和 write_registry 范围的部署令牌。
使用部署令牌向容器镜像仓库推送图像的示例:
shellecho "$DEPLOY_TOKEN" | docker login -u <username> --password-stdin registry.example.com docker push $CONTAINER_TEST_IMAGE
从软件包注册表中拉取软件包
您可以使用部署令牌从软件包注册表中拉取软件包。
先决条件:
- 具有 read_package_registry 范围的部署令牌。
对于 您选择的软件包类型,请遵循部署令牌的认证说明。
从极狐GitLab 注册表安装 NuGet 软件包的示例:
shellnuget source Add -Name GitLab -Source "https://gitlab.example.com/api/v4/projects/10/packages/nuget/index.json" -UserName <username> -Password <deploy_token> nuget install mypkg.nupkg
向软件包注册表推送软件包
您可以使用部署令牌向极狐GitLab 软件包注册表推送软件包。
先决条件:
- 具有 write_package_registry 范围的部署令牌。
对于 您选择的软件包类型,请遵循部署令牌的认证说明。
发布 NuGet 软件包到软件包注册表的示例:
shellnuget source Add -Name GitLab -Source "https://gitlab.example.com/api/v4/projects/10/packages/nuget/index.json" -UserName <username> -Password <deploy_token> nuget push mypkg.nupkg -Source GitLab
从依赖代理中拉取图像
您可以使用部署令牌从依赖代理中拉取图像。
先决条件:
- 具有 read_registry 和 write_registry 范围的部署令牌。
请遵循依赖代理的 认证说明。