Microsoft Entra シームレスSSO を AVD で動作させてみた

# はじめに
現在は、Azure Virtual Desktop (AVD) で、ホストプールと仮想マシンを作成する際に、どれだけシンプルな画面からデプロイさせられるか？ を研究しています。
その際には、いくつかのハードルがあったのですが、そこで得られたノウハウを記事にしていこうと思っています。以下のリンク先で シリーズ化 していますので併せて参照ください。

https://qiita.com/carol0226/items/7318fdd7aff780f5177c

今回は、Microsoft Entra シームレスシングルサインオン を、AVD環境 で動作させた際の効果を紹介したいと思います。
※シームレスSSO 自体は、AVD 以外の 仮想マシンや 物理PC でも機能します。

:::note info
新名称：Microsoft Entra シームレスシングルサインオン（ME-ID sSSO）
旧名称：Azure Active Directory シームレスシングルサインオン（Azure AD sSSO）
★シームレスSSO の "シームレス" が "s" に略せます。なので、"sSSO" になる。
:::

:::note warn
Azure AD は、2023年7月に Microsoft Entra ID にリブランディングされることが公式発表されました。今後、順次 Azure AD の名称は Microsoft Entra ID に更新されていきます。
本記事の執筆時点でも 順次名称が書き換わっている最中であることから、なるべく新名称（推測も含む）と旧名称 を併記する形で記載するようにしています。
:::

https://qiita.com/carol0226/items/2a767e3d9e114b66c562

# シームレスSSO とは？
一般に、SSO は １つの環境へサインインしたら その認証が引き継がれて 他のサービスを利用する際には サインイン操作せずに利用できることを指しています。
「シームレス」という言葉は、日本語で「つなぎ目が無い、途切れが無い」という意味があるように、シームレスSSO は、途切れなくSSO ができるというニュアンスになると思います。
つまり、オンプレミス側のアカウントを使ってサインインをしても、シームレス（途切れなく）に クラウドサービスに対して SSO ができる・・・という意味あいが込められた名称だと解釈できます。

