访问令牌 Rake 任务

DETAILS:
Tier: 基础版,专业版,旗舰版
Offering: 私有化部署

  • 引入于极狐GitLab 17.2。

分析令牌过期日期

在极狐GitLab 16.0 中,一项后台迁移为所有不失效的个人、项目和组访问令牌设置了一年后过期的日期。

为了识别哪些令牌可能受到了此迁移的影响,您可以运行一个 Rake 任务来分析所有访问令牌,并显示最常见的前十个过期日期:

::Tabs

:::TabTitle Linux 软件包 (Omnibus)

gitlab-rake gitlab:tokens:analyze

:::TabTitle Helm chart (Kubernetes)

# 查找 toolbox pod
kubectl --namespace <namespace> get pods -lapp=toolbox
kubectl exec -it <toolbox-pod-name> -- sh -c 'cd /srv/gitlab && bin/rake gitlab:tokens:analyze'

:::TabTitle Docker

sudo docker exec -it <container_name> /bin/bash
gitlab-rake gitlab:tokens:analyze

:::TabTitle 自编译 (source)

sudo RAILS_ENV=production -u git -H bundle exec rake gitlab:tokens:analyze

::EndTabs

这个任务会分析所有的访问令牌,并按过期日期进行分组。左列显示过期日期,右列显示有该过期日期的令牌数量。示例输出:

======= 个人/项目/组访问令牌过期迁移 =======
开始时间: 2023-06-15 10:20:35 +0000
结束时间: 2023-06-15 10:23:01 +0000
===== 前 10 个个人/项目/组访问令牌过期日期 =====
| 过期日期       | 数量 |
|-----------------|-------|
| 2024-06-15      | 1565353 |
| 2017-12-31      | 2508  |
| 2018-01-01      | 1008  |
| 2016-12-31      | 833   |
| 2017-08-31      | 705   |
| 2017-06-30      | 596   |
| 2018-12-31      | 548   |
| 2017-05-31      | 523   |
| 2017-09-30      | 520   |
| 2017-07-31      | 494   |
========================================================================

在这个例子中,您可以看到超过 150 万个访问令牌的过期日期为 2024-06-15,即迁移运行一年后的日期。这表明大多数这些令牌是由迁移分配的。然而,没有办法确定其他令牌是否是手动创建的具有相同日期。

批量更新过期日期

先决条件:

您必须:

  • 是管理员。
  • 有一个交互式终端。

运行以下 Rake 任务来批量扩展或移除令牌的过期日期:

  1. 运行工具:

::Tabs

:::TabTitle Linux 软件包 (Omnibus)

gitlab-rake gitlab:tokens:edit

:::TabTitle Helm chart (Kubernetes)

# 查找 toolbox pod
kubectl --namespace <namespace> get pods -lapp=toolbox
kubectl exec -it <toolbox-pod-name> -- sh -c 'cd /srv/gitlab && bin/rake gitlab:tokens:edit'

:::TabTitle Docker

sudo docker exec -it <container_name> /bin/bash
gitlab-rake gitlab:tokens:edit

:::TabTitle 自编译 (source)

sudo RAILS_ENV=production -u git -H bundle exec rake gitlab:tokens:edit

::EndTabs

工具启动后,它显示了来自分析步骤的输出,外加一个关于修改过期日期的提示:

======= 个人/项目/组访问令牌过期迁移 =======
开始时间: 2023-06-15 10:20:35 +0000
结束时间: 2023-06-15 10:23:01 +0000
===== 前 10 个个人/项目/组访问令牌过期日期 =====
| 过期日期       | 数量 |
|-----------------|-------|
| 2024-05-14      | 1565353 |
| 2017-12-31      | 2508  |
| 2018-01-01      | 1008  |
| 2016-12-31      | 833   |
| 2017-08-31      | 705   |
| 2017-06-30      | 596   |
| 2018-12-31      | 548   |
| 2017-05-31      | 523   |
| 2017-09-30      | 520   |
| 2017-07-31      | 494   |
========================================================================
您想要做什么?(按 ↑/↓ 箭头或 1-3 数字进行移动并按 Enter 选择)
‣ 1. 延长过期日期
  2. 移除过期日期
  3. 退出

延长过期日期

要延长所有与给定过期日期匹配的令牌的过期日期:

  1. 选择选项 1,延长过期日期

    您想要做什么?
    ‣ 1. 延长过期日期
      2. 移除过期日期
      3. 退出
    
  2. 工具要求您选择一个列出的过期日期。例如:

    选择一个过期日期(按 ↑/↓/←/→ 箭头移动并按 Enter 选择)
    ‣ 2024-05-14
      2017-12-31
      2018-01-01
      2016-12-31
      2017-08-31
      2017-06-30
    

    使用键盘上的箭头键选择一个日期。要中止,请滚动到底部并选择 --> Abort。按 Enter 确认您的选择:

    选择一个过期日期
      2017-06-30
      2018-12-31
      2017-05-31
      2017-09-30
      2017-07-31
    ‣ --> Abort
    

    如果您选择了一个日期,工具会提示您输入一个新的过期日期:

    您希望新的过期日期是什么?(2025-05-14)2024-05-14
    

    默认情况下是选择日期一年后。按 Enter 使用默认值,或者手动输入 YYYY-MM-DD 格式的日期。

  3. 输入有效日期后,工具会再次要求确认:

    旧过期日期: 2024-05-14
    新过期日期: 2025-05-14
    WARNING: 这将更新 1565353 个令牌。您确定吗?(y/N)
    

    如果您输入 y,工具会将所选过期日期的所有令牌的过期日期延长。

    如果您输入 N,工具将中止更新任务并返回原始分析输出。

移除过期日期

要移除所有与给定过期日期匹配的令牌的过期日期:

  1. 选择选项 2,移除过期日期

    您想要做什么?
      1. 延长过期日期
    ‣ 2. 移除过期日期
      3. 退出
    
  2. 工具要求您从表中选择一个过期日期。例如:

    选择一个过期日期(按 ↑/↓/←/→ 箭头移动并按 Enter 选择)
    ‣ 2024-05-14
      2017-12-31
      2018-01-01
      2016-12-31
      2017-08-31
      2017-06-30
    

    使用键盘上的箭头键选择一个日期。要中止,请滚动到底部并选择 --> Abort。按 Enter 确认您的选择:

    选择一个过期日期
      2017-06-30
      2018-12-31
      2017-05-31
      2017-09-30
      2017-07-31
    ‣ --> Abort
    
  3. 选择日期后,工具会提示您确认选择:

    WARNING: 这将移除过期日期为 2024-05-14 的令牌的过期日期。这将影响 1565353 个令牌。您确定吗?(y/N)
    

    如果您输入 y,工具会移除所选过期日期的所有令牌的过期日期。

    如果您输入 N,工具将中止更新任务并返回到第一个菜单。