脱・個人トークン依存:GitLab CI Job Tokenで構築する「要塞化」されたクロスプロジェクト連携
CI/CDパイプラインの中で、他リポジトリの成果物を取得したり、APIを叩いたりする際、`PERSONAL_ACCESS_TOKEN` をCI変数に埋め込んでいないか? もしそうなら、今すぐその実装を捨てろ。それは「地雷」をリポジトリに埋め込んでいるのと同じだ。
今日は、GitLabの真の力である `CI_JOB_TOKEN` を使い、最小権限の原則に基づいた「セキュアかつスケーラブルなクロスプロジェクト連携」の設計術を伝授する。
—
1. なぜ「個人トークン」が死に値するのか
個人のアクセストークンをCI変数に入れる行為は、「IDの乗っ取り」を許容しているのと同じだ。退職者のアカウント削除でパイプラインが全滅するリスク、権限の肥大化、そして監査ログの追跡困難さ。
`CI_JOB_TOKEN` は、そのパイプライン実行時のみ有効な「使い捨て」の認可キーだ。これを使えば、誰が実行したかではなく「どのジョブが」アクセスしたかを軸に制御できる。
—
2. 実践:Job Tokenによる安全なアクセス設計
まずは、AリポジトリのジョブからBリポジトリの成果物を取得する際のベストプラクティス構成を見てほしい。
設定の核:`job_token` の利用
Aリポジトリ (成果物を利用する側) の .gitlab-ci.yml
fetch-artifact-job:
stage: build
script:
# ユーザー名に ‘gitlab-ci-token’ を使用するのが作法
- ‘curl –header “JOB-TOKEN: $CI_JOB_TOKEN” “${CI_API_V4_URL}/projects/YOUR_GROUP%2Ftarget-project/jobs/artifacts/main/download?job=build”‘
rules:
- if: $CI_COMMIT_BRANCH == “main”
【重要】アクセス許可の最小化(Allowlist設定)
デフォルトでは「同じグループ内ならどこでもアクセス可能」という緩い設定になっていることがある。必ずリポジトリの `Settings > CI/CD > Token Access` で、アクセスを許可するプロジェクトを明示的に指定(Allowlist)せよ。
—
3. プロのテックリードが教える「GitLab活用ハック」
① 開発スピードを加速する「キーボードショートカット」
GitLabのUIでマウスを使うのは時間の無駄だ。
- `Shift + ?` : 全ショートカットを表示(まずはこれ)
- `g + i` : Issue一覧へ移動
- `g + m` : マージリクエスト一覧へ移動
- `Ctrl + Enter` : コメントやIssueの即時投稿
② チームの生産性を底上げする「設定共有ルール」
`include` を使い倒せ。`.gitlab-ci.yml` にロジックを直書きするのはアマチュアだ。CIのテンプレートを別リポジトリで管理し、バージョン管理せよ。
プロジェクトごとの .gitlab-ci.yml はこれくらいシンプルに保つ
include:
- project: ‘devops/ci-templates’
file: ‘/templates/build-and-test.yml’
ref: v1.2.3 # バージョン固定は鉄則!最新を追うな。
③ 導入すべき神プラグイン(ブラウザ拡張)
- GitLab Workflow (VS Code拡張): ターミナルからIssueを確認し、MRを作成できる。コンテキストスイッチを最小化せよ。
- Octotree (GitLab対応版): リポジトリの階層構造をサイドバーで即座に把握。コードレビューの速度が3倍になる。
—
4. 現場で震える「極限の知見」:セキュリティの落とし穴
`CI_JOB_TOKEN` は強力だが、「スコープの広さ」には注意が必要だ。
- リスク: 悪意あるユーザーが `scripts` を改ざんし、そのリポジトリが持つ権限を悪用して他プロジェクトの情報を盗む可能性がある。
- 防御策:
- Protected Environments: デプロイ先のリポジトリは、特定のブランチからしかアクセスできないよう保護せよ。
- Audit Logs: 定期的にGitLabの監査ログを確認し、不審な `JOB-TOKEN` の使用がないか監視するスクリプトを回せ。
—
最後に:なぜこれを行うのか
「動けばいい」コードを書くのはエンジニアではない。「壊れない仕組み」を構築するのがエンジニアだ。
個人トークンをCI変数から排除し、`CI_JOB_TOKEN` とホワイトリストによる強固な認証を実装することで、君たちのパイプラインは「開発者が何をしても安全な領域」へと進化する。
次回のスプリントでは、まずCI変数の棚卸しから始めろ。不要なトークンを削除し、この設計に移行するだけで、君たちのチームのセキュリティレベルは世界トップクラスに近づくはずだ。
さあ、コードを書いて、パイプラインを強固なものにせよ。健闘を祈る。