vCenter Server 7.0 で Identity Federation を構成【Part 1】
Table of contents
はじめに
本記事シリーズでは vCenter Server 7.0 の新機能である Identity Federation を構成する方法を数回に分けてご紹介します。今回は Identity Federation の紹介と、最初の vCenter Server 側での手順について見ていきます。残りの AD FS の手順、その後の vCenter Server の手順は次回以降で見ていきます。
注意: 本機能の VMware Docs での名称は vCenter Server ID プロバイダ フェデレーション (vCenter Server Identity Provider Federation)、公式 Blog の記事などでは Identity Federation と呼称されています。本記事では文字数の便宜上、当該機能を Identity Federation として呼称することとします。
vCenter Server 7.0 の Identity Federation とは?
Identity Federation は vCenter Server 7.0 の新機能で、AD FS と OpenID Connect (OIDC) を使用してユーザー認証を行う機能です。ユーザー認証を外部の ID プロバイダに移譲することで、vCenter Server に依存せず柔軟なシングルサインオンが実現できます。こちらの VMware Docs では具体的に以下のようなメリットが挙げられています。
vCenter ServerID プロバイダ フェデレーションには、次の利点があります。
- 既存のフェデレーション インフラストラクチャおよびアプリケーションで Single Sign-On を使用できます。
- vCenter Serverではユーザーの認証情報が処理されないため、データセンターのセキュリティを高めることができます。
- 外部 ID プロバイダでサポートされている多要素認証などの認証メカニズムを使用できます。
AD FS を使用するその他のアプリケーションと vCenter Server の間で認証機構を統合できる、AD FS でサポートされている多要素認証が利用できることはセキュリティ面で大きなメリットですね。パスワードなどの認証情報が vCenter Server を経由しないという点も Identity Federation の特徴です。
なお、あくまでも Identity Federation や従来の vCenter SSO は、ユーザーが「誰か」という「認証 (Authentication, AuthN)」の機能となります。ユーザーが「何を行えるか」という「認可 (Authorization, AuthZ)」の機能は従来通り vCenter Server の権限・ロールを使用します。
Identity Federation の認証フロー概要
vCenter Server 7 の Identity Federation における認証は以下の図のようなフローとなっています。
まず、ブラウザで vCenter Server にアクセスするとユーザー名の入力を促されます。次に Active Directory ドメインユーザーを入力すると AD FS の画面にリダイレクトされます。その後、AD FS 経由でパスワード等による認証をおこなうと、vCenter Server は AD FS から発行された ID トークンでユーザーのログインを許可します1。
上図を見てもらえると、パスワードなどの認証情報は AD FS / AD DS しか使用せず、vCenter Server は経由しないことが分かると思います。
一方、従来の vCenter SSO による認証では下図のように、Active Directory や OpenLDAP といった外部の ID ソースを利用して認証を行う場合も vCenter SSO (Platform Services Controller2) が認証情報を仲介する必要がありました。ユーザーが vSphere のコンポーネントに認証情報を渡す必要があるかどうか、という点が最も大きな違いといえます。
また、複数の vCenter Server 間で vCenter SSO の認証をフェデレーションさせる場合、従来は拡張リンクモードが必要でした。Identity Federation では拡張リンクモードを構成していない場合も AD FS を介して vCenter Server 間で認証をフェデレーションできます。もちろん、拡張リンクモードと併用することも可能です3。
実際のブラウザでの画面遷移
それでは実際にユーザーから見えるブラウザ上での画面遷移を見ていきます。
まず vCenter Server (vSphere Client) にアクセスすると以下のようなユーザー名の入力画面が表示されます。
ここで Active Directory ドメインユーザー (上記では administrator@jangari.local) を入力すると、外部 ID プロバイダのユーザーと判断されて以下のような AD FS のログイン画面に遷移します。
この AD FS のログイン画面から認証を行うと、AD FS から vCenter Server に ID トークンが発行されて vSphere Client にログインできるようになります。ユーザー見えとしては認証関連の画面はこの2点のみとなります。
なお Identity Federation を構成している場合でも、最初の vCenter Server 側の画面で administrator@vsphere.local などの vCenter SSO ドメインのユーザーを入力した場合は従来の vCenter SSO のログイン画面に遷移します。最初のユーザー名の入力でどちらの ID プロバイダを使用するか分岐する、とイメージしておくと良いと思います。
構成手順の概要
Identity Federation の大まかな構成手順としては以下の3点を順番に実施します。
- vCenter Server に ID プロバイダ(AD FS)のルート CA 証明書をインポートする。
- AD FS で vCenter Server 用にアプリケーショングループを構成する。
- vCenter Server で Identity Federation 用に ID プロバイダを構成(変更)する。
VMware 社のドキュメントは以下の3点を使用しますが、手順はこれらのドキュメント(特に2,3点目)を行き来する必要があります。今どの部分の何の作業を行っているか逐次確認しながら進めていくことが重要です。
- 外部 ID プロバイダの信頼された証明書のインポート
- vCenter ServerID プロバイダ フェデレーションの設定
- How to enable OpenID Connect in ADFS 2016 for vCenter Server (78029)
なお、今回の検証環境では AD FS / AD DS をホストする OS はそれぞれ Windows Server 2019 を使用しています。AD FS のインストールや初期構成は本記事の主旨から外れるため、以下のような AD FS 関連の Microsoft 社ドキュメントを参照し、展開までは事前に完了しているものとして割愛させていただきます。
vCenter Server へのルート CA 証明書のインポート
今回の環境はプライベートなルート CA (としている AD CS) から AD FS の証明書を発行しています。このため公的な認証局ではないことから、以下のドキュメントに沿って vCenter Server の JRE トラストストアに CA 証明書をインポートすることから始める必要があります。
最初に SCP または SFTP による vCenter Server へのルート CA 証明書のアップロードを行っていきます。しかし、VCSA は既定のシェルがアプライアンスシェル (/bin/appliancesh) となっており、こちらのシェルは SCP / SFTP での接続には対応していません。
そこで以下の VMware KB の手順に従い、SSH による接続および shell コマンドで Bash シェルに切り替えた後に、chsh コマンドを使用してデフォルトシェルを Bash に切り替えます。
Error when uploading files to vCenter Server Appliance using WinSCP (2107727)
1> shell
2# chsh -s /bin/bash root
その後、任意の SCP クライアントや SFTP クライアントで VCSA に証明書をアップロードします。私は Windows だと WinSCP を使うことが多いです。
CA 証明書のインポートはドキュメントの手順に沿って vCenter Server の JRE に付属している keytool を利用しておこないます。
-file <インポートする証明書ファイル> / -alias <証明書エントリのエイリアス名(任意)> はそれぞれ適切な値を指定します。ここでは証明書のファイルのパスを /root/myrootca.cer としています。keytool 実行時に CA 証明書を信頼されるか質問されるため yes を入力します。
1# keytool -import -trustcacerts -file /root/myrootca.cer -alias myrootca \
2 -keystore $VMWARE_JAVA_HOME/lib/security/cacerts -storepass changeit
引き続きドキュメントに沿って、CA 証明書がインポートされたことを確認します。keytool 実行時に JRE トラストストアのパスワードを求められるので上記同様に changeit と入力します。なお、コマンドそのままだと CA 証明書のエントリが大量に出てくるため grep や less にパイプを繋げると確認しやすいと思います。
1keytool -list -v -keystore $VMWARE_JAVA_HOME/lib/security/cacerts | grep myrootca
ドキュメントで指定されているサービスの再起動を順番に行っていきます。
1# service-control --restart vsphere-ui
2# service-control --restart vmware-trustmanagement
3# service-control --restart vmware-stsd
ここまでの作業が完了したら、また KB2107727 の手順を参照してデフォルトシェルをアプライアンスシェルに戻しておきましょう。これで JRE トラストストアへのルート CA 証明書のインポートは完了です。
1# chsh -s /bin/appliancesh root
vCenter Server のリダイレクト URI の確認
こちらのドキュメントの手順1~3を進めていきます。
まず vSphere Client にログインし、[ホーム] > [管理] > [Single Sign-On] > [設定] から [ID プロバイダ] タブを選択します。
右上の [ID プロバイダの変更] の右に情報アイコン(i)があるので、これをクリックすると以下のようにポップアップが表示されます。
この2点の URI は認証フローの中で AD FS からのリダイレクト先になる URI となります(前者はログアウト時、後者がログイン時)。これらを AD FS に登録するためメモ帳などにコピー&ペーストで保存しておきます。
To be continued…
次回は AD FS での vCenter Server 用の OpenID Connect の構成について見ていきます。お楽しみに!
-
OpenID Connect の文脈では、vCenter Server がリライングパーティ、AD FS が ID プロバイダ (および UserInfo エンドポイント) にあたり、処理の流れには認可コードフローが使用されています(Burp 等で捕捉すると認可コードが確認できます)。OAuth 2.0 や OpenID Connect の取っ掛かりはこの辺りの書籍が参考になると思います。 ↩︎
-
vSphere 6.7 以前に存在していた Platform Services Controller は vCenter Server 7.0 に完全に統合されたため、「Platform Services Controller」という言葉は vSphere 7 の文脈上では使われなくなったようです。詳しいところはこちらの VMware Docs をご参照ください。 ↩︎
-
複数の vCenter Server で Identity Federation と拡張リンクモードを併用する場合の動作や注意点などはこちらの VMware Docs を参照してください。 ↩︎