シームレスSSO は、[ハイブリッドID](https://learn.microsoft.com/ja-jp/azure/active-directory/hybrid/whatis-hybrid-identity "ハイブリッドID") が構成された環境で利用する事ができ、ハイブリッドID でサインインする際に機能します。

ドメインコントローラーのみの環境では利用ができません。
また、クラウドID 環境の場合は、Microsoft Entra アカウント（Azure AD アカウント）でサインインするだけで、SSO になっていますので、わざわざ シームレスSSO を構成する必要はありません。

:::note info
ハイブリッドID とは、ドメインコントローラーと、Microsoft Entra テナント（Azure AD テナント）が Microsoft Entra Connect (Azure AD Connect) で、接続され オンプレミス側で発行されて、Microsoft Entra テナントへ同期された状態のユーザーを指します。
:::

:::note info
クラウドID とは、Microsoft Entra テナントで発行されたユーザーを指します。
:::

https://learn.microsoft.com/ja-jp/azure/active-directory/hybrid/connect/how-to-connect-sso

# シームレスSSO と AVD を組み合わせた効果は？
結論から言うと、非常に効果的です。
[ハイブリッドID](https://learn.microsoft.com/ja-jp/azure/active-directory/hybrid/whatis-hybrid-identity "ハイブリッドID") を使って AVD へサインインしたユーザーは Microsoftのサービスや Microsoft Entra ID と SAML連携したサービスなどに シングルサインオン できます。

オンプレミスのドメインコントローラーを使って、Azure Virtual Desktop (AVD) を構成している環境であれば、後述する「見解」を踏まえつ 前向きに採用を検討いただくと良いと思います。

## シームレスSSO の有無による操作感の違い
シームレスSSO の使用時は、なにも意識することなく AVD にサインインした際のアカウントが引き継がれます（ブラウザのサービスに入る時だけ ID入力が必要ですが パスワードは不要）

シームレスSSO が未使用だと、初回利用時にサインインが必要なばかりでなく、アプリの認証が 他のアプリには引き継がれないため、アプリごとに認証が必要です。

|  |シームレスSSO使用|未使用|
|:-:|:-:|:-:|
|Teams|なにもしない|初回サインイン時に、ユーザーIDのボタンが表示され押してからパスワード入力が必要|
|Office365アプリ|なにもしない|初回サインイン時に、Excel/Word/PowerPoint/Outlook などのいずれか１つのアプリで、ユーザーIDとパスワードの入力が必要|
|Edge|なにもしない|OSへのサインインごとに、ユーザーIDとパスワードの入力が必要<br>※認証をブラウザに記憶させることは可|
|ブラウザ x Office365 / Azure Portal|ユーザーID入力のみ|ブラウザ起動ごとに、ユーザーIDとパスワードの入力が必要<br>※認証をブラウザに記憶させることは可|

## 見解（シームレスSSO を採用すべき判断基準とは）
シームレスSSO の未使用時では、初回利用時に IDとパスワードの入力が必要ですし、別のアプリを利用する際には 別途 認証が必要です。ですが 初回利用時に認証してしまえば、以後は 認証は不要になります。

もし、利用する AVD環境が１つで FSLogixで構成されていれば プロファイルが同期されるので、シームレスSSO を使わなくても 初回利用時の手間以外では利便性は損ないません。

FSLogix が無い環境で、ホストプールで構成された VM の場合は VM が変わるたびに認証が必要になるので、これは シームレスSSO の出番かもしれません。

または、利用する AVD環境が複数であっても、その環境ごとの初回利用時に認証が必要。
プロファイルを 都度使い捨てするような共用環境などの場合は、毎回サインインが必要になるので、そういった環境でも、シームレスSSO は威力を発揮することになると思います。

実際、私が AVD の試験のために、何度も VM をデプロイしていたのですが、その都度 アプリのログインをする必要が出ていて、かなり手間に感じていたのですが、シームレスSSO を導入したら、その手間が一切なくなって 神機能 だと思えたものです。

とはいえ、見解で示した通り、シームレスSSO を導入しなくても、初回利用のシーンがそれほど無いのなら、影響は少ないのかな・・・という印象があります。

それから、最終章に記載しますが、キーのターンアラウンド の課題もあるため、ユーザーの利便性と、課題を天秤にかけつつ シームレスSSO の導入を判断いただくと良いと思います。

# テナントで シームレスSSO が構成されているかどうかの確認方法
Azure Portal で確認できます。
**Microsoft Entra ID** のリソースを選び、メニューから **Microsoft Entra Connect** － **Connect 同期** の順に開きます。
以下の画面のとおり、「シームレスなシングルサインオン」が有効になっているかどうかで確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/aa471a34-249f-c6f5-2869-639945f5c479.png)

# シームレスSSO を利用するには
以下の３つの STEP で構成できます。
1. [前提条件](https://learn.microsoft.com/ja-jp/azure/active-directory/hybrid/connect/how-to-connect-sso-quick-start#check-the-prerequisites "前提条件") を満たしていること（Microsoft Entra Connectを構成済みであること＋その他）
1. Microsoft Entra テナント で、シームレスSSO を有効にする
1. 端末のイントラネットゾーンに "https://autologon.microsoftazuread-sso.com" を追加する

以下の公開情報の手順を元にしています。

https://learn.microsoft.com/ja-jp/azure/active-directory/hybrid/connect/how-to-connect-sso-quick-start#enable-the-feature

# 構成手順
## Microsoft Entra テナント で シームレスSSO を有効にする
1. Azure AD Connect を「開く」
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/af1a5fbe-2e55-e05d-2789-c78e5f1fdb3b.png)
　<br>
1. ようこそ画面で、「構成」を選択する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/33ef2605-389d-1a3a-909c-1d4f24c42ab0.png)
　<br>
1. 追加のタスク画面で、「ユーザーサインインの変更」を選択する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/5fb217a7-7f36-4ad0-6e4f-68c651ba5588.png)
　<br>
1. 以下の画面で、Microsoft Entra ID のグローバル管理者（Azure AD のグローバル管理者）でサインインをする。
※この画面は、MFA にも対応しています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/9074a681-d472-1ce9-29d0-9d014bd99fbb.png)
　<br>
1. 下図のようにアカウントを入力
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/57b64c52-26bd-2864-2057-6b5f300fcb80.png)
　<br>
1. ユーザーサインインの画面で、「シングルサインオンを有効にする」にチェックを入れて、「次へ」を押す。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/326ff54e-03f1-a80f-cf96-242368ec62d9.png)
　<br>
1. 「資格情報の入力」ボタンを押して、オンプレミスのドメインコントローラーの管理者（Domain Admin）の権限を持つユーザーでサインインします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/8067c695-f5bd-a577-4eb8-1de9c758c045.png)
　<br>
1. 下図のように、ボタンが 緑色 に変更され v のマークが点灯すれば OK です、「次へ」を押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/f33dafbc-91a6-44ee-e621-fadeb2673215.png)
　<br>
1. 「構成が完了したら、同期プロセスを開始する」にチェックを入れて「構成」を押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/beee6a7c-643e-ab67-8f76-8fa117803927.png)
　<br>
1. 以下の画面になったら OK です。「終了」を押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/13c71bd0-7a8a-59e6-564e-9ac3db97de17.png)

