正式なドキュメントは英語版であり、この日本語訳はAI支援翻訳により作成された参考用のものです。日本語訳の一部の内容は人間によるレビューがまだ行われていないため、翻訳のタイミングにより英語版との間に差異が生じることがあります。最新かつ正確な情報については、英語版をご参照ください。
ドキュメントに関する現在のご利用体験についてお聞かせください。アンケートにご協力ください

Vaultとグループアクセストークンのインテグレーション

このドキュメントでは、Omnibus GitLabがHashiCorp Vaultとどのようにインテグレーションして、ビルド中にプライベートリポジトリにアクセスするためのグループアクセストークンを取得するかを説明します。

概要

GitLabのパッケージをビルドする際、Omnibusはセキュリティ上重要なコンポーネントを含むプライベートリポジトリにアクセスする必要があります。以前は、広範な権限を持つgitlab-botユーザーからのCI_JOB_TOKENを使用して処理されていました。ミラー設定のinfra-mgmtへの一元化により、現在ではVaultに格納された専用のグループアクセストークンを使用しています。

グループアクセストークン

このグループアクセストークンは、Vaultの次のパスに保存されています:

ci/metadata/access_tokens/gitlab-com/gitlab-org/security/_group_access_tokens/build-token

このトークンには、次のものがあります:

  • ロール: デベロッパー
  • スコープ: read_repository
  • アクセス: GitLab.comのセキュリティグループとそのプロジェクト

CI設定

Vaultインテグレーションテンプレート

.with-build-tokenテンプレートは以下を提供します:

  1. IDトークン設定: VaultによるJWT認証を設定します。
  2. 条件付きシークレット取得: セキュリティプロジェクトでは、VaultからSECURITY_PRIVATE_TOKENを自動的にフェッチします。
  3. 環境設定: 必要に応じて安全なリポジトリアクセスを有効にします

テンプレートの動作は、プロジェクトのコンテキストに基づいて自動的に適応します:

  • セキュリティプロジェクト ($SECURITY_PROJECT_PATH): VaultからSECURITY_PRIVATE_TOKENを含めます
  • その他のプロジェクト: セキュリティトークンなしで基本的なVaultインテグレーションを提供します

ジョブでの使用

Vaultインテグレーションが必要なジョブは、.with-build-tokenテンプレートを拡張する必要があります:

my-build-job:
  extends: .with-build-token
  script:
    -  # Your build commands here
    -  # SECURITY_PRIVATE_TOKEN is automatically available in security builds

仕組み

  1. 認証: ジョブはGitLab JWTトークンを使用してVaultで認証します
  2. トークン取得: グループアクセストークンはVaultからフェッチされ、SECURITY_PRIVATE_TOKENとして設定されます。

トラブルシューティング

トークンが利用できません

SECURITY_PRIVATE_TOKENが見つからないというエラーが表示される場合:

  1. セキュリティプロジェクト ($CI_PROJECT_PATH == $SECURITY_PROJECT_PATH) で実行していることを確認します
  2. あなたのジョブが.with-build-tokenを拡張していることを確認します
  3. Vaultのパスがgitlab-ci-config/vault-security-secrets.ymlで正しいことを確認します

リポジトリへのアクセスが拒否されました

リポジトリにアクセスするときに403エラーが発生する場合:

  1. グループアクセストークンが正しい権限を持っていることを確認します
  2. ALTERNATIVE_SOURCESまたはSECURITY_SOURCESが有効になっていることを確認します
  3. リポジトリがセキュリティグループのアクセススコープ内にあることを確認します

Vault認証の問題

Vault認証が失敗する場合:

  1. VAULT_ID_TOKENが適切に設定されていることを確認します
  2. audフィールドがVaultサーバーURLと一致することを確認します
  3. GitLabプロジェクトに必要なVaultロール権限があることを確認します