部署令牌

  • 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 容器镜像仓库:

shell
echo "$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_USERCI_DEPLOY_PASSWORD CI/CD 变量设置为群组部署令牌的名称和令牌。

gitlab-deploy-token 在群组中定义时,CI_DEPLOY_USERCI_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。有关更多信息,请参阅 与注册表认证

创建部署令牌#

创建部署令牌以自动化可以独立于用户账户运行的部署任务。

先决条件:

  • 要创建群组部署令牌,您必须具有群组的拥有者角色。
  • 要创建项目部署令牌,您必须至少具有项目的维护者角色。
  1. 在左侧侧边栏中选择 搜索或转到,然后找到您的项目或群组。
  2. 选择 设置 > 存储库
  3. 展开 部署令牌
  4. 选择 添加令牌
  5. 完成字段,并选择所需的 范围
  6. 选择 创建部署令牌

记录部署令牌的值。离开或刷新页面后,您无法再次访问它

撤销部署令牌#

当不再需要时撤销令牌。

先决条件:

  • 要撤销群组部署令牌,您必须具有群组的拥有者角色。
  • 要撤销项目部署令牌,您必须至少具有项目的维护者角色。

要撤销部署令牌:

  1. 在左侧侧边栏中选择 搜索或转到,然后找到您的项目或群组。
  2. 选择 设置 > 存储库
  3. 展开 部署令牌
  4. 活动部署令牌 部分,选择要撤销的令牌旁边的 撤销

克隆存储库#

您可以使用部署令牌来克隆存储库。

先决条件:

  • 具有 read_repository 范围的部署令牌。

使用部署令牌克隆存储库的示例:

shell
git clone https://<username>:<deploy_token>@gitlab.example.com/tanuki/awesome_project.git

从容器镜像仓库中拉取图像#

您可以使用部署令牌来从容器镜像仓库中拉取图像。

先决条件:

  • 具有 read_registry 范围的部署令牌。

使用部署令牌从容器镜像仓库中拉取图像的示例:

shell
echo "$DEPLOY_TOKEN" | docker login -u <username> --password-stdin registry.example.com docker pull $CONTAINER_TEST_IMAGE

向容器镜像仓库推送图像#

您可以使用部署令牌向容器镜像仓库推送图像。

先决条件:

  • 具有 read_registrywrite_registry 范围的部署令牌。

使用部署令牌向容器镜像仓库推送图像的示例:

shell
echo "$DEPLOY_TOKEN" | docker login -u <username> --password-stdin registry.example.com docker push $CONTAINER_TEST_IMAGE

从软件包注册表中拉取软件包#

您可以使用部署令牌从软件包注册表中拉取软件包。

先决条件:

  • 具有 read_package_registry 范围的部署令牌。

对于 您选择的软件包类型,请遵循部署令牌的认证说明。

从极狐GitLab 注册表安装 NuGet 软件包的示例:

shell
nuget 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 软件包到软件包注册表的示例:

shell
nuget 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_registrywrite_registry 范围的部署令牌。

请遵循依赖代理的 认证说明