## GPO を使って イントラネットゾーンの構成を配布
シームレスSSO が機能するためには グループポリシーを使い、インターネットオプション の イントラネットゾーンに対して、以下 ２点のクライアント側の構成変更が必要です。
① "https://autologon.microsoftazuread-sso.com" のアドレスを追加
②「スクリプトを介したステータス バーの更新」を許可する

:::note info
端末個々で手動設定しても、シームレスSSO は動作しますが、その作業を GPO を使って 全端末に配布する事が可能です。
:::

### ① "https://autologon.microsoftazuread-sso.com" を追加する
1. オンプレミスのドメインコントローラーで、「グループポリシーの管理」を開き、AVD のセッションホストのコンピューターオブジェクトが含まれる OU を選択します。
OU を右クリックして、「このドメインに GPO を作成し、このコンテナーにリンクする」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/3c2a6482-2e44-28ad-3505-99b0b2771ab5.png)

1. GPO の名称を任意で入力します。
下図の場合は、判りやすく "シームレスSSO" にしています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/60ae688c-ac94-42f2-462a-ce846798c719.png)

1. 追加された「シームレスSSO」を右クリックし、「編集」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/7ce9402a-08db-79b3-c1e7-99e42dfc6dde.png)

1. 下図のとおり、左ペインの 赤で囲んた v を開いていきます。<br>ポリシー￥管理用テンプレート￥Windowsコンポーネント￥Internet Explorer￥インターネット コントロールパネル￥セキュリティ ページ
「セキュリティページ」が開いたら、「サイトとゾーンの割り当て一覧」をダブルクリックで開きます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/521d0a08-aeb8-1ebb-da93-75649296a003.png)

1. 「サイトとゾーンの一覧」画面で「有効」を選択し、「表示」ボタンを押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/d6d9659d-1908-8185-2b4c-b5db6b4f8f78.png)

1. 下図の通り、値を入力して、「OK」を押します。
この "値" の数字によって、URL を どのゾーンに割り当てるのかが決まってきます。
1 = イントラネットゾーン
2 = 信頼済みサイトゾーン
3 = インターネットゾーン
4 = 制限付きゾーン

||値の名前|値|備考|
|:-:|:-:|:-:|:-:|
|有効にする場合|https://autologon.microsoftazuread-sso.com|1||
|禁止にする場合|https://autologon.microsoftazuread-sso.com|4|※１|
|任意にする場合|GPOは配布せず、ユーザーが任意で 以下のURL を追加します<br>https://autologon.microsoftazuread-sso.com||※２|

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/0e7095b9-8607-4377-e857-7f1d8ca223dc.png)

