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

グループアクセストークンを利用するためのVault連携

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

概要

GitLabパッケージをビルドする際、Omnibusはセキュリティに機密性の高いコンポーネントを含むプライベートリポジトリにアクセスする必要があります。以前は、これは広範な権限を持つCI_JOB_TOKENユーザーからのgitlab-botを使用して処理されていました。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とのJSON Webトークン認証をセットアップします
  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 JSON Webトークントークンを使用してVaultで認証を行います
  2. Token Retrieval(トークンの取得): グループアクセストークンは、Vaultからフェッチされ、SECURITY_PRIVATE_TOKENとして設定されます

トラブルシューティング

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

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

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

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

リポジトリへのアクセス時に403エラーが発生した場合:

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

Vault認証の問題

Vault認証が失敗した場合:

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