Hybrid Azure AD Join の検証用環境の動作確認とスタートアップ スクリプトによる解除の動作検証について

#はじめに

Hybrid Azure AD Join が構成される仕組みは図式化すると下記のとおりとなります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/c4ae71a3-318d-c178-b588-abbeacfe20b6.png)

通常 上記流れに記載されている、4. の SCP はオンプレミスの Active Direcotry の 「CN=Device Registration Configuration」の中に格納されており、**フォレスト** 単位で構成するものになります。

今回検証する内容は、Hybrid Azure AD Join の構成を本番環境に展開する前に、OU単位でグループ ポリシーを作成し、レジストリ内に SCP を作成することで、極端な話をすると 1 台単位で Hybrid Azure AD Join を構成するための動作を確認したいと思います。

弊社公開情報にて該当する内容は下記ドキュメントになります。

-参考情報
ハイブリッド Azure AD 参加の検証を制御する
URL:https://docs.microsoft.com/ja-jp/azure/active-directory/devices/hybrid-azuread-join-control

#作業概要
今回の検証は以下の流れで行います。

1. Azure AD Connect で既に SCP を構成済みの場合は手動で削除する
2. グループ ポリシーにて SCP を手動構成する
3. Hybrid Azure AD Join させたいコンピューターの OU に 2. で作成したグループ ポリシーをリンクさせる
4. Hybrid Azure AD Join させることを確認する
5. Hybrid Azure AD Join させたコンピューターを 2. の OU 以外(Hybrid Azure AD Join させない)に移動させる
6. 移動した OU 上で「dsregcmd /leave」を実行するスタートアップ スクリプトを配置する
7. 対象のコンピューターを再起動し、起動時に Hybrid Azure AD Join が解除されることを確認する
8. 再度 2. の OU に移動後にログオンし Hybrid Azure AD Join が再構成されるか確認する。

※手順6. の部分、最初はログオン スクリプトで頑張ろうとしてたのですが、システム管理者権限で実行するためには、スタートアップ スクリプトではないといけないという、賢者からの啓示をいただき、手順を修正しています。
(実際にスタートアップ スクリプトでないと動作しませんでした、散々ハマりました)

#やってみる

##### 1. Azure AD Connect で既に SCP を構成済みの場合は手動で削除する

オンプレミス AD にサインインし、「スタート」→「Windows 管理ツール」→「ADSI エディター」の順に選択し ADSI エディターを起動します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/2a35fc54-fded-7f47-e28f-76f33df892aa.png)

対象のリーフ オブジェクトを右クリックし、「プロパティ」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/41b3a800-d24e-e54d-81e2-a281e6aa0289.png)

属性エディターより、属性名「keywords」を選択し、「編集」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/d1491abe-8cb0-5866-cefe-8e1dac6db8a9.png)

AzureADIdを選択し、「削除」→「OK」の順にクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/d386ed2e-72b5-8428-75cd-13719d5c667e.png)

再度「編集」画面を開き azureADName を選択し、「削除」→「OK」の順にクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/89eca616-0521-6b93-0cf3-4f1f5624eaed.png)

最後に「適用」→「OK」の順にクリックし、属性エディターを閉じます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/021c5b49-9793-1d30-79e4-3c6dc9a3990a.png)

これで Azure AD Connect で構成した SCP を手動で削除できました。

##### 2. グループ ポリシーにて SCP を手動構成する

詳細な手順は下記公開情報にも記載されていますので、あわせて参考にしてください。

SCP のクライアント側レジストリ設定を構成する
URL:https://docs.microsoft.com/ja-jp/azure/active-directory/devices/hybrid-azuread-join-control#configure-client-side-registry-setting-for-scp

「管理ツール」→「グループ ポリシーの管理」の順にクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/f725bd72-7f2e-abc0-1c94-ca865d40666b.png)

新しいグループ ポリシーを作成します。(名前は任意です)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/922a2d37-0312-9b27-629b-14c146c573ea.png)

作成したグループ ポリシー右クリックにて編集し、「コンピューターの構成」→「基本設定」→「Windows 設定」→「レジストリ」の順に選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/0fb8ac89-c07f-a244-46ca-f705352516c5.png)

「レジストリ」 を右クリックして、 「新規」→ 「レジストリ項目」の順に選択します。 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/5f6a6b1a-e2e2-f267-0e0f-e4d79896a011.png)

「全般」 タブで、以下のとおり構成します。

| 項目       |       値 |
|:-----------------|:-------------------------------------------------------------------|
| アクション             |              Update |
| Hive           |            HKEY_LOCAL_MACHINE |
| キー パス             |              SOFTWARE\Microsoft\Windows\CurrentVersion\CDJ\AAD |
| 値の名前             |                TenantId |
| 値の型             |             REG_SZ |
| 値のデータ         |           Azure AD インスタンスの GUID またはディレクトリ ID |

※ ディレクトリ ID はAzure portal > [Azure Active Directory] > [プロパティ] > [ディレクトリ ID] にあります|
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/9f79b444-1e51-a685-73d1-05d953697a56.png)

[全般] タブで、以下のとおり構成します。

