Debianベースのオープンソースな仮想化プラットフォーム、Proxmox VE(Proxmox Virtual Environment)に最近はまっているしょぼんブログです。
しょぼんブログ的にはただPromox VEを使うだけだと少し味気ないので、Proxmox VEとAzureADを連携してSSOとジャストインタイムプロビジョニングができる環境を組み上げてみました。
AzureAD側の準備

AzureADの「アプリの登録」を開き、「新規登録」をクリックします。

「名前」に任意の名前(ここではProxmox VE)と入力し、「この組織ディレクトリのみに含まれるアカウント」にチェックを入れて「登録」をクリックします。

すると「Proxmox VE」アプリが生成されますので、「アプリケーション(クライアント)ID」の値をメモし、「エンドポイント」をクリックします。

OpenID ConnectメタデータドキュメントのURLをメモし、「証明書とシークレット」をクリックします。

「証明書とシークレット」画面に移りますので、「新しいクライアントシークレット」をクリックします。

「説明」には分かりやすい内容(例ではクライアントシークレットを発行した日付)を入力し、クライアントシークレットの有効期限を設定し、「追加」をクリックします。
有効期限については、組織のポリシーに沿った値を入力してください。(例では最大日数を指定しています)

クライアントシークレットが生成されますので、値の内容をメモしてから「認証」をクリックします。

「認証」ページが表示されるので、「プラットフォームを追加」をクリックします。

プラットフォームの種類を選ぶ画面が表示されるので、「Web」をクリックします。

リダイレクトURIにProxmox VEのログインURLを記載(例ではhttps://10.100.0.10:8006を入力)し、「構成」をクリックします。

リダイレクトURI欄に先ほど記載したURLが表示されていれば完了です。
もしクラスタ構成を組んでいるなどで、Proxmox VEホストが複数有る場合は「URIの追加」をクリックし、全台分追加します。

最後にAzureADの「エンタープライズアプリケーション」メニューを開き、先ほど作成してアプリ(例ではProxmox VE)をクリックします。

Proxmox VEの詳細設定画面が表示されるので、「ユーザーとグループ」をクリックします。

「ユーザーとグループ」画面が表示されるので、「ユーザーまたはグループの追加」をクリックします。

Proxmox VEにSSOさせたいユーザもしくは、グループを選択して「割り当て」をクリックします。
これでAzureAD側の準備は完了です。
Proxmox VE側の準備

Proxmox VEにローカル管理者アカウントでログインし、「データセンター」→「アクセス権限」→「レルム」→「追加」→「OpenID Connectサーバ」の順にクリックします。

OpenID Connectサーバの設定画面が表示されるので、下記の通り設定しから「追加」をクリックします。
項目 | 値 |
Issuer URL | https://login.microsoftonline.com/XXXXXXXXXX/v2.0 ※OpenID ConnectメタデータドキュメントのURLから/.well-known/openid-configurationを抜いたURL |
レルム | UPNの所属ドメイン名 |
クライアントID | アプリケーション(クライアント)ID |
クライアントキー | クライアントシークレットの値 |
既定 | ■ |
自動作成ユーザ | ■ |
ユーザー名の要求 | username |
スコープ | 既定 |

上図の通り「レルム」がUPNの所属ドメイン名で、「種別」がopenidとなっているものが追加されていればこれで完了です。
もしクラスタ構成を組んでいるなどで、Proxmox VEホストが複数有る場合は、全台同じようにOpenID Connectサーバを追加します。
動作確認と権限設定

Proxmox VEのログインURLにアクセスすると、上図の通りレルムがUPNの所属ドメイン名となっており、「ログイン(OpenIDリダイレクト)」というボタンに変わっているので、ボタンをクリックします。

するとMicrosoftのログイン画面が表示されるので、AzureADアカウントでサインインします。

ログインに成功すると、上図の通りProxmox VEの管理画面が表示されます。
しかし、ジャストインタイムプロビジョニングで作成されたユーザアカウントには何も権限が付与されないため、何も操作ができません。

管理者権限を持ったユーザでログインし、「データセンター」→「アクセス権限」→「追加」→「ユーザのアクセス権限」をクリックします。

ユーザのアクセス権限を設定する画面が表示されるので、「ユーザ」をクリックしてジャストインタイムプロビジョニングで作成されたユーザアカウントを指定し、適切な権限を付与します。(例はPVEAdmin権限を/に対して付与しています)
権限付与後、Proxmox VE管理画面で操作が可能となります。
応用
AzureAD Premium P1以上のライセンスを保有していれば、条件付きアクセスポリシーを設定することでProxmox VEログインを高度に保護できます。

例えば全てのユーザを対象として、Proxmox VEにアクセスするユーザを対象外ユーザとし、アクセスをブロックする条件付きアクセスポリシーを適用します。

さらに全てのユーザを対象とし、条件にデバイスフィルターを適用した上で「device.isCompliant -eq True」ルールに合致するアクセスをポリシー適用対象外として、アクセスを全てブロックするという条件付きアクセスポリシーを適用します。
こうすることで、Intuneにデバイス登録されていてかつ、準拠ポリシーに準拠しているデバイスからのアクセスのみ許可する、といったような構成が組めます。
こんな感じで簡単にAzureAD SSOを実現しつつ、条件付きアクセスポリシーを利用して高度に保護できるようになります。
もしProxmox VEを利用されていて、組織内でAzureADを運用しているのであれば、本記事を参考にしてSSOの有効化を試してみてくださいね。
Source:r/Proxmox