InfoGrab DocsInfoGrab Docs

액세스 토큰 Rake 작업

요약

GitLab 16.0에서 백그라운드 마이그레이션을 통해 만료되지 않은 모든 개인, 프로젝트 및 그룹 액세스 토큰에 해당 토큰이 생성된 후 1년으로 설정된 만료일이 부여되었습니다. 이 마이그레이션의 영향을 받을 수 있는 토큰을 식별하기 위해 모든 액세스 토큰을 분석하고 가장 일반적인 만료일 상위 10개를 표시하는 Rake 작업을 실행할 수 있습니다:

히스토리
  • GitLab 17.2에서 도입되었습니다.

토큰 만료일 분석#

GitLab 16.0에서 백그라운드 마이그레이션을 통해 만료되지 않은 모든 개인, 프로젝트 및 그룹 액세스 토큰에 해당 토큰이 생성된 후 1년으로 설정된 만료일이 부여되었습니다.

이 마이그레이션의 영향을 받을 수 있는 토큰을 식별하기 위해 모든 액세스 토큰을 분석하고 가장 일반적인 만료일 상위 10개를 표시하는 Rake 작업을 실행할 수 있습니다:

   gitlab-rake gitlab:tokens:analyze
   # Find the 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'
   sudo docker exec -it <container_name> /bin/bash
   gitlab-rake gitlab:tokens:analyze
   sudo RAILS_ENV=production -u git -H bundle exec rake gitlab:tokens:analyze

이 작업은 모든 액세스 토큰을 분석하고 만료일별로 그룹화합니다. 왼쪽 열은 만료일을 보여주고 오른쪽 열은 해당 만료일이 있는 토큰 수를 보여줍니다. 출력 예시:

======= Personal/Project/Group Access Token Expiration Migration =======
Started at: 2023-06-15 10:20:35 +0000
Finished  : 2023-06-15 10:23:01 +0000
===== Top 10 Personal/Project/Group Access Token Expiration Dates =====
| Expiration Date | Count |
|-----------------|-------|
| 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 만료일이 있음을 알 수 있습니다. 이는 마이그레이션이 2023-06-15에 실행된 이후 1년 후입니다. 이는 대부분의 이러한 토큰이 마이그레이션에 의해 할당되었음을 시사합니다. 그러나 같은 날짜로 다른 토큰이 수동으로 생성되었는지 확실히 알 수 있는 방법은 없습니다.

상위 10개 날짜에는 과거 날짜와 만료일이 없는 토큰에 대한 (none) 행이 포함될 수 있습니다. 대량 만료가 임박했는지 확인할 때는 개수만 보지 말고 날짜도 함께 확인하세요.

만료일 일괄 업데이트#

사전 요구 사항:

다음이 필요합니다:

  • 관리자 권한.
  • 대화형 터미널.

다음 Rake 작업을 실행하여 토큰의 만료일을 일괄 연장하거나 제거합니다:

  1. 도구를 실행합니다:

   gitlab-rake gitlab:tokens:edit
   # Find the 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'
   sudo docker exec -it <container_name> /bin/bash
   gitlab-rake gitlab:tokens:edit
   sudo RAILS_ENV=production -u git -H bundle exec rake gitlab:tokens:edit

도구가 시작되면 분석 단계의 출력과 만료일 수정에 대한 추가 프롬프트가 표시됩니다:

======= Personal/Project/Group Access Token Expiration Migration =======
Started at: 2023-06-15 10:20:35 +0000
Finished  : 2023-06-15 10:23:01 +0000
===== Top 10 Personal/Project/Group Access Token Expiration Dates =====
| Expiration Date | Count |
|-----------------|-------|
| 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   |
========================================================================
What do you want to do? (Press ↑/↓ arrow or 1-3 number to move and Enter to select)
‣ 1. Extend expiration date
  2. Remove expiration date
  3. Quit

만료일 연장#

이 작업은 폐기된 토큰과 위장(impersonation) 토큰을 포함한 모든 토큰에 선택한 만료일을 설정합니다. 작업을 확인하기 전에 표시되는 개수에는 이러한 토큰도 포함됩니다.

