Jenkinsの認証にAzure ADを使う場合の設定方法を調べてみました。
検索するとSAMLやOpenID Connectで連携する手順も出てきますが、今回は こちらのAzure AD Plugin を使用しました。以下が設定手順となります。
Jenkinsのバージョンは 2.108, Azure AD Pluginのバージョンは 0.3.0で確認しました。
認証設定のバックアップ
設定後すぐAzure AD認証に切り替わるので、念のため設定のバックアップを取得しておきます。
ファイルは /var/lib/jenkins/config.xml です。
# cp /var/lib/jenkins/config.xml /var/lib/jenkins/config.xml.bak
何かあったらファイルを戻してJenkinsを再起動すれば元のユーザ(セキュリティ設定)でログインできます。
# service jenkins restart
Azure ADの設定
まず、Azure ADの設定を行います。
Azureポータルから Azure Active Directory -> アプリの登録 -> 新しいアプリケーションの登録 を選択します。
名前(何でもいいです)を入力して、アプリケーションの種類は「Webアプリ/API」を選択します。
サインオンURLには {JenkinsのURL}/securityRealm/finishLogin を入力して「作成」を押します。
作成されるとプロパティが表示されるので、アプリケーションID をコピーしておきます。
後述するように、これをJenkinsの設定画面で Client ID として入力します。
引き続き、作成されたアプリケーションのメニューから「設定」->「キー」を選択してパスワードを発行します。これをJenkinsの設定画面で Client Secret として入力するので、コピーしておきます。
警告メッセージが出ているように、パスワードは発行時にコピーしないと再取得できないので注意して下さい。
次に、作成されたアプリケーションのメニューから「必要なアクセス許可」を選択します。
Read directory data(2ヶ所)に追加のチェックを入れて、保存します。
保存後に戻る設定画面で、アクセス許可の付与をおこないます。(ただし、ここで付与するとAzure AD上の全ユーザに付与されるので、一部のユーザに付与したい場合はAzure ADの「ユーザー」メニューから個別に付与して下さい。)
次に、アプリケーションのメニューから「応答URL」を選択します。
作成時に設定した{JenkinsのURL}/securityRealm/finishLoginパスが設定されていることを確認します。
最後に、Azure Active Directoryのプロパティに戻り、ディレクトリID をコピーしておきます。
これをJenkinsの設定画面で Tenant として入力します。
以上でADの設定は完了です。
Jenkinsの設定と動作確認
Jenkinsの管理 -> プラグインの管理 -> 利用可能タブ から、Azure ADプラグインを追加します。
追加後、Jenkinsの管理 -> グローバルセキュリティの設定 に Azure Active Directory が追加されているので、保存しておいた
- Client ID (アプリケーションID)
- Client Secret(パスワードの値)
- Tenant(ディレクトリID)
を設定して、"Verify Application"を押します。"Successfully verified"と表示されればOKです。
問題なければ、その下の設定で "Azure Active Directory Matrix-based security" を選択します。
上記はログイン済みユーザ全員に権限設定する設定ですが、ユーザごとに権限付与することも可能です。
ユーザの名前を入力すればサジェスト表示されます。
設定を保存後Jenkinsにログインし、Azure ADユーザでログインできることを確認します。
以上で設定は完了です。
その他
アクセス権が不足している場合、以下のエラーメッセージが表示されました。403なので権限まわりだとは分かりますが...最初はちょっとびっくりしますね。
com.microsoft.azure.management.graphrbac.GraphErrorException: Status code 403,
{"odata.error":{"code":"Authorization_RequestDenied","message":
{"lang":"en","value":"Insufficient privileges to complete the operation."}}}