前回からの続き。
vSphere Client から Okta ログイン画面を経由し、Okta で認証できるようになったが、Okta で認証されたユーザー情報が vCenter 側にいないため vSphere Client 操作時にユーザーが不明でエラーとなる話で、Okta で登録されているユーザーを vCenter 側へプロビジョニングする必要があるが、SCIM エンドポイントのために Okta から vCenter へ HTTPS 到達性が必要なのであった…
Okta からの接続をトンネル+リバースプロキシする
Okta のユーザー情報を同期しておくのであれば vCenter への接続性を常時保っておく必要があるが、検証用としてユーザーの変更を行わないのであればひとまず初回同期だけできればなんとかなりそう…
ということで調べていると ngrok というサービスが。
ngrok とは
ngrok とは API Gateway の SaaS サービス。
面白いのはクライアントサイドで ngrok のエージェントを起動することで、クライアントから ngrok に対しトンネリングを行い、ngrok 側で発行された一時的な公開用 FQDN にアクセスすることでトンネル経由でクライアント上のアプリを公開することができる。
一歩間違えればセキュリティ事案…みたいなサービスですが…開発中の Web アプリを一時的に公開してテストするとかには需要がありそうなサービス。
独自ドメインやアドレス固定など行うのであれば有料となるが、ngrok が払い出す可変式の一時ドメインでの公開であれば無料で使用することができる。
ngrok の sign up
ngrok も Github or Google からアカウント作成が可能。
こちらも MFA 設定やアンケート(?)入力することでログインし、ダッシュボードが開く。
vCSA 内で ngrok エージェントを起動する
ngrok のダッシュボードより Linux の ngrok のエージェントの tgz をダウンロード。
vCSA 上で展開し、token の登録を行う
root@vcsa03 [ ~ ]# tar -xvzf ngrok-v3-stable-linux-amd64.tgz -C /usr/local/bin root@vcsa03 [ ~ ]# ngrok config add-authtoken hogehoge-token Authtoken saved to configuration file: /root/.config/ngrok/ngrok.yml
ngrok エージェントを起動する。この際、vCenter へのアクセスは vCenter FQDN での HTTP リクエストの Host ヘッダが必要なため、--host-header
オプションにて vCenter の FQDN を指定する。
(vCenter 側で Apache で言うところの Virtual Host っぽい動きをしている)
root@vcsa03 [ ~ ]# ngrok http https://vcsa03.mirie.lab --host-header="vcsa03.mirie.lab"
起動すると ↓ のような画面が表示され、Forwarding の URL にアクセスすると vCenter へのプロキシとして転送してくれる。また、コンソール上には ngrok 経由でのアクセスログが出力される。
なお、Forwarding の URL は ngrok エージェント起動毎に変化する。
SCIM でのユーザープロビジョニング
ngrok 経由で公開している FQDN に対し Okta から SCIM でのユーザープロビジョニングを投げ込む。
Okta のアプリケーションより[アプリカタログを参照]を開き、”SCIM”で検索、"SCIM 2.0 Test App (OAuth Bearer Token)"を選択し統合を追加する。
アプリケーションラベルは適当な名前を設定、他はデフォルトで次へ。
サインインオプション画面にて、アプリケーションユーザー名の形式を適当なものを選び完了する。
登録した SCIM アプリを開き、割当タブからプロビジョニングするユーザー/グループを指定する。
プロビジョニングタブを開き、[API 統合を構成]を行う。
API 統合を有効化にチェックを入れると SCIM 2.0 Base Url / OAuth Bearer Token 入力欄が表示される。
SCIM 2.0 Base Url / OAuth Bearer Token は vSphere Client から持ってくる。
生成リンクよりシークレットトークンを生成し、コピペで OAuth Bearer Token へ入力。
SCIM 2.0 Base Url はテナント URL になるが、ここで vCenter の FQDN 部分は ngrok で払い出された公開用 FQDN に置き換えて貼り付ける。
[API 資格情報をテスト]を実行、問題なければ正常に検証されましたが表示される。
これで保存を押して完了。ユーザープロビジョニングが実行され、Okta 側で SCIM に割り当てを行ったユーザーやグループが vCenter 側に登録される。
最後にOkta で登録されたユーザーに対し vCenter で権限割り当てを行っておく。
Okta でログイン
これでようやく Okta からのログイン経由で vSphere Client を触ることができる。
認証が Okta 側に行ってしまったので、あとは Okta 側の設定次第で SNS なり Windows Hello/Touch ID なり Okta Verify なりをかけ多要素認証を適用することが可能なはず(あまり Okta 側は触ってないのでわからない)
まとめ
vCenter の IdP として Okta と連携してみました。
ドキュメント読む限り Entra ID も PingFederate も OpenID Connect + SCIM でのユーザープロビジョニングで Okta と似たようなものなのでで、(PingFederate はちょっとさておき) Okta /Entra ID なら使っているところも多いので、サービスアドオン感覚で vCenter の多要素認証や SSO を実現はできそうですが、ネックになりそうなのは SCIM のための外部 IdP から vCenter に対する接続性か…(+ vCenter FQDN の Host ヘッダ指定のためのリバースプロキシ)
ホームラボで試してみるぐらいであれば今回の ngrok でまぁなんとか。
このサービス、結構あぶなっかしいけど面白いですね…