주어진 만료일과 일치하는 모든 토큰의 만료일을 연장하려면:

  1. 옵션 1, Extend expiration date를 선택합니다:

    What do you want to do?
    ‣ 1. Extend expiration date
      2. Remove expiration date
      3. Quit
    
  2. 도구는 나열된 만료일 중 하나를 선택하도록 요청합니다. 예를 들어:

    Select an expiration date (Press ↑/↓/←/→ arrow to move and Enter to select)
    ‣ 2024-05-14
      2017-12-31
      2018-01-01
      2016-12-31
      2017-08-31
      2017-06-30
    

    키보드의 화살표 키를 사용하여 날짜를 선택합니다. 중단하려면 아래로 스크롤하여 --> Abort를 선택합니다. Enter를 눌러 선택을 확인합니다:

    Select an expiration date
      2017-06-30
      2018-12-31
      2017-05-31
      2017-09-30
      2017-07-31
    ‣ --> Abort
    

    날짜를 선택하면 도구는 새 만료일을 묻습니다:

    What would you like the new expiration date to be? (2025-05-14) 2024-05-14
    

    기본값은 선택한 날짜로부터 1년 후입니다. Enter를 눌러 기본값을 사용하거나 YYYY-MM-DD 형식으로 날짜를 수동으로 입력합니다.

  3. 유효한 날짜를 입력한 후 도구는 한 번 더 확인을 요청합니다:

    Old expiration date: 2024-05-14
    New expiration date: 2025-05-14
    WARNING: This will now update 1565353 token(s). Are you sure? (y/N)
    

    y를 입력하면 도구는 선택한 만료일이 있는 모든 토큰의 만료일을 연장합니다.

    N을 입력하면 도구는 업데이트 작업을 중단하고 원래 분석 출력으로 돌아갑니다.

만료일 제거#

주어진 만료일과 일치하는 모든 토큰의 만료일을 제거하려면:

  1. 옵션 2, Remove expiration date를 선택합니다:

    What do you want to do?
      1. Extend expiration date
    ‣ 2. Remove expiration date
      3. Quit
    
  2. 도구는 테이블에서 만료일을 선택하도록 요청합니다. 예를 들어:

    Select an expiration date (Press ↑/↓/←/→ arrow to move and Enter to select)
    ‣ 2024-05-14
      2017-12-31
      2018-01-01
      2016-12-31
      2017-08-31
      2017-06-30
    

    키보드의 화살표 키를 사용하여 날짜를 선택합니다. 중단하려면 아래로 스크롤하여 --> Abort를 선택합니다. Enter를 눌러 선택을 확인합니다:

    Select an expiration date
      2017-06-30
      2018-12-31
      2017-05-31
      2017-09-30
      2017-07-31
    ‣ --> Abort
    
  3. 날짜를 선택한 후 도구는 선택을 확인하도록 요청합니다:

    WARNING: This will remove the expiration for tokens that expire on 2024-05-14.
    This will affect 1565353 tokens. Are you sure? (y/N)
    

    y를 입력하면 도구는 선택한 만료일이 있는 모든 토큰의 만료일을 제거합니다.

    N을 입력하면 도구는 업데이트 작업을 중단하고 첫 번째 메뉴로 돌아갑니다.

Rake 작업이 보고하지 않는 토큰 찾기#

gitlab:tokens:analyze 작업은 토큰을 만료일별로 그룹화하고 각 날짜를 공유하는 토큰이 몇 개인지 보고합니다. 개별 토큰을 나열하지는 않으며, 가장 많이 사용되는 상위 10개 날짜만 보고합니다.

개인 액세스 토큰의 경우 대신 개인 액세스 토큰 API를 사용하세요. 관리자는 인스턴스의 모든 개인 액세스 토큰을 나열하고 expires_beforeexpires_after로 필터링할 수 있습니다.

프로젝트 및 그룹 액세스 토큰 API는 단일 프로젝트 또는 그룹에 대해서만 만료일로 필터링합니다. 인스턴스 전체에서 프로젝트 및 그룹 액세스 토큰을 조회하려면 Rails 콘솔에서 다음 스크립트를 실행하세요.

주어진 날짜 범위 내에 만료되는 프로젝트 및 그룹 액세스 토큰을 나열하려면:

# Any duration works. For example: 1.week, 90.days, 6.months, 1.year.
date_range = 1.month

PersonalAccessToken.project_access_token.where(expires_at: Date.today .. Date.today + date_range).find_each do |token|
  token.user.members.each do |member|
    type = member.is_a?(GroupMember) ? 'Group' : 'Project'

    puts "Expiring #{type} access token in #{type} ID #{member.source_id}, Token ID: #{token.id}, Name: #{token.name}, Scopes: #{token.scopes}, Last used: #{token.last_used_at}"
  end
end

만료일이 없는 프로젝트 및 그룹 액세스 토큰을 나열하려면 expires_at 조건을 expires_at: nil로 바꾸고 메시지의 ExpiringNo expiration date for로 변경하세요.

CI/CD ID 토큰에 대한 사용자 지정 발급자 URL 구성 검증#

비공개 GitLab 인스턴스를 임시 자격 증명을 가져오기 위한 AWS의 OpenID Connect로 구성하는 경우, ci:validate_id_token_configuration Rake 작업을 사용하여 토큰 구성을 검증하세요:

bundle exec rake ci:validate_id_token_configuration

액세스 토큰 Rake 작업

