「AzureADと同期したオンプレADにドメイン参加することで、信頼関係を結んでいるSaaSにSSOできる環境」をつくる。

# はじめに
Active Directory や Azure AD について手を動かした内容をまとめた、備忘録的記事です。

ユーザー目線では、以下のようなことができます。
・オンプレADのIDとパスワードでPCにログインする。
・ブラウザを開くと、サインイン無しで、AWSやAzureが使える。（SSO）

動作の様子を録画し、ポイント部分についてコメントをつけて、YouTube にあげています。


<iframe width="560" height="315" src="https://www.youtube.com/embed/vL5Ea_hW0_c" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>


以下に、手順と注意点を記載していきます。


# 設定手順
## 1. Hyper-V に Windows Server を入れて、ADDSの機能を追加する
1. 手元の Windows 端末にて、Hyper-V を有効化
   - 手順は、[こちらの記事](https://www.hitoriit.com/entry/2018/08/16/080200)が参考になる。
2. 「外部タイプ」のスイッチを作成
   - 「内部」タイプのスイッチだと、端末からインターネットにアクセスできない模様。
   - 「外部」のスイッチを作ると、私の環境ではホストOSのネット通信が激遅になった。
     → [こちらの手順](https://qiita.com/purple_jp/items/65005d59dd558299a401)で修復できた。
3. Hyper-V 上に、WindowsServer をインストール
    - 以下サイトから評価版をダウンロードできる。
        - [Windows Server 2016](https://www.microsoft.com/ja-jp/evalcenter/download-windows-server-2016)
    - 必要に応じてコンピュータ名を変えておくと、識別しやすい。（例：AD-Server）
4. Windows Server に、ADドメインコントローラーを構築
    - 手順は、[こちらの記事](https://www.hitoriit.com/entry/2018/08/24/080300)が参考になる。
    - ドメイン名は、AzureAD に設定しているカスタムドメイン名を登録すると良い。（例：hogehoge.com）
        - [この記事](https://note.com/ictlink/n/n156a68f6df33)にあるように、「.local」なドメインは、後ほどでてくる AzureAD Connect で同期されない。
        - 加えて、AzureAD側は、「hogehoge.onmicrosoft.com」か、カスタムドメインの「hogehoge.com」なので、カスタムドメインで進めた方が良い。
        - 私は最初、「.local」で進めたが同期されず、Windowsサインイン時にIDを「kensho@hogehoge.com」に変更することで進めることができた。トラブルシューティングが大変だった。
            - https://tslab-blog.com/?p=7#toc4
            - https://kbtblog.hatenablog.com/entry/2020/08/14/164744
5. ユーザーの作成
    - 手順は、[こちらの記事](https://thinkit.co.jp/story/2015/09/29/6431)が参考になる。
    - コンピュータも作る必要があるが、ドメインで一度ログインしてからの方が簡単なので後回し。

## 2. Hyper-V に Windows10 を入れて、ドメイン参加する
1. Hyper-V 上に、Windowsクライアント をインストール
    - 以下サイトから評価版をダウンロードできる。
        - [Windows10 Enterprise](https://www.microsoft.com/ja-jp/evalcenter/download-windows-10-enterprise)
    - ネットワークの設定項目にて、DNSサーバのIPアドレスを、ADを構築したWindowsServerのIPアドレスに変更する。
    - 必要に応じてコンピュータ名を変えておくと、識別しやすい。（例：AD-Client1）
2. ドメインに参加
    - 手順は、[こちらのドキュメント](https://learn.microsoft.com/ja-jp/windows-server/identity/ad-fs/deployment/join-a-computer-to-a-domain)が参考になる。
    - ドメイン参加後、「hogehoge.com\user1」もしくは「user1@hogehoge.com」等でサインインできるようになる。
    - Hyper-V を使っている場合、一度ローカルアカウントにサインインしないと、リモート権限がない旨のエラーでドメインユーザーではサインインができない状況になった。
        - 対応方法は[こちら](https://learn.microsoft.com/en-us/windows-server/virtualization/hyper-v/learn-more/use-local-resources-on-hyper-v-virtual-machine-with-vmconnect)の通りで、「拡張モード」をOffにして標準モードにすると、サインインできる。（接続画面上のボタン（基本セッション）を一か所押すだけでも可）
        
**ここまでで、通常のドメイン参加まで構築できた**

## 3. ADサーバにAzure AD Connectをインストールして、Azure ADにユーザー情報とデバイス情報を同期
1. Azure AD Connect をインストール・設定
    - 手順は、[こちらの記事](https://www.nobtak.com/entry/wvd04)が参考になる。
        - ユーザー情報の同期はマスト。
            - 「パスワードハッシュ同期」にチェックをつける。
                - ※ 検証目的なら、「ユーザーサインインの変更」項目内、サインオン方式で「パススルー認証」を選んでも良いと思う。
                    - 私が１回目に検証した時はハッシュ同期だけで問題なかったが、２回目に検証した時はパスワード情報が適切にAzureADに連携されず、認証でエラーが起きトラブルシューティングに手間どった。 「パススルー認証」に変更したことで問題は解決した。
            - 「シングルサインオン」にもチェックをつける。
            - 認証が通らないエラー発生時 ... ADサーバの参照先DNSサーバのIP設定を確認！
                - 理由：インストール中に、Microsoft Online の認証が通らないエラーに遭遇し２時間溶かした。理由はAAD ConnectをインストールしたADサーバの、参照先DNSサーバIPアドレスが勝手に書き変わっていたから。これをもとのデフォルトゲートウェイと同じIPアドレスに戻したところ正常に使えるようになった。
        - コンピュータも同期する。
            - コンピュータも同期しないと、SSOできない。
            - 「AAD Connect」の設定画面の「デバイスオプションの構成」項目から、「ハイブリッドAzureAD参加」を選択する。
2. オンプレADからAzureAD に、ユーザー情報等を同期
    - 待っていてもなかなか同期されないので、PowerShell からのコマンド実行が早い。
        - `> Start-ADSyncSyncCycle Initial` （[参考サイト](https://lig-log.com/execute-azure-ad-connect-directory-synchronization-with-powershell/)）
    - AzureAD の「ユーザー」項目に、オンプレで作ったユーザーが追加されていること。「デバイス」に、クライアント端末が追加されていることを確認する。

**ここまでで、オンプレADをAzureADへ同期することはできた。（オンプレ→Azureへの片方向同期）**
**この時点で、ドメイン参加したPCでブラウザを開き、https://portal.azure.com/ を開くと、**
**追加認証無しで Azure Portal を開けるはず。**

## 4. AzureAD での認証で、AWSにSSOできるようにする
1. ここでは、AWS と AzureAD とで信頼関係を結び、
  AzureAD で認証されたユーザーが、追加認証無しで AWS マネジメントコンソールにアクセスできるようにする。
    - 手順は、[こちらの記事](https://dev.classmethod.jp/articles/federate-azure-ad-and-aws-iam-identity-center/)が参考になる。
        - デフォルトだと、AzureADからAWSへのユーザー情報のプロビジョニングに時間がかかるが、
「要求時にプロビジョニングする」というボタンを押して、即時対応もできる。

**これで、仕組みは完成**

## 5. 一連の流れで動作確認
1. 再度、ドメインのID/PWでPCにサインインする。
1. ブラウザを開き、https://myapps.microsoft.com/ にアクセスする。
1. 追加の認証無しで、AWS マネジメントコンソールを開ける。

**再掲：** 動作のキャプチャ動画

<iframe width="560" height="315" src="https://www.youtube.com/embed/vL5Ea_hW0_c" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>