1. サイトとゾーンの割り当て一覧が、「有効」に変わります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/332205fd-82a3-c683-d185-43b838049fc4.png)

:::note warn
※１　シームレスSSOを強制的に禁止させたい場合は、「4 = 制限付きゾーン」を構成します。
※２　OU に対して 何もポリシーを適用しなければ そもそも機能はしませんが、ユーザーが任意で URL をイントラネットゾーンに追加すれば シームレスSSO は使える状態になっています。
:::

### ②「スクリプトを介したステータス バーの更新」を許可する
1. 下図のとおり、左ペインの 赤で囲んた v を開いていきます。<br>ポリシー￥管理用テンプレート￥Windowsコンポーネント￥Internet Explorer￥インターネット コントロールパネル￥セキュリティ ページ￥イントラネット ゾーン
「イントラネット ゾーン」が開いたら、「スクリプトを介したステータス バーの更新」をダブルクリックで開きます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/317c6d39-d01a-4114-b02c-864a59bfe583.png)

1. 下図の通り、構成を「有効」にしてから「OK」を押して閉じます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/78f4b270-7ad5-a471-c5c1-e0b5d2e55c4f.png)

以上の構成で、シームレスSSO が機能するようになります。 

# 動作確認
クライアントPCを使い、以下の手順で、動作確認をしていきましょう。
※前章で構成した OU に配置されたマシンを使う必要があります。

1. PCにすでにログオンしていた場合は、 コマンドプロンプト（管理者）を使い gpupdate /force のコマンドを実行して ポリシーを適用し、ブラウザの再起動を行います。
※または、OS を再起動してください。

1. 以下の URL にアクセスして シームレスSSO の動作を確認します。
※各URL をテストする都度 ブラウザのキャッシュクリアをしてください。

- https://myapps.microsoft.com/
- https://office.com
　→　上記のような URL については ユーザーID を入力するだけで パスワードレスでサインインできます。

- https://myapps.microsoft.com/carol226.com/
- https://office.com/carol226.com/
　→　このように テナント名（例：carol226.com）を付与した場合は、ID & パスワードレスでサインインされます。

- Officeアプリケーション（Word / Excel / PowerPoint / Outlook など）
- Teamsアプリケーション
　→　アプリ起動後に 少し待つと 自動的に サインインが完了します。

（参考）シームレス SSO をテストする
https://learn.microsoft.com/ja-jp/azure/active-directory/hybrid/connect/how-to-connect-sso-quick-start#test-seamless-sso

# Microsoft Entra シームレス シングル サインオン:よく寄せられる質問
（FAQ）
https://learn.microsoft.com/ja-jp/azure/active-directory/hybrid/connect/how-to-connect-sso-faq

# （注意事項）キーのロールオーバーについて
シームレスSSO を利用する際に、気を付けなければならない事として、キーのロールオーバーがあります。
公開情報によると、"少なくとも 30 日ごとに Kerberos 復号化キーをロールオーバーすることを強くお勧めします" という記載があります。

検証環境のように セキュリティ的な懸念がない環境で、単に シームレスSSO の動作を見るだけなら、キーのロールオーバーはやらなくても問題ありませんが、本番運用となると、キーのロールオーバーを考慮に入れておく必要がありそうです。

（"AZUREADSSO" コンピューター アカウントの Kerberos 復号化キーをロールオーバーするにはどうすればよいですか?）
https://learn.microsoft.com/ja-jp/azure/active-directory/hybrid/connect/how-to-connect-sso-faq#-azureadssoacc-----------------kerberos-----------------------------

以下のサイトで紹介されているようなスクリプトとタスク実行を使って、定期実行させれば良さそうですが、私も未だ 検証は実施できていません。確認などが取れたら 追記にて報告したいと思います。

https://www.shankuehn.io/post/automatically-roll-over-kerberos-decryption-key-with-aad-seamless-sign-on