| 項目       |       値 |
|:-----------------|:-------------------|
| アクション             |              Update |
| Hive           |            HKEY_LOCAL_MACHINE |
| キー パス             |              SOFTWARE\Microsoft\Windows\CurrentVersion\CDJ\AAD |
| 値の名前             |                TenantName |
| 値の型             |             REG_SZ |
| 値のデータ         |          Azure AD で確認済みのドメイン名 (contoso.onmicrosoft.com など、またはディレクトリ内の任意の確認済みのドメイン名) |


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/20c0fac0-8497-1384-e4bb-5f74a72a35ec.png)

##### 3. Hybrid Azure AD Join させたいコンピューターの OU に 2. で作成したグループ ポリシーをリンクさせる

作成したグループ ポリシーを OU にリンクさせます。
OU 名「Add_Computers」を右クリックし、「既存の GPO のリンク」をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/d8476b0b-5d0e-1041-23d5-c2602f063152.png)

作成したグループ ポリシー名「ClientSideSCP」を選択し、「OK」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/4a68ebc6-9463-7f40-c243-3e920608599d.png)

OU 名「Add_Computers」に対象のグループ ポリシーがリンクされたことを確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/60d939e5-437f-09f1-94af-dc05bfb387f4.png)

最後に gpupdate コマンドでグループ ポリシーを反映させます。

##### 4. Hybrid Azure AD Join させることを確認する

Hybrid Azure AD Join させるためには、対象の Windows 10 コンピューターにログオンする必要があります。
また、PRT を取得するためには、Azure AD に同期済みのユーザーでログオンする必要があります。

Windows 10 コンピューターにログオン後に、「regedit」コマンドでレジストリ エディターを開いてみましょう。

下記のとおり、「HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\CDJ\AAD」配下に、オンプレミス AD で設定したグループ ポリシーの内容が反映されていることが確認できます。
(Default)と書いてある設定は私の作業ミスです、検証して分かりましたが、値の名前も正しく設定しないと、Hybrid Azure AD Join は完成しません。(ハマりポイントです)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/7ad94545-a3fc-164b-99a7-9fd6b23e67d9.png)

そして、対象のコンピューターで「dsregcmd /status」コマンドレットをたたくと、下記のとおり PRT が取得できていることが確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/15d05fa3-2aa2-2fe8-605c-18c3d8a79880.png)

Azure ポータル側も確認してみると、下記のとおり Hybrid Azure AD Join としてデバイス参加していることが分かります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/bac216e1-bdcb-347f-a562-682f0b2194d2.png)

##### 5. Hybrid Azure AD Join させたコンピューターを 2. の OU 以外(Hybrid Azure AD Join させない)に移動させる

今度は、 Hybrid Azure AD Join を解除させるための準備を始めます。
まずは、Hybrid Azure AD Join を行う OU (Add_Computers)から Hybrid Azure AD Join を行わない OU (Remove_Computers) に移動させます。

現状の設定です。Add_Computers に対象のコンピューターが所属しています。右クリックし、「移動」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/2090963e-882a-e2dd-5455-a8e93224d198.png)

Remove_Computersを選択し「OK」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/ddb65d10-78f1-4a60-2ceb-91330b883853.png)

OU名 Remove_Computers に移動されていることを確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/5518faa6-2ecd-eec8-09ce-e47632cfdf3a.png)

##### 6. 移動した OU 上で「dsregcmd /leave」を実行するログオン スクリプトを配置する

OU 名Remove_Computersに移動しただけでは、当然ですが Hybrid Azure AD Join は解除されません。
明示的に「dsregcmd /leave」コマンドレットを実行する必要があります。
今回は、直接ユーザーがコンピューターにログオンしてコマンドレットを実行するのではなく、オンプレミス AD のログオン スクリプトを配置し、リモートで Hybrid Azure AD Join を解除できるか検証してみます。

実行するファイルとして、それぞれバッチファイルとして下記内容を用意しました。

-----
startup.bat
-----

```
@echo off
pushd %~dp0
powershell.exe -NoProfile -ExecutionPolicy Unrestricted -Command "Start-Process "dsregcmdexe" -verb Runas" 
@popd
```

-----
dsregcmdexe.bat
-----

```

dsregcmd /leave
timeout 60
shutdown -r 
```

グループ ポリシーの管理より、新しいグループ ポリシーを作成します。(名前は任意)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/872a0227-a2ce-fe88-cb87-6406a92b5500.png)

対象のグループ ポリシーを編集し、「コンピューターの構成」→「ポリシー」→「Windowsの設定」→「スクリプト(スタートアップ/シャットダウン)の」の順に選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/14a08aaf-4f39-1440-e272-18a4eab84965.png)

スタートアップを選択し、右クリックより「プロパティ」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/cb3786be-f50c-8bfd-bc01-0c1be3a84997.png)

startup.bat ファイルを選択します。対象のファイルが下記のとおり、ログオン スクリプトのフォルダに事前に格納しておく必要があります。
(\\shyamag014.work\SysVol\shyamag014.work\Policies\{5CA65F2E-C0B2-4FF3-BBF7-E6DE738D3AD3}\Machine\Scripts\Startup)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/f350a1d9-9925-590e-3755-659bb6e59f56.png)

