こんにちは、今回とある案件で、Azure Active Directory アプリケーション プロキシ (以後:ADアプリケーションプロキシ) を検証する機会があったので記事にしてみました。
ADアプリケーションプロキシとは
非常に簡単に言えば Azure AD を認証に利用した、リバースプロキシ方式のシングル・サインオンとリモートアクセスを実現するサービスです。
シングル・サインオンの方式として現在以下が利用可能です。
・統合Windows認証を利用した、Kerberos制約付き委任(KCD)によるシングル・サインオン
・Ping Identity「PingAccess」を利用した、ヘッダーベースによるシングル・サインオン
・パスワード保管によるシングル・サインオン (パブリック プレビュー)
もうひとつ、「リンクされたサインオン」という方式が存在しますが、これはサービス単体ではシングル・サインオンは利用できず、他のサービス (Active Directory フェデレーション サービス (AD FS) など) を利用して、シングル サインオンを実装する方式です。なので、ただのリンク機能のようです。
ADアプリケーションプロキシの実装
今回は「パスワード保管によるシングル・サインオン」の実装方法を紹介します。シングル・サインオン先はプロジェクト管理ツール「Backlog」とします。
現在、パブリック プレビュー版とのことですので将来仕様が変更になる可能性があることをご留意下さい。
構成
今回、シングル・サインオン先以外はAzure上で構築し、以下の構成となっています。
①WebアプリケーションにADアプリケーションプロキシを経由してアクセスするためのURLを入力
②Azure AD 認証サービスにリダイレクトされて、事前認証が行われます。
③ユーザーの正当性が確認された場合、Azure AD によってトークンが作成されてユーザーに送信されます
④ユーザーはこのトークンをADアプリケーションプロキシに渡します
⑤ADアプリケーションプロキシはこのトークンを検証し、接続先やユーザー資格情報をADアプリケーションプロキシコネクタに送信します。コネクタは受信した資格情報を利用してWebアプリケーションに送信します。
⑥Webアプリケーションから応答がコネクタに送信されます。この応答はWebアプリケーションプロキシサービスに返され、最終的にユーザーに返されます。
事前準備
ADアプリケーションプロキシを利用するためには、以下の前提をクリアしている必要があります。
・Azure AD の「全体管理者」となっている Azureアカウントを所持していること
・Azure AD に「Basic」または「Premium P2」のライセンスが登録されていること(試用期間可)
・シングル・サインオン先と通信可能な「Windows Server 2012 R2」または「Windows Server 2016」のサーバが存在すること
・シングル・サインオン先に「HTTP」または「HTTPS」で接続できること
ADアプリケーションプロキシの有効化
まず、ADアプリケーションプロキシを有効にします。
以降の作業は全て、Azure AD の「全体管理者」となっている Azureアカウントで実施します。
Azure の左メニューから 「Azure Active Directory」>「アプリケーション プロキシ」をクリックします。
「アプリケーション プロキシの有効化」をクリックし、表示されるポップアップで「はい」をクリックします。
これで、ADアプリケーションプロキシが有効になりました。
ADアプリケーションプロキシコネクタのインストール
ADアプリケーションプロキシと連携するためのコネクタとして、ADアプリケーションプロキシコネクタをインストールします。「コネクタのダウンロード」をクリックし、ダウンロードページからインストールファイルをダウンロードします。
ファイル名:AADApplicationProxyConnectorInstaller.exe
インストールファイルをシングル・サインオン先と通信可能な「Windows Server 2012 R2」または「Windows Server 2016」に転送し、実行します。
画面に従い、「全体管理者」権限のある Azureアカウントとパスワードを入力することでインストールが完了します。もし、インストールに失敗した場合は、権限が付与されているか、インターネットへの送信ポートで「80」、「443」が開放されているかを確認してください。
Azure AD から以下のように状態が「アクティブ」となっていれば、ADアプリケーションプロキシとADアプリケーションプロキシコネクタが連携出来ていることを意味しています。
シングル・サインオン先の登録
シングル・サインオン先をADアプリケーションプロキシに登録します。
Azure の左メニューから「Azure Active Directory」>「エンタープライズ アプリケーション」をクリックします。そして、「新しいアプリケーション」をクリックします。
左メニューから「すべて」をクリックし、「オンプレミスのアプリケーション」をクリックします。
以下の基本情報を入力し、「追加」をクリックします。
・名前:アプリケーションの表示名(英数字)
・内部URL:コネクタがインストールされているサーバからアクセス可能なシングル・サインオン先のURL
・外部URL:ADアプリケーションプロキシを経由するURL(自動生成)
登録されると次にシングル・サインオンを利用するユーザを割り当てます。
左メニューから「ユーザとグループ」をクリックします。
「ユーザの追加」をクリックし、画面の様にAzureアカウントを登録します。
※Azure AD に一般ユーザが登録されているものとします。
登録したユーザを選択し、「資格情報の更新」をクリックします。
シングル・サインオン先のアカウント名、パスワードを入力し、「保存」をクリックします。
シングル・サインオンの有効化
パスワードベースのシングル・サインオンを有効化します。
Azure の左メニューから「Azure Active Directory」>「エンタープライズ アプリケーション」>「すべてのアプリケーション」>「対象のアプリ」をクリックします。
左メニューから「シングル サインオン」をクリックし、プルダウン一覧から「パスワードベースのサインオン」をします。
「サインオン URL」に上記で登録した「外部URL」を入力し、保存をクリックします。
保存後、画像の様に「上で指定された URL でサインイン フィールドが見つかりませんでした。引き続き・・・」が表示された場合、「パスワード シングル サインオン設定の構成」をクリックします。
構成モードより「サインイン フィールドの手動検出」を選択し、「サインイン フィールドの取り込み」をクリックします。
シングル・サインオン先の認証フォームが表示されますので、有効なアカウントを入力しログインします。入力欄が赤枠で囲まれれば正常に登録されています。
少し待つと以下画面に遷移しますので、「正常にアプリにサインインできました」チェックを入れ、「OK」をクリックします。
「指定された URL でサインイン フォームが正常に検出されました。これで・・・」が表示されていることを確認します。
動作確認
シングル・サインオンの動作確認を実施します。
ユーザ通知用URLの確認
ユーザに通知するURLを確認します。
Azure の左メニューから「Azure Active Directory」>「エンタープライズ アプリケーション」>「すべてのアプリケーション」>「対象アプリ」をクリックします。そして、左メニューから「プロパティ」をクリックし、「ユーザーのアクセス URL」を確認します。
シングル・サインオン確認
一度ログアウト、ブラウザ再起動、キャッシュ削除などをして、以下動作になることを確認します。
①ユーザ通知用URLにアクセス
②シングル・サインオンが利用可能な Azureアカウントでログイン
③シングル・サインオン先の認証フォームにて、ID/パスワードが自動入力され、ログインできること
※ブラウザ毎に専用プラグインが必要になります。(例:Access Panel Extension)
最期に
ADアプリケーションプロキシについてご紹介させて頂きました。ライセンスやAzureアカウントの権限など敷居はありますが、前提条件さえクリアすれば、比較的簡単に利用できましたと思います。注意点は、利用者のブラウザに拡張機能として、Access Panel Extensionのインストール事です。ブラウザに拡張機能をインストールする権限も必要です。また、利用者が使用するPCなどが変わった場合、都度拡張機能のインストールが必要です。
今回はAzure上にサーバを構築し、ログイン先をSaaSにしていますが、本来はオンプレミス上に構築されているWebアプリケーションに対して簡単にシングル・サインオンを実装できることを特徴にしています。ですが、単にシングル・サインオンを実装したいという場合はこのような構成でも十分だと思います。
また、統合 Windows 認証対応しているサービスと限定されますがKerberos制約付き委任(KCD)によるシングル・サインオンも利用できるとのことですので、機会あれば検証してみたいと思います。
Azure AD を利用してシングル・サインオンを利用したいとお考えの方はご検討頂ければと思います。
サイオステクノロジー株式会社 山田