本投稿はOffice 365 Advent Calendarに参加しています。
「Office 365チームサイト活用ガイド 2013年版」が絶賛発売中のOffice 365 MVPの中村さんからバトンを頂きました。
今回は、Office365のアクセス制御の実現方法について述べたいと思います。
AD FSを利用すると、Office365に対するアクセス制御を行うことが可能です。Microsoftのサイトでも具体的な構成例などがいくつか紹介されています。
クライアントの場所に基づいた Office 365 サービスに対するアクセスの制限
アクセス制御ができるパターンは色々とあるのですが、いくつか制約事項もあります。その中で一番大きいと思われる物が、「ブラウザからのアクセス制御時に、クライアントのIPアドレスで制御ができない」ということになります。勿論、AD FSのクレームルールではなく、IISやその前のFirewallなどで完全にブロックすることは可能ですが、例えば以下の様なIPとADの情報を合わせた条件付けが必要な設定は実装できません。
- 本社からの内部アクセスの他、特定グループ(例えば出向者、在宅勤務者)のユーザーは特定IP(例えば出向先、自宅)からのブラウザアクセスを許可する
これは、アクセス制御に利用する送信元IPの情報が付与される場所に依存しています。
上図の通り、IPアドレスであるグローバルIP:Aは「X-MS-Forwarded-Client-IP」に格納されてAD FSに渡されてきますが、この情報はExchange Onlineにより付与されます。この為、クライアントからAD FS Proxyに直接アクセスをするOWAやSharePoint Onlineへのアクセスの際には付与されません。
これは仕様上仕方の無いことなので、今までは上記のような構成で外部アクセスを制御する場合は、SSL-VPNで一回社内ネットワークに接続させるなどしてAD FSサーバへの直接の接続性を確保する必要がありました。(VPNをクライアントPCで張ってからブラウザでシングルサインオンをするイメージ)
今回は、一部の皆さまの熱い要望(?)にお答えしてこの制限を回避してみたいと思います。
まず、この情報がどうやってAD FSに伝わってくるかですが、上記Microsoftのサイトに以下の記載があります
サードパーティのプロキシを使用している場合は、HTTP ヘッダーの x-ms-proxy を送信するようにプロキシを構成し、プロキシ ホストの完全修飾 DNS 名の値を含める必要があります。
この情報から推測すると、これらの情報はHTTPS通信のパケット中のHTTPヘッダに埋め込まれて送信されているのではないかと考えられます。つまり、AD FS Proxyの手前にリバースProxyなどHTTPSを終端できる物を挟んで、そこで情報を挿入してあげれば良いのでは?という推測ができます。
というわけで検証です。まずは手軽なARRでリバースProxyを立てます。詳細なやり方は他の方のblogで色々紹介されているので流れだけ。IISのインストールされたサーバ上でiis.netのサイトからWeb Platform Installer使って簡単にインストールできます。
適当なサイトを作成してAD FS Proxyで利用している物と同じSSL証明書をバインドします。URL書き換えからリバースProxy向けの規則を作成してAD FS Proxyに要求を転送するように設定。SSLオフロードの設定は外します。そして、リバースProxyの設定からカスタムヘッダの名称をX-MS-Forwarded-Client-IPに変更し、TCPポートを含めるのチェックを外します。
というわけで接続をしてみると、以下の様な情報が取得できます。(AD FSの監査ログを有効にして取得しています)
非常に地味ですが、x-ms-endpoint-absolute-pathが/adfs/ls/(つまり、Passiveフェデレーション)なのにx-ms-forwarded-client-ipに値が入っています!
また、ARRはIISに追加するモジュールなので例えばAD FS Proxy上にインストールして、グローバルIPからの接続をARRのサイトで受けて、それを127.0.0.1のDefault Web Site配下のAD FS Proxyに渡して処理するということも可能です。
この構成において、Webブラウザ以外からのアクセスはIISのサイトではなくAD FS Proxyのアプリケーションが処理しているので、ARRの処理を通りません。つまり、Exchange Onlineから付与されてきたX-MS-Forwarded-Client-IPの情報は保持されます(つまり、影響無し)。また、LyncクライアントやPowerShell、Office ProPlusなどMEXへのアクセスについてもARRでIP情報を付与できないので、これまで同様にIPベースの制御は残念ながらできない形です。
というわけで、今回はさわりの部分だけなので軽くヒント的な物になってしまいましたが、何かの参考になれば幸いです。ちなみに、もちろんこちらの記事の内容はMicrosoftによってサポートされている物ではありませんのでいつ仕様が変わって利用できなくなるか分かりません。あくまで今の時点で検証レベルではできましたよ、という話です。
次はVisual C# MVPの瀬尾さんです。