スクリプトの一覧に「startup.bat」が表示されていることを確認し、「OK」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/74321f9e-814c-89ae-c31d-6eb855c92927.png)

同様に「dsregcmdexe.bat」スクリプトも追加し、「OK」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/c8f50403-fdd1-1101-900a-a317e88d5669.png)

OU名「Remove_Computers」を選択し右クリックより、「既存の GPO のリンク」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/5ac0e6a6-4bc0-4c0a-4e4d-13fd1e2743b7.png)

作成した「leavepolicy」を選択し、「OK」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/ab123b80-0236-50b0-bc29-e76bb03297d9.png)

Remove_Computers に対象のグループ ポリシーがリンクされたことを確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/00850e57-d80a-d2f3-8504-452de3392de2.png)

最後に、gpupdate コマンドでグループ ポリシーを適用させます。

補足として、既定ではログオン後のスクリプトの実行が「5分後」になっているため、ログオン後に即時で反映させたい場合は「ログオン スクリプトの遅延を構成する」を「無効」に設定します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/09fbe673-ddea-dfa2-deee-6a3bcb6f61d0.png)

##### 7. 対象のコンピューターを再起動し、 Hybrid Azure AD Join が解除されることを確認する

※補足
スクリプト実行時に下記のようなエラーが出力される場合は、UNC path を無効化する必要があります。

```
UNC paths are not supported.  Defaulting to Windows directory.
```

レジストリ エディターにて、「Command Processor」の配下に「DisableUNCCheck」というファイル名を作成し、値「1」をセットします。
**編集対象は実行するコンピューター側のレジストリになります。*
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/dd58a87f-5391-8ce5-3358-ef894940d5bc.png)

スタートアップ スクリプトなので、対象のコンピューターを再起動しログオンします。
ログオン時に timeout コマンドで指定した時間によりサインアウトされる旨が通知されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/4d6898ef-f4d8-0f35-9ec5-46cb236f5d50.png)

コマンドプロンプトより「dsregcmd /status」コマンドレットをたたくと、下記のとおり、AzureADJoined が No になっていることが確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/0a8dc705-ea44-f23b-bc27-1737b0e5c659.png)

これで、OU 名 Remove_Computers に配置することで、 Hybrid Azure AD Join を解除することができました。
因みにですが、念のため Azure ポータルからも確認すると、下記のとおり対象のコンピューター(Windows10-18098)が消えていることが確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/ce337cff-4d98-f236-96aa-789de02c3d91.png)

##### 8. 再度 2. の OU に移動後にログオンし Hybrid Azure AD Join が再構成されるか確認する。
最後に、再度、 OU 名 Add_Computers に対象のコンピューターを移動させて 、 Hybrid Azure AD Join が再構成されることを確認します。

OU 名 Remove_Computers を選択し、対象のコンピューター(Windows10-18098)を右クリックから「移動」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/58802c37-3328-c7b1-e033-e6ddfd768d62.png)

移動先として、「Add_Computers」を選択し、「OK」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/e5060ce8-b17f-3b3c-b07b-fc94e49e655b.png)

Add_Computers に対象のコンピューターが移動したことを確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/716651a7-b74b-f829-6f66-f43b313906ca.png)

では、対象のコンピューターに Azure AD 同期済みユーザーでログオンしてみましょう。
資格情報を入力して「OK」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/78459516-dc3d-7f82-b8c0-88baa8056a5e.png)

即時には Hybrid Azure AD Join は構成されないのでしばらく待ちます。
具体的には、下記のように Diagnostic Test を順番に行っており、すべてのテストがクリアされると Azure AD にデバイスが Join されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/44a7ceb7-128e-9748-57e5-b463978f006f.png)

AzureADJoin が YES になりました。
PRTを取得するためには、もう1度ログオフ、ログオンする必要があります。
(画面のロック、ロックアウトでも可です)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/115b3bfb-bf2c-1653-bbe5-063019ad7b08.png)

再ログオン後に、PRTが取得できていることを確認できました。(AzureAdPrt：YES)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/544e9757-2ac8-4fdd-2ed3-867061a1372b.png)

Azure ポータル上でも問題なくデバイスが Hybrid Azure AD Join として登録されていることを確認できました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/1be49b18-dcce-5488-d79d-e8dd793e13c0.png)

#おわりに
今回の検証では、5月30日に公開された比較的新しい公開情報をもとに、OU 内のレジストリに SCP を作成し、１台単位で Hybrid Azure AD Join を構成し、スタートアップ スクリプトで Hybrid Azure AD Join をリモートで解除し、再度、元の OU に戻して Hybrid Azure AD Join が再構成できる、という検証を行いました。
本来であれば、Azure AD Connect を使い、フォレスト単位で構成するのが通常の運用方法ですが、まずは Hybrid Azure AD Join を構成できるか、という動作検証をしたい場合の手順を確認しました。

少しでも今回の Blog の内容が参考になれば幸いです。