Jenkinsプラグイン

Keeper Secrets ManagerのJenkinsへの統合によるシークレットの動的な取得

機能

  • Jenkinsを使用して、Keeperボルトからシークレットを取得します

  • Jenkins FreestyleプロジェクトまたはJenkins PipelineプロジェクトとKeeper Secrets Managerを連携して使用します

  • Keeperボルトからファイルを取得します

Keeper Secrets Manager機能の完全なリストについては、概要をご参照ください。

前提条件

このページでは、Secrets ManagerとJenkinsとの連携について説明します。 この連携を利用するための必要条件は以下のとおりです。

このプラグインはSecureRandomを使用しており、エントロピーが少なすぎるために一部のシステムで速度が低下する可能性があります。 Linuxでは、cat /proc/sys/kernel/random/entropy_availを実行すると、利用可能なエントロピーが表示されます。200未満の場合は、エントロピーを生成するためにrng-toolsのようなソフトウェアが必要になります。

概説

Keeper Secrets Manager用のJenkinsプラグインを使用すると、Keeperボルトからシークレットを取得し、ビルドパイプラインおよびワークフローパイプライン内の環境変数またはファイルに値を格納できます。

インストール

Keeper Secretsプラグインは、Jenkinsの利用可能なプラグインのリストからインストールできます。Jenkins内で、Manage Jenkins (Jenkinsの管理) -> Manage Plugins (プラグインの管理) -> Available (インストール可能) に移動します。検索バーを使用して「Keeper Secrets Manager」を検索し、プラグインを見つけます。Install (インストール) チェックボックスをオンにして、インストールボタンをクリックします。Jenkinsをすぐに再起動するか、後にしてインストールを完了するかを選択できます。Jenkinsを再起動すると、プラグインが使用できるようになります。

Keeper Secrets Managerプラグインのベータ版がインストールされている場合は、まずそれを削除する必要があります。Manage Jenkins (Jenkinsの管理) -> Manage Plugins (プラグインの管理) -> Installed (インストール済み) のタブで、Uninstall (アンインストール) ボタンをクリックします。すでにインストールされている場合は、Available (インストール可能) タブには表示されません。

ソースコード

GitHubリポジトリでKeeper Secrets Manager Jenkinsプラグインのソースコードを検索します

Secrets Managerクライアントの作成

まだ作成していない場合は、クイックスタートガイドに従って、Jenkinsの使用に特化したSecrets Managerアプリケーションとクライアントデバイスを作成します。

Keeper Commanderを使用して、Jenkins用のクライアントデバイスを生成します。ワンタイムアクセストークンをメモします。

My Vault> secrets-manager client add --app MyApplication

------------------------------------------------------------------
One Time Access Token:XX:XXXXXXXXXXXXX
------------------------------------------------------------------

デフォルトでは、クライアントデバイスはワンタイムアクセストークンを使用する最初のIPアドレスに固定されます。Jenkinsサーバーに複数の外部IPアドレスが設定されている可能性がある場合は、ワンタイムアクセストークンを生成するときに--unlock-ipパラメータを追加してください。

Secrets Managerアプリケーションおよびクライアントの作成の詳細は、Secrets Managerコマンドのドキュメントをご参照ください。

Jenkinsにクレデンシャルを追加

プラグインを使用する最初の手順は、ワンタイムアクセストークンからJenkinsのクレデンシャルを作成することです。

Jenkins内で、Manage Jenkins (Jenkinsの管理) > Manage Credentials (クレデンシャルの管理) > Scope (スコープ) > Add Credentials (クレデンシャルの追加) に移動し、Kind (種類) のドロップダウンでKeeper Secrets Managerを選択します。以下のようなフォームが表示されます。

クレデンシャルがJenkinsの他の領域で見つけやすくなるように、クレデンシャルのDescription (説明) を設定します。

ワンタイムアクセストークンをフォームフィールドに貼り付けて保存します。

初回接続

クレデンシャルを保存すると、JenkinsサーバーはKeeper Secrets Managerサービスに接続し、ワンタイムアクセストークンを初期化します。続いて、以降のリクエストに備えて、必要な暗号化鍵とクライアント識別子をJenkins内に格納します。この時点で、ワンタイムアクセストークンフィールドは消去されます。

ワンタイムアクセストークンの初期化に問題があった場合は、エラーメッセージがフィールドに表示されます。Jenkinsのクレデンシャルは、エラーがなくなるまで使用できません。新しいワンタイムアクセストークンを作成して、クレデンシャルの既存の情報を置き換えることができます。Commanderを使用して新たなトークンを作成し、Token (トークン) フィールドにカットアンドペーストして保存するだけです。

