IBM Cloud Docs
Vault Jenkins プラグインとの統合

Vault Jenkins プラグインとの統合

既に Vault Jenkins プラグインを使用していますか? このツールを IBM Cloud® Secrets Manager と統合して、セットアップの変更を最小限に抑えることができます。

開始前に

  1. 必要なレベルのアクセス権を持っていることを確認してください。 シークレットを表示するには、 SecretsReader サービス役割が必要です。
  2. SecretsReader 権限を持つサービス ID を使用して IAM API キーを作成します。

Vault Jenkins プラグイン統合のセットアップ

これらのステップを実行することで、 Secrets Manager を、 Jenkins ジョブまたはプロジェクトで使用するプラグインと統合できます。 Jenkins プラグインについて詳しくは、 Hashicorp Vaultを参照してください。

  1. Jenkins ダッシュボードで、プラグインを使用しているジョブまたはプロジェクトを選択します。
  2. 構成セクションで 「ビルド環境」 をクリックします。
  3. 「ボールト・プラグイン」 を選択します。
  4. 「資格情報認証の種類 (Credential Authentication Kind)」 フィールドから 「ボールト・トークン資格情報 (Vault Token Credentials)」 を選択します。
  5. 「トークン」 フィールドのプレースホルダー値を作成します (例えば、 temp)。
  6. ID を設定します (例: sm-vault-token)。
  7. 追加 をクリックします。
  8. 「ボールト URL (Vault URL)」 フィールドで、 Secrets Manager インスタンスの URL を指します。
  9. 「拡張」 をクリックして、 「接頭部パス」 を表示します。
  10. 「接頭部パス」ibmcloud/kv に設定します。
  11. 「K/V エンジンのバージョン (K/V Engine Version)」2 であることを確認します。

プラグインのボールト・トークンの更新

ボールト・トークンが期限切れになる前にリフレッシュするために、 vault-refresh ジョブを定期的に実行するように構成することができます。

  1. 定期的に繰り返されるジョブを作成して、トークンをリフレッシュします。 トークンは、 Jenkins CLI コマンド update-credentials-by-xml を使用して、 「セットアップ」 セクションのステップ 2 でプレースホルダー値として定義したトークン資格情報の値を更新します。

  2. 例えば、 vault-refresh という名前の Jenkins ジョブを作成します。

  3. 「ビルド環境」 セクションで、シークレットの名前を 「シークレット・テキスト (Secret Text)」 変数として追加します。 サービス ID から API キーを生成することをお勧めします。 Jenkins プラグインを使用して処理するシークレットを読み取るために必要な最小限のアクセス権限をサービス ID に割り当てます。

  4. 「ビルド・ステップ」 セクションで、 Executive Shell を追加し、以下のスクリプトを入力します。

    wget YOUR-TAAS-JENKINS-INSTANCE-NAME.swg-devops.com/jnlpJars/jenkins-cli.jar
    export IAM_TOKEN=$(curl -X POST 'https://iam.cloud.ibm.com/identity/token' -H 'Content-Type: application/x-www-form-urlencoded' -d "grant_type=urn:ibm:params:oauth:grant-type:apikey&apikey=${IAM_API_KEY}" | jq --raw-output '.access_token')
    export NEW_VAULT_TOKEN=$(curl -X PUT -H "X-Vault-Request: true" -d "{\"token\":\"${IAM_TOKEN}\"}" ${VAULT_ADDR}/v1/auth/ibmcloud/login | jq --raw-output '.auth.client_token')
    
    printf "<com.datapipe.jenkins.vault.credentials.VaultTokenCredential plugin=\"hashicorp-vault-plugin@3.8.0\"><scope>GLOBAL</scope><id>sm-vault-token</id><description>Vault token for Secrets Manager</description><token>$NEW_VAULT_TOKEN</token></com.datapipe.jenkins.vault.credentials.VaultTokenCredential>" > creds.xml
    java -jar jenkins-cli.jar -s https://YOUR-TAAS-JENKINS-INSTANCE-NAME.swg-devops.com/ -auth <Jenkins user>:<user token> update-credentials-by-xml system::system::jenkins '(global)' sm-vault-token < creds.xml
    

    Jenkins user は、 Jenkins 自動化を実行するために使用するユーザーまたは FID を表します。 user token は、ユーザーに属するトークンです。 Jenkins API キーまたはトークンを取得するには、ユーザー名をクリックし、 「構成」>「API トークン」>「新規トークン」* を選択します。

    ご使用の環境に関連付けられている値を指定します。 XML 内のボールト・トークンの ID は、ステップ 2 で割り当てたものと同じ ID です。 ジョブを実行すると、ボールト・トークンが実際の値で更新されます。

Secrets Manager の認証トークンとボールト・トークンについて詳しくは、 Vault API リファレンス を参照してください。

次のステップ

Vault プラグインを使用して Jenkins ジョブを統合したので、追加のコード変更を行うことなく、 Secrets Manager からシークレットを取り出し、通常どおりに環境変数を追加することができます。