GitLab v19.3
Tier: Free, Premium, Ultimate
Offering: GitLab Self-Managed
원문 보기

요약

GitLab 16.0에서 백그라운드 마이그레이션을 통해 만료되지 않은 모든 개인, 프로젝트 및 그룹 액세스 토큰에 해당 토큰이 생성된 후 1년으로 설정된 만료일이 부여되었습니다. 이 마이그레이션의 영향을 받을 수 있는 토큰을 식별하기 위해 모든 액세스 토큰을 분석하고 가장 일반적인 만료일 상위 10개를 표시하는 Rake 작업을 실행할 수 있습니다:

히스토리
  • GitLab 17.2에서 도입되었습니다.

토큰 만료일 분석#

GitLab 16.0에서 백그라운드 마이그레이션을 통해 만료되지 않은 모든 개인, 프로젝트 및 그룹 액세스 토큰에 해당 토큰이 생성된 후 1년으로 설정된 만료일이 부여되었습니다.

이 마이그레이션의 영향을 받을 수 있는 토큰을 식별하기 위해 모든 액세스 토큰을 분석하고 가장 일반적인 만료일 상위 10개를 표시하는 Rake 작업을 실행할 수 있습니다:

   gitlab-rake gitlab:tokens:analyze
   # Find the 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'
   sudo docker exec -it <container_name> /bin/bash
   gitlab-rake gitlab:tokens:analyze
   sudo RAILS_ENV=production -u git -H bundle exec rake gitlab:tokens:analyze

이 작업은 모든 액세스 토큰을 분석하고 만료일별로 그룹화합니다. 왼쪽 열은 만료일을 보여주고 오른쪽 열은 해당 만료일이 있는 토큰 수를 보여줍니다. 출력 예시:

======= Personal/Project/Group Access Token Expiration Migration =======
Started at: 2023-06-15 10:20:35 +0000
Finished  : 2023-06-15 10:23:01 +0000
===== Top 10 Personal/Project/Group Access Token Expiration Dates =====
| Expiration Date | Count |
|-----------------|-------|
| 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 만료일이 있음을 알 수 있습니다. 이는 마이그레이션이 2023-06-15에 실행된 이후 1년 후입니다. 이는 대부분의 이러한 토큰이 마이그레이션에 의해 할당되었음을 시사합니다. 그러나 같은 날짜로 다른 토큰이 수동으로 생성되었는지 확실히 알 수 있는 방법은 없습니다.

상위 10개 날짜에는 과거 날짜와 만료일이 없는 토큰에 대한 (none) 행이 포함될 수 있습니다. 대량 만료가 임박했는지 확인할 때는 개수만 보지 말고 날짜도 함께 확인하세요.

만료일 일괄 업데이트#

사전 요구 사항:

다음이 필요합니다:

  • 관리자 권한.
  • 대화형 터미널.

다음 Rake 작업을 실행하여 토큰의 만료일을 일괄 연장하거나 제거합니다:

  1. 도구를 실행합니다:

   gitlab-rake gitlab:tokens:edit
   # Find the 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'
   sudo docker exec -it <container_name> /bin/bash
   gitlab-rake gitlab:tokens:edit
   sudo RAILS_ENV=production -u git -H bundle exec rake gitlab:tokens:edit

도구가 시작되면 분석 단계의 출력과 만료일 수정에 대한 추가 프롬프트가 표시됩니다:

======= Personal/Project/Group Access Token Expiration Migration =======
Started at: 2023-06-15 10:20:35 +0000
Finished  : 2023-06-15 10:23:01 +0000
===== Top 10 Personal/Project/Group Access Token Expiration Dates =====
| Expiration Date | Count |
|-----------------|-------|
| 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   |
========================================================================
What do you want to do? (Press ↑/↓ arrow or 1-3 number to move and Enter to select)
‣ 1. Extend expiration date
  2. Remove expiration date
  3. Quit

만료일 연장#

이 작업은 폐기된 토큰과 위장(impersonation) 토큰을 포함한 모든 토큰에 선택한 만료일을 설정합니다. 작업을 확인하기 전에 표시되는 개수에는 이러한 토큰도 포함됩니다.

