サービスアカウントのパーソナルアクセストークン (PAT) のローテーション
サービスアカウントのパーソナルアクセストークン (PAT) ローテーション Runbook
この Runbook は、GitLab サービスアカウントのパーソナルアクセストークン (PAT) をローテーションするためのアプローチです。これらは、レガシー PAT (より広いスコープを使用) または fine-grained PAT (特定の境界とリソースにスコープされる) として設定できます。これ以降、パーソナルアクセストークンを PAT、単数形のパーソナルアクセストークンを PAT と呼びます。
1. なぜこれが重要か?
- サービスアカウントは PAT が期限切れになることがあり、その結果としてリソースへのアクセスが妨げられます。これにより API アクセス、パイプライン完了、個別のジョブの正常な実行と完了がブロックされます。
- この Runbook は、この問題に新しく対面する人を、または以前にこの問題に取り組んだことがあるが詳細を忘れた人をリマインダーとして、サービスアカウントの PAT ローテーションの問題を解決しようとする際の構造化された方法として意図されています。
2. 前提条件は?
- 影響を受けるサービスアカウントを見つけてください。あなたまたはチームの誰かが下のスクリーンショットのようなメールを受け取ることになるはずです:

- まだ完了していない場合、GitLab Security Service - Architecture - Inventory’s PAT expired のような Issue を作成してください。
- 下のように、1Password でサービスアカウントのログイン認証情報にアクセスできるか確認してください:

- アクセスがない場合、この Issue のようなアクセスリクエスト (AR) を提出してください。
3. 修正手順
ローテーションする前に、このトークンがレガシー PAT か fine-grained PAT かを確認してください。
GitLab.com で個人アカウントからログアウトしていることを確認してください。
1Password のサービスアカウント認証情報を使用して、それらで GitLab.com にログインしてください。
MFA OTP には 1Password の
one-time passwordパラメーターを使用してください。下のようなサービスアカウントのプロジェクトページに到達するはずです:

サービスアカウントのアイコンを選択し、下のように
Edit Profileをクリックしてください:
User settingsのAccess tokensをクリックしてください:- 既存のトークンが fine-grained PAT で、その境界や権限を変更しない場合: アクティブなトークンの隣で、縦の省略記号 (⋮) → Duplicate を選択してください。これにより、ほとんどの設定が事前に入力されたページに移動します。プロジェクト要件に応じてトークン名と有効期限を手動で調整する必要があります。標準的なトークンの有効期間は 1 年です。ステップ 8 に進んでください。
- そうでない場合 (レガシー PAT、または gPAT のスコープを変更する必要がある場合):
Add new tokenボタンをクリックし、ステップ 8 に進んでください。

期限切れになった以前のトークンと一致する
Token nameを追加してください。この場合はGitLab Security Service - Architecture - Inventoryです。fine-grained PAT の場合、Generate token のドロップダウンから “Fine-grained token” を選択してください。トークンが何に使用されるかの
Descriptionを追加してください。Expiration Dateには未来の 365 日(最大有効期限)を設定してください。設定しない場合、レガシー PAT のデフォルトは 30 日で期限切れになります(gPAT のデフォルトは 365 日)。アクセスを設定:
- レガシー PAT の場合: 下の画像のように、サービスアカウントが必要とするアクセスに最も適合する
Select scopes権限レベル(この場合は API のみ)をクリックしてください:

- fine-grained PAT の場合: Boundary (Group、Project、または User; 自動化が引き続き機能する範囲で最も制限的なものを選択) を選択し、右側のパネルでリソースごとに最小限の permission を選択してください。
- レガシー PAT の場合: 下の画像のように、サービスアカウントが必要とするアクセスに最も適合する
Create Tokenをクリックする前に、下の画像のように、ページを下にスクロールして古いトークンをRevokeすることを忘れないでください。ステップ 7 のインプレースの Rotate フローを使用した場合はスキップしてください。GitLab はすでに古いトークンを無効化しています。
その後、
Create tokenボタンをクリックし、新しいトークンがPersonal access tokensページの PAT リストにある確認を確認してください。
4. テスト手順
サービスアカウントからログアウトし、サービスアカウントの PAT に関連付けられた任意のパイプラインを再実行する権限を持つアカウントに再ログインしてください。
この特定のサービスアカウントについて、GitLab Inventory Builder はこのサービスアカウントの PAT を使用して API にアクセスします。
そのため、トークンエラーで以前に失敗していたそのリポジトリのパイプラインジョブを再実行することで、下の画像のように PAT ローテーションが成功したことを実証しました:

パイプラインがパスしたら、おめでとうございます。Issue を成功で更新し、関係者に PAT ローテーションの成功を通知し、最後に関連する Issue をクローズしてください。
bfd74782)