クライアントID、秘密鍵、アプリキーは表示できなくなります。Replace Keys... (鍵の置換) ボタンをクリックすると、既存の設定から鍵を置き換えることができます。

Replace (置換) ボタンをクリックすると、既存の設定からJenkinsに値をカットアンドペーストできます。次に、Validate Credential (クレデンシャルの検証) ボタンをクリックして、IDと鍵を検証できます。

使用例: フリースタイルプロジェクト

フリースタイルプロジェクトの場合、環境変数の挿入はビルドステップを使用して実行されます。

Add build step (ビルドステップの追加) ドロップダウンで、Keeper Secrets Managerを選択します。

Credential (クレデンシャル) ドロップダウンで、前の手順で作成したKeeper Secrets Managerのクレデンシャルを選択します。

Keeper表記法を使用すると、環境変数はKeeperボルト内の記録の一致する値に瞬時に置き換えられます。ログイン、パスワード、カスタムフィールド、ファイル名など、Keeperボルトのシークレット内の任意のフィールドを参照できます。

次に、シークレットの代入先を選択します。シークレットは、ビルドのワークスペース内の環境変数またはファイルに格納できます。

ビルドステップに複数の環境変数を追加するには、Add Secret (シークレットの追加) をクリックし、環境変数と表記法のフィールドに値を入力します。

Keeper表記法

Keeper表記法を使用して、シークレットとして使用する記録フィールドを選択します。Keeper表記法は以下の形式を使用します。

keeper://<Record UID>/field/<field name>

ここで、「UID記録」は、フィールドとしてシークレットのクレデンシャルを含む記録のUIDであり、「フィールド名」は、クレデンシャルが「パスワード」などとして格納されるフィールドです。

例: keeper://3FXqmP5nFKwju0H8pl0DmQ/field/password

UID記録は、Keeper Commanderまたはウェブボルトユーザーインターフェース内で確認できます。

シークレットの使用

設定された環境変数は、以下のビルドステップで使用できます。Keeper Secrets Managerステップを新たに追加し、別のアカウントまたはアプリケーションからシークレットを選択することもできます。

環境変数は、シェルの実行ステップで使用および表示できます。以下に例を示します。

#!/bin/bash

my_app --login "${MY_LOGIN}"
echo "My Login = ${MY_LOGIN}"

上記では、環境変数MY_LOGINはアプリケーションmy_appにパラメータとして渡されますが、echo命令文はコンソールに「****」というテキストを出力します。テキストベースのシークレットは、コンソールで自動的に編集されます。

使用例: パイプライン連携 (ワークフロー)

Keeper Secrets Managerプラグインは、withKsmラベルの付いたステップを使用するJenkinsfileファイル内で使用できます。以下に例を示します。

pipeline {
  agent any 
  stages {
    stage('Hello') {
      steps {
        withKsm(application: [
          [
            credentialsId:'5142ceb84e9b4a2a9179cc5b6fe2798b',
            secrets: [
              [destination: 'env', envVar:'MY_LOGIN', filePath: '',
                notation:'1adh_WZxtbbHWqf6IALMVg/field/login'],
              [destination: 'env', envVar:'MY_SEC_PHONE_NUM', filePath: '',
                notation:'Atu8tVgMxpB-iO4xT-Vu3Q/custom_field/phone[1][number]'],
              [destination: 'file', envVar: '', filePath: 'img.png',
                notation:'V8lFbio0Bs0LuvaSD5DDHA/file/IMG_0036.png']
            ]
          ]  
        ]) {
          sh'''
              # Will be redacted in console  
              echo "MY_LOGIN = ${MY_LOGIN}"
              echo "MY_SEC_PHONE_NUM = ${MY_SEC_PHONE_NUM}"

              ./my/build/script --login  "${MY_LOGIN}" --phone "${MY_SEC_PHONE_NUM}"
              file img.png
          '''
        }
      }
    }
  }
}

Keeper Secrets Managerのスニペットは、Jenkins内のパイプライン構文スニッパーエディタを使用して作成できます。Sample Step (サンプルステップ) ドロップダウンからwithKsmを選択して、Keeper Secrets Managerアプリケーションを追加します。これでクレデンシャルを選択してシークレットを追加できるようになります。

アプリケーション、クレデンシャル、シークレットの設定が完了したら、Generate Pipeline Script (パイプラインスクリプトの生成) をクリックして、withKsmブロックを生成できます。これで、このスニペットをJenkinsfileに追加できます。

シークレットを含む環境変数は、それらが定義されているwithKsmブロック内でのみアクセスできます。ブロックを終了すると、シークレットにアクセスできなくなります。

最終更新