こんにちは。サイオステクノロジー技術部の小山です。
Microsoft Azureでは、ライセンス契約することによりMFA機能を利用することができます。
機能の中に、MFAサーバーが認証LDAPとして振る舞い、認証時に多要素認証を行うという機能があり、
面白そうなのでShibboleth IdPと連携して簡易な多要素認証環境を構築しました。
はじめに
Shibboleth IdPとは
SAML規格に対応したシングルサインオンを実現するためのオープンソースソフトウェアです。
MFAとは
MFA(Multi-Factor Authentication)とは、パスワード認証以外に、ユーザーが所持している物や生体情報で認証を行うことで、セキュリティ強度を高めるための認証方法です。
Azure MFAの種類
AzureのMFA機能には大きく分けて下記の2種類あり、それぞれ利用できる機能が異なります。両者の違いについては、こちらを参照ください。
・Azure MFA・・・クラウド版
・Azure MFA Server・・・オンプレミス版
(※2018年5月現在、MFAの利用はAzure AD Premiumライセンスが必要となります。検証する際は試用版等の使用が必要です。)
用途によってどちらを使うか決めましょう。今回は下記の理由からオンプレミス版(Azure MFA Server)を使用します。
・ユーザー源泉がオンプレミスのLDAP
・MFA ServerがLDAPとして振る舞う必要がある
・Shibboleth IdPのカスタマイズを最小限にしたいので、携帯電話でOTPを受信⇒返信するだけで認証できる「双方向 SMS」認証
構築する環境
以下のような環境を構成します。
・OpenLDAPがユーザーの源泉および認証先
・内部(オフィス等)からはパスワード認証のみ
・外部からはパスワード認証+OTP
Shibboleth IdP~OpenLDAP間の認証をMFA Serverが中継し、認証時に双方向OTP認証を実行する
サーバーは下記を用意します。
・Shibboleth IdP + OpenLDAPサーバー (CentOS7.4)
・MFA Server用のWindowsサーバー (Windows Server 2016)
前提条件
・Azure Active Directoryを作成し、Azure AD Premium(試用版でも可)を契約していること
・Shibboleth IdP/OpenLDAPのインストール、セットアップが済んでいること
MFA Serverのダウンロード
MFA Serverのダウンロードを行います。
・作業対象:自身の作業端末
AzureポータルからAzure Active Directoryにアクセスし、【MFAサーバー】を選択します。
【ダウンロード】をクリックしてMFA Serverのインストーラをダウンロードします。
【双方向テキストメッセージのタイムアウト秒数】にタイムアウト秒数を入力し、保存します。
Shibboleth IdPのログイン中に応答する必要があるので、長めに設定しています。(画像では3分にしていますが、もう少し短くてもいいかもしれません。)
以上でMFA Serverのダウンロードは完了です。
MFA Serverのインストール
MFA Serverのインストールを行います。
・作業対象:MFA Server用のWindowsサーバー
ダウンロードしたインストーラをWindowsサーバーに転送し、ダブルクリックで起動します。
設定はデフォルトのまま【Next】をクリックします。
【Finish】をクリックします。
インストール完了後、MFA Serverが起動します。
構成ウィザードを実行するか聞かれますが、スキップします。
Azureポータルの【MFAサーバー⇒サーバー設定】の箇所で、【生成】をクリックして表示される認証情報をメモしてください。
メモした認証情報をMFA Serverに入力し、【Activate】をクリックします。
任意のグループ名を入力し、【OK】をクリックします。
構成ウィザードを実行するか聞かれるため、【No】をクリックします。
MFA Serverが起動すれば、インストールは完了です。
ユーザー情報の同期
LDAPのユーザーに対して多要素認証を設定するため、OpenLDAPからユーザー情報の同期を行います。
・作業対象:MFA Server用のWindowsサーバー
MFA Serverの左メニューから【Directory Integration】を選択します。
【Settings】タブで、源泉ディレクトリの情報を入力します。今回はOpenLDAP想定です。
【Filters】タブで、LDAP参照するためのフィルタを入力します。
【Attributes】タブで、取得する属性を設定します。デフォルトはActive Directoryの属性になっているので注意しましょう。
特に、Unique identifierについては、ユーザー識別に使用されるため重要です。
【Synchronization】タブで、同期の設定を行います。今回は認証方式として、テキストメッセージの双方向(Two-Way)を設定します。
設定が終わったら【Synchronize Now】をクリックすると、LDAPからのユーザー同期が実行されます。
左メニューの【Users】から、ユーザーが同期されているか確認します。
デフォルトではユーザー名の照合にSIDが使用されているため、OpenLDAPからインポートしたままでは
“User does not have a SID needed for username resolution”という警告により、ユーザーを使用することができません。
そのため、ユーザー照合に使用する情報を、SIDからLDAP一意識別子に変更する必要があります。
左メニューの【Company Settings】の【UsernameResolution】タブで、【Use LDAP unique identifier attribute for matching usernames】を選択します。
再度、左メニューの【Users】からユーザーを確認し、警告が消えていることを確認します。
以上でユーザー情報の同期設定は完了です。
LDAP認証設定
MFA ServerがLDAPとして振る舞うよう設定します。
・作業対象:MFA Server用のWindowsサーバー
MFA Serverのコンソールを起動し、左メニューの【LDAP Authentication】を選択し、LDAP認証方のポート番号、許可するクライアントを設定します。
以上でLDAPの設定は完了です。
動作確認
ここまででMFA Serverの準備が整いました。実際にサーバー上で認証テストを行います。
・作業対象:MFA Server用のWindowsサーバー
MFA Serverのコンソールを起動し、左メニューの【Users】を選択します。
一覧からテストするユーザーを選択し、【Test】をクリックします。(※ユーザーにはSMS用の電話番号が同期されいるものとします。)
OpenLDAPのユーザーと同じパスワードでLDAP Bindを行います。
テキストメッセージがユーザーの電話番号に送信されます。
携帯電話でメッセージを受信することを確認します。
双方向(Two-Way)のため、受信したコードをそのまま入力して返信します。
送信したコードが正しければ、認証テストは成功となります。
以上でMFA Serverの準備は完了しました。
次回はShibboleth IdP側の設定と、動作確認を行います。
MFAserverがお亡くなりになってAzure MFAのみになってしまったので、
そこもあわせて最新版をおねがいしまっす