グループアクセストークンを利用するための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テンプレートは、以下を提供します:
- IDトークンの設定: VaultとのJSON Webトークン認証をセットアップします
- 条件付きシークレットの取得: セキュリティプロジェクトでは、Vaultから
SECURITY_PRIVATE_TOKENを自動的にフェッチします - 環境のセットアップ: 必要に応じて、セキュアなリポジトリへのアクセスを有効にします
テンプレートの動作は、プロジェクトのコンテキストに基づいて自動的に適応します:
- セキュリティプロジェクト(
$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仕組み
- 認証: ジョブは、GitLab JSON Webトークントークンを使用してVaultで認証を行います
- Token Retrieval(トークンの取得): グループアクセストークンは、Vaultからフェッチされ、
SECURITY_PRIVATE_TOKENとして設定されます
トラブルシューティング
トークンが利用できません
SECURITY_PRIVATE_TOKENが見つからないというエラーが表示された場合:
- セキュリティプロジェクト(
$CI_PROJECT_PATH == $SECURITY_PROJECT_PATH)で実行していることを確認します - ジョブが
.with-build-tokenを拡張していることを確認します gitlab-ci-config/vault-security-secrets.ymlでVaultのパスが正しいことを確認してください
リポジトリへのアクセスが拒否されました
リポジトリへのアクセス時に403エラーが発生した場合:
- グループアクセストークンに正しい権限があることを確認します
ALTERNATIVE_SOURCESまたはSECURITY_SOURCESが有効になっていることを確認します- リポジトリがセキュリティグループのアクセススコープ内にあることを確認します
Vault認証の問題
Vault認証が失敗した場合:
VAULT_ID_TOKENが正しく設定されていることを確認しますaudフィールドがVaultサーバーのURLと一致することを確認します- GitLabプロジェクトに必要なVaultロール権限があることを確認します