2/6にクラウドベースのMFA認証ができるようになったので試してみる。 #いままではAzure Multi-Factor Authentication Serverなるものをオンプレに構築する必要があった。かつ、その場合、Azure ADのMFAとは別ユーザ(オンプレ側のみ有効なユーザ)を作る必要があったので不便でした。
はじめに
参考にさせて頂いたサイトです。(感謝)
- http://blog.engineer-memo.com/2012/12/31/windows-server-2012-%E3%81%AE-rd-%E3%82%B2%E3%83%BC%E3%83%88%E3%82%A6%E3%82%A7%E3%82%A4%E3%81%AE%E5%B0%8E%E5%85%A5/
- http://www.rdsgurus.com/step-by-step-using-windows-server-2012-r2-rd-gateway-with-azure-multifactor-authentication/
前提
接続に使用するユーザはAzure ADでMFA設定が済んでいるものとします。
構成
下記サーバが必要になります。
- Active Directory(※Azure ADとAD Connectで同期済み)
- Remote Desktop Gateway
- Network Policy Server
おおまかな手順
- Remote Desktop Gateway(便宜上、以降はRDPGWsvと記載します)の構築 & Let’s Encryptで証明書の作成(任意)
- Network Policy Server(便宜上、以降はNPSsvと記載します)の構築
- クラウドベースのAzure MFA認証を実装するまえに、オンプレだけで接続テスト
- NPS拡張モジュールのインストール(クラウドベースのAzure MFA認証に必要)
- 接続テスト
RDPGWsv(Remote Desktop Gateway)の用意
- 機能と追加からリモートデスクトップゲートウェイとリモートデスクトップWebアクセスを選択。勝手にNPSとIISもインストールされるがそれも必要なのでインストール。(リモートデスクトップWebアクセスは要らないかも)
- Let’s Encryptで証明書を作成。
参考:https://undersooon.hatenablog.com/entry/2017/02/12/042838 - インストールが完了したらリモートデスクトップゲートウェイマネージャを起動。サーバ名を右クリックして「プロパティ」を表示。事前に作成した証明書をインポート(証明書を用意していない場合は自己証明書でもOK)
https://cdn-ak.f.st-hatena.com/images/fotolife/a/atsuokun/20170214/20170214223924.png - [RD CAPストア]にNPSsvのIPアドレスorホスト名を指定(NPSsvのIPアドレスを振っていない場合は振っておいてください。)
- [SSLブリッジ]は下記図の通り。
- プロパティから抜けて、[リソース承認ポリシー]の編集。許可設定なのでよしなにやってください。下記はサンプル。
- 次はネットワークポリシーサーバの設定。※RDPGWsv側の設定です。NPSsv設定では無いので間違えないように。
- [RADIUSクライアント]は下記図のように設定。フレンドリ名/共有シークレットは任意。IPアドレスはNPSsvのものを指定。
- [リモートRADIUSサーバ]はデフォルトの設定から下記の赤枠の箇所を60秒に設定。(デフォルトだと短すぎてMFA応答が間に合わないため)
- [接続要求ポリシー]は元々設定されている「TS GATEWAY AUTHORIZED POLICY」を2つ複製し、元々の「TS GATEWAY AUTHORIZED POLICY」自体は無効化する。
- 複製したポリシーのうち、一つを下記図のように設定する。ポリシー名は任意。クライアントのフレンドリ名は[RADIUSクライアント]で設定したものと同じにしください。※処理順序は1番目にしてください。
- 複製したポリシーのうち、もう片方を下記図のように設定する。こちらもポリシー名は任意。※処理順序は2番目にしてください。
- 最後に「NPS(ローカル)」を右クリックして、「Active Directoryにサーバーを登録を選択」
NPSsv(Network Policy Server)の用意
- 役割と機能の追加からネットワークポリシーサーバを選択。
- [RADIUSクライアント]は下記図のように設定。IPアドレスはRDPsrv。こちらもフレンドリ名/共有シークレットは任意。
- [リモートRADIUSサーバ]の設定を新規に作成。設定は下記図のように設定。グループ名は任意。
- [接続要求ポリシー]で設定を新規に作成。設定は下記図のように設定。ポリシー名は任意。クライアントのフレンドリ名は[RADIUSクライアント]で設定したものと同じにしください。※処理順序は1番目にしてください。
- [接続要求ポリシー]で設定をもう一つ新規に作成。こちらもポリシー名は任意。※処理順序は2番目にしてください。
- [ネットワークポリシー]の設定も必要なので設定。こちらも全体的に任意なのですが私が設定した内容をサンプルで下記図に貼ります。(制約タブは認証方法以外はデフォルトなので割愛。設定タブは全てデフォルトのままだったのでそこも割愛。)
- 最後に「NPS(ローカル)」を右クリックして、「Active Directoryにサーバーを登録を選択」
Remote Desktop Gatewayが機能するかテスト
以上で、MFAしない状態の環境が構築できたのでMFAを実装する前に動作テスト。 ※この状態で動作しないとMFAも動作しないので必ずテストしてください。
- mstsc.exeを起動し、[任意の場所から接続する]の[設定]を選択。
- サーバー名にRDPGWsvのFQDNを入力、[ローカルアドレスにはRDゲートウェイサーバを使用しない]のチェックをはずす。
- 以上の状態で任意の接続先に接続し、接続できることを確認。※もちろん接続先側でリモートデスクトップの設定が許可されていることが必要です。
NPS拡張モジュールのインストール
ここまできたらいよいよクラウドベースのAzure MFA認証の実装です。
- 下記3つをNPSsvで、上から順番にインストールする。
- 管理者権限でPowershellを起動。下記コマンドを入力。
- cd “C:\Program Files\Microsoft\AzureMfa\Config”
- .\AzureMfaNpsExtnConfigSetup.ps1
- Directory IDを聞かれるのでAzure新ポータルを起動し、[Active Directory] - [Propertys] - [Directory ID]から値を取得し、入力。
- 認証ダイアログがポップアップされるのでAzure ADの全体管理者のユーザID/パスワードを入力。
接続テスト
以上で構築完了なので、前述した手順と同じ通り、Remote Desktop Gateway経由でmstsc.exeから接続する。今度はAzure ADで設定されたMFA認証が走り、それを許可しないかぎり、リモートデスクトップ接続ができないことを確認する。
最後に
とても簡単にリモートデスクトップ接続にMFA認証を追加することができました。AzureAD最高! そしてAzureサポートの方が親切に教えてくれたのでそこまで困らずに構築できました。
ちなみにNPSが2つあるのは、NPS拡張モジュールをインストールしたサーバ側が強制的にAzure ADに認証をかけにいくようになってしまうので、オンプレ側の認証とクラウド側の認証を分ける必要があるためです。
あと、IISの設定が素のままなので、セキュリティが気になる方はよしなにいじってください。 (IISで頑張るんじゃなく、外部ファイアウォールかなんかで許可されたIP以外は接続しない、とかが無難なんじゃないかと。)