주어진 만료일과 일치하는 모든 토큰의 만료일을 연장하려면:

  1. 옵션 1, Extend expiration date를 선택합니다:

    What do you want to do?
    ‣ 1. Extend expiration date
      2. Remove expiration date
      3. Quit
    
  2. 도구는 나열된 만료일 중 하나를 선택하도록 요청합니다. 예를 들어:

    Select an expiration date (Press ↑/↓/←/→ arrow to move and Enter to select)
    ‣ 2024-05-14
      2017-12-31
      2018-01-01
      2016-12-31
      2017-08-31
      2017-06-30
    

    키보드의 화살표 키를 사용하여 날짜를 선택합니다. 중단하려면 아래로 스크롤하여 --> Abort를 선택합니다. Enter를 눌러 선택을 확인합니다:

    Select an expiration date
      2017-06-30
      2018-12-31
      2017-05-31
      2017-09-30
      2017-07-31
    ‣ --> Abort
    

    날짜를 선택하면 도구는 새 만료일을 묻습니다:

    What would you like the new expiration date to be? (2025-05-14) 2024-05-14
    

    기본값은 선택한 날짜로부터 1년 후입니다. Enter를 눌러 기본값을 사용하거나 YYYY-MM-DD 형식으로 날짜를 수동으로 입력합니다.

  3. 유효한 날짜를 입력한 후 도구는 한 번 더 확인을 요청합니다:

    Old expiration date: 2024-05-14
    New expiration date: 2025-05-14
    WARNING: This will now update 1565353 token(s). Are you sure? (y/N)
    

    y를 입력하면 도구는 선택한 만료일이 있는 모든 토큰의 만료일을 연장합니다.

    N을 입력하면 도구는 업데이트 작업을 중단하고 원래 분석 출력으로 돌아갑니다.

만료일 제거#

주어진 만료일과 일치하는 모든 토큰의 만료일을 제거하려면:

  1. 옵션 2, Remove expiration date를 선택합니다:

    What do you want to do?
      1. Extend expiration date
    ‣ 2. Remove expiration date
      3. Quit
    
  2. 도구는 테이블에서 만료일을 선택하도록 요청합니다. 예를 들어:

    Select an expiration date (Press ↑/↓/←/→ arrow to move and Enter to select)
    ‣ 2024-05-14
      2017-12-31
      2018-01-01
      2016-12-31
      2017-08-31
      2017-06-30
    

    키보드의 화살표 키를 사용하여 날짜를 선택합니다. 중단하려면 아래로 스크롤하여 --> Abort를 선택합니다. Enter를 눌러 선택을 확인합니다:

    Select an expiration date
      2017-06-30
      2018-12-31
      2017-05-31
      2017-09-30
      2017-07-31
    ‣ --> Abort
    
  3. 날짜를 선택한 후 도구는 선택을 확인하도록 요청합니다:

    WARNING: This will remove the expiration for tokens that expire on 2024-05-14.
    This will affect 1565353 tokens. Are you sure? (y/N)
    

    y를 입력하면 도구는 선택한 만료일이 있는 모든 토큰의 만료일을 제거합니다.

    N을 입력하면 도구는 업데이트 작업을 중단하고 첫 번째 메뉴로 돌아갑니다.

Rake 작업이 보고하지 않는 토큰 찾기#

gitlab:tokens:analyze 작업은 토큰을 만료일별로 그룹화하고 각 날짜를 공유하는 토큰이 몇 개인지 보고합니다. 개별 토큰을 나열하지는 않으며, 가장 많이 사용되는 상위 10개 날짜만 보고합니다.

개인 액세스 토큰의 경우 대신 개인 액세스 토큰 API를 사용하세요. 관리자는 인스턴스의 모든 개인 액세스 토큰을 나열하고 expires_beforeexpires_after로 필터링할 수 있습니다.

프로젝트 및 그룹 액세스 토큰 API는 단일 프로젝트 또는 그룹에 대해서만 만료일로 필터링합니다. 인스턴스 전체에서 프로젝트 및 그룹 액세스 토큰을 조회하려면 Rails 콘솔에서 다음 스크립트를 실행하세요.

주어진 날짜 범위 내에 만료되는 프로젝트 및 그룹 액세스 토큰을 나열하려면:

# Any duration works. For example: 1.week, 90.days, 6.months, 1.year.
date_range = 1.month

PersonalAccessToken.project_access_token.where(expires_at: Date.today .. Date.today + date_range).find_each do |token|
  token.user.members.each do |member|
    type = member.is_a?(GroupMember) ? 'Group' : 'Project'

    puts "Expiring #{type} access token in #{type} ID #{member.source_id}, Token ID: #{token.id}, Name: #{token.name}, Scopes: #{token.scopes}, Last used: #{token.last_used_at}"
  end
end

만료일이 없는 프로젝트 및 그룹 액세스 토큰을 나열하려면 expires_at 조건을 expires_at: nil로 바꾸고 메시지의 ExpiringNo expiration date for로 변경하세요.

CI/CD ID 토큰에 대한 사용자 지정 발급자 URL 구성 검증#

비공개 GitLab 인스턴스를 임시 자격 증명을 가져오기 위한 AWS의 OpenID Connect로 구성하는 경우, ci:validate_id_token_configuration Rake 작업을 사용하여 토큰 구성을 검증하세요:

bundle exec rake ci:validate_id_token_configuration