Jenkins での認証情報の保存

Beginner

はじめに

Jenkins の認証情報(Credentials)機能を使用すると、パスワード、トークン、キーなどをジョブスクリプトに直接記述するのではなく、Jenkins 内に安全に保存できます。ジョブからは、ID を指定することでこれらの認証情報を参照可能です。

この実験では、Jenkins ダッシュボードを使用してグローバル認証情報ストアを開き、ユーザー名/パスワード形式の認証情報を作成します。また、Jenkins がどのようにシークレットをマスクおよび暗号化しているかを確認し、ID を変更せずに認証情報を更新する手順を体験します。

グローバル認証情報ストアを開く

このステップでは、ダッシュボードから Jenkins の認証情報ストアにアクセスします。Jenkins では、認証情報は「ストア」と「ドメイン」によって整理されています。初心者向けのワークフローでは、Systemストア内のGlobalドメインを使用するのが一般的です。

デスクトップインターフェースを開いてください。Firefox が自動的に Jenkins を開きます。開かない場合は、http://localhost:8080 にアクセスしてください。

Jenkins ダッシュボードから以下の操作を行います。

左側のサイドバーにある Manage Jenkins をクリックし、次に Credentials をクリックします。認証情報ページで System をクリックし、続いて Global をクリックします。

ページタイトルが Global になり、これらの認証情報がどこでも利用可能である旨のメッセージが表示されているはずです。

Jenkins global credential domain

ターミナルで以下のコマンドを実行し、グローバル認証情報ページに到達可能であることを記録します。

curl -fsS http://localhost:8080/manage/credentials/store/system/domain/_/ | grep -o 'Credentials that should be available everywhere' | tee /home/labex/project/credential-storage-page.txt

以下のように表示されるはずです。

Credentials that should be available everywhere

ユーザー名とパスワードの認証情報を追加する

このステップでは、Jenkins のフォームを使用して認証情報を作成します。ジョブやパイプラインが後でこの ID を参照するため、認証情報 ID(Credential ID)の設定は非常に重要です。

Global 認証情報ページで、Add Credentials をクリックします。

フォームに以下の値を入力します。

  • Kind: Username with password
  • Scope: Global
  • Username: guided-user
  • Password: guided-password-v1
  • ID: guided-creds
  • Description: Guided lab credential for Jenkins storage

Create をクリックします。

Jenkins が Global ドメインページに戻ると、guided-creds という名前の認証情報が表示されます。Jenkins はユーザー名を表示しますが、パスワードはマスクされます。

Jenkins guided credential in global domain

Jenkins がシークレットをどのように保存するかを確認する

このステップでは、Jenkins がディスク上にどのようにデータを書き込んでいるかを確認します。これは日常的な作業では行いませんが、ジョブスクリプトに平文でパスワードを書くよりも認証情報機能を使う方が安全である理由を理解するのに役立ちます。

ターミナルで、Jenkins の credentials.xml ファイルから関連する行のみを表示します。

docker exec jenkins sh -lc "grep -n -E '<id>guided-creds</id>|<username>guided-user</username>|<password>' /var/jenkins_home/credentials.xml" | tee /home/labex/project/credential-file-lines.txt

出力には認証情報 ID とユーザー名が含まれているはずです。パスワードの行には、生のテキスト guided-password-v1 ではなく、中括弧で囲まれた暗号化された Jenkins シークレットが含まれているはずです。

出力例:

...<id>guided-creds</id>
...<username>guided-user</username>
...<password>{...}</password>

Firefox で Jenkins の Global ドメインページに戻ります。認証情報の行でも、パスワードは実際の値ではなくマスクされたテキストとして表示されていることが確認できます。

ID を変更せずに認証情報を更新する

このステップでは、認証情報 ID を維持したまま、Jenkins ダッシュボードを通じて認証情報の説明(Description)を更新します。これは初心者が最初に学ぶべき重要な概念です。ジョブは guided-creds のような固定された ID を参照し、管理者は必要に応じて認証情報のメタデータを後から調整できるという仕組みです。

Global 認証情報ページで以下の操作を行います。

guided-creds 認証情報をクリックし、Update credential をクリックします。UsernamePasswordID は変更せず、DescriptionUpdated guided lab credential に変更して Save をクリックします。

保存後、Global ドメインページに戻ります。同じ認証情報 ID が維持されていますが、説明が Updated guided lab credential に変更されているはずです。

Jenkins updated credential in global domain

以下のコマンドを実行して、Jenkins が同じ ID を保持し、説明が更新されていることを確認します。

docker exec jenkins sh -lc "grep -n -E '<id>guided-creds</id>|<description>Updated guided lab credential</description>|<password>' /var/jenkins_home/credentials.xml" | tee /home/labex/project/updated-credential-lines.txt

パスワードは引き続き暗号化されており、生のテキスト guided-password-v1 が表示されていないことを確認してください。

まとめ

この実験では、Jenkins ダッシュボードを使用してグローバル認証情報ストアを開き、ユーザー名/パスワード形式の認証情報を作成しました。また、Jenkins がシークレットをマスクおよび暗号化して保存することを確認し、安定した ID を維持したまま認証情報のメタデータを更新する方法を学びました。