id認証サーバは統合しといたほうがアカウントの管理が楽だよねという意見がありましてやってみました。
やってみて苦しんだのちにサポート問い合わせして教えていただいて成功したので軽くメモっておきます。
###ライセンスの件
はじめに確認するポイントですが、この連携設定についてはAzureAD Premium(P1)ライセンスが必須です。
ライセンスがないとグループと登録されたアプリケーションを紐づけることが不可能です。
作成したグループに対してライセンスを有効化する必要があります。今回は評価版を用いました。
※ユーザ毎に¥600~900程と表示されてました(2017/8時点)
試用期間を超過するとそのまま使えなくなるようで契約が要るようです。
###参考サイト:
https://www.cloudbees.com/blog/securing-jenkins-role-based-access-control-and-azure-active-directory
http://iseebi.hatenablog.com/entry/2017/07/20/004458
設定自体は上記2サイトを見るとわりとすんなりいける感じです
(日本語のほうは情報が少な目で、英語のほうもじっと見ることを推奨します)
###エラーと対策
ずっと出てたエラーが以下。これはAzureADのアプリ登録した側のappidの設定がjenkins側のhttps://myjenkins.net/securityRealm/finishLogin
と一致しないために起こるものということでした。
(サポートのかたに教えていただきました。ありがとうございました。)
その他の技術情報:
Correlation ID: 9253c84f-bd7b-****-****-*******
Timestamp: 2017-08-21 04:49:16Z
AADSTS70001: Application with identifier 'https://myjenkins.net/securityRealm/finishLogin' was not found in the directory f8830191-2d31-****-****-**********
で、このappidに保存が可能なドメインというのがテナントで許可してるドメイン以外は設定できないようになってました。
なのでちょっとドメイン準備しなおしました。(nginxでssl化しててletsencryptつかって入れるplaybookかいてたので証明書の取り直しなどはまあ容易でした。)
で、appid修正後にjenkins側でsaml設定いれてPremiumのライセンス有効化したグループのオブジェクトID入れてログアウト後に認証したらoffice365でもつかってるAzureADのアカウントで入れました。
というわけでめでたし。
###設定手順全容
- jenkins用のdomainをテナント側で有効なものを用意する
- jenkinsのvmをたててnginxのsslリバースプロキシか何かでhttpsを有効化する
- (https用の証明書も準備要るがこのときazureのdomainでletsencrypt取得しようとすると上限規制のため自前ドメイン推奨)
- jenkinsの初期せっていをしてSAMLプラグインを入れておく
- AzureAD側にJenkinsグループを作ってユーザを登録、Premiumのライセンスを有効化する、グループのオブジェクトIDを控える
- AzureADでアプリの登録をしJenkinsURLを
https:[JenkinsURL]/securityRealm/finishLogin
として登録する - アプリケーションIDと応答URLをおなじように登録(テナント側で有効なドメインにする
- 登録したアプリの必要なアクセス許可を付与する
- 登録したアプリのマニフェストを編集し
"groupMembershipClaims": "SecurityGroup"
にする - アプリの登録のエンドポイントのフェデレーション メタデータ ドキュメントのURLをコピーしてブラウザで開きxmlを表示させておく
- AzureADのプロパティからディレクトリIDを控えておく
- Jenkinsのグローバルセキュリティの設定からSAMLの設定をして一度保存します。(セキュリティを有効化している状態前提)
アプリの登録>エンドポイントのフェデレーションメタデータのxmlの内容を 「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]
- 一度SAML設定を保存したことで再びグローバルセキュリティの設定からグループのオブジェクトIDを行列による権限設定で追加できるようになっているので追加します
- 一度ログアウトしてからjenkinsトップにアクセスするとMicrosoftの認証画面にリダイレクトされるのでログインするとjenkinsのログイン画面はすっとばしてログインできている状態になります。
以上