Jenkins の認証に Azure Active Directory を使った

昨年の冬に MacBook Pro を買い換えたことで 1 台サーバーとしておいておける Mac ができたので、iOS アプリのビルド用に Jenkins 2 を構築して設置しました。

インターネットに公開するものの、さすがに認証がないとつらい、だけど BASIC 認証は Firefox がうまく覚えてくれなくなってるっぽいので避けたいと思い、別の認証を試すことにしました。

ちょうど、Azure AD の存在を思い出したので、連携させて認証できるようにしてみました。

以下 Jenkins を設置した場所を [JENKINS_URL] と表記します。

グループの作成

Azure AD 上に Jenkins 管理者と Jenkins 利用者という形でグループを作成しておきます。(Azure AD 「ユーザーとグループ」の中にあります)

f:id:iseebi:20170719235349p:plain

各グループのオブジェクト ID が後で必要になるので控えておきます。

f:id:iseebi:20170719235529p:plain

アプリの登録

Jenkins をアプリとして Azure AD に登録します。

f:id:iseebi:20170720000423p:plain

作成のダイアログのサインオンURLに [JENKINS_URL]/securityRealm/finishLogin と入力します。

f:id:iseebi:20170720000648p:plain

アプリが登録できたら開いて「マニフェスト」を選択し、groupMembershipClaimsnull から "SecurityGroup" に変更します。

f:id:iseebi:20170720004353p:plain

アプリの一覧に戻り「エンドポイント」というボタンをクリックして出てきた中にある「フェデレーションメタデータドキュメント」というURLからXMLをダウンロードしておきます。

f:id:iseebi:20170720002350p:plain

最後に Azure AD のプロパティにある「ディレクトリ ID」をコピーしておきます。

f:id:iseebi:20170720003207p:plain

Jenkins 側の設定

Jenkins の設定→グローバルセキュリティの設定を開きます。

ユーザー情報の選択を SAML 2.0 にし、以下のように SAML の設定を入力します。

f:id:iseebi:20170720002730p:plain

キー
IdP Metadata フェデレーションメタデータドキュメントの内容を貼り付ける
Display Name Attribute http://schemas.xmlsoap.org/ws/2005/05/identity/claims/givenname
Group Attribute http://schemas.microsoft.com/ws/2008/06/identity/claims/groups
Username Attribute http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name
Email Attribute http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress
Logout URL https://login.windows.net/[ディレクトリID]/oauth2/logout?post_logout_redirect_uri=[JENKINS_URL]

その次の「権限管理」では「グループの作成」でメモしておいたグループのオブジェクトIDを指定し、付与したい権限を選択します。

f:id:iseebi:20170720003553p:plain

設定に失敗した場合は

設定に失敗して Jenkins にログインできなくなった場合、一度 Jenkins のプロセスを停止し、JENKINS_HOME にある config.xml を開いて authorizationStrategy タグを以下のようにすると認証が無効になり設定をやり直すことができます。

<authorizationStrategy class="hudson.security.AuthorizationStrategy$Unsecured"/>

参考資料