Office365の正式リリースから3ヶ月強、10/12になってようやくADFS 2.0のRU1がリリースされました。いくつかOffice365向けの大きな機能追加がなされておりますが、今回はアクセス制御の機能強化について解説します。
これは、簡単に言うとリッチクライアント(Outlook2010等)でExchange Onlineにアクセスした際、今までは全てExchange OnlineのIP帯からのアクセスとしてADFS Proxyから見えていた物が、更にそのアクセス元のIPやプロトコルなどをHTTPヘッダとして付与して送信してくれるようになった為に付与できるようになった機能です。(平たく言うと敢えて漏れ串になったということ)
今回のRUをインストールし、設定することにより、以下の5つの属性が追加でクレームルールとして利用出来るようになり、主要なケースを元にしたアクセス制御が可能となります。
- X-MS-Forwarded-Client-IP Exchange Onlineに接続されたIP
- X-MS-Client-Application Exchange Onlineに接続したプロトコル
- X-MS-Client-User-Agent Exchange Onlineに接続したクライアント
- X-MS-Proxy Proxyサーバ経由でのアクセスか否か
- X-MS-Endpoint-Absolute-Path ActiveフェデレーションかPassiveか
サンプルに載っている物を含め、いくつか動作検証を行った物を紹介します。ちなみに、通常のクレームルールに載っておりますが、簡単にクレーム発行ルールに基づき
type=deny有り | type=deny無し | |
issue type=permit有り | アクセス拒否 | アクセス許可 |
issue type=permit無し | アクセス拒否 | アクセス拒否 |
の様な制御マトリックスになります。それでは、いくつかのケースに基づきクレームルールを記載してみます。
①社外からOffice365へのアクセスをすべて拒否する
1.すべてのユーザにアクセスを許可
=> issue(Type = "http://schemas.microsoft.com/authorization/claims/permit", Value = "true");
2.会社のFirewallのIP(123.123.123.123)からのアクセスを除き、ADFS Proxy経由のアクセスを拒否する
exists([Type == "http://schemas.microsoft.com/2012/01/requestcontext/claims/x-ms-proxy"]) && NOT exists([Type == "http://schemas.microsoft.com/2012/01/requestcontext/claims/x-ms-forwarded-client-ip", Value=~ "123.123.123.123"]) => issue(Type = "http://schemas.microsoft.com/authorization/claims/deny", Value = "true");
②Exchange ActiveSyncを除き、社外からOffice365へのアクセスをすべて拒否する
1.すべてのユーザにアクセスを許可
=> issue(Type = "http://schemas.microsoft.com/authorization/claims/permit", Value = "true");
2.ActiveSyncプロトコルまたは会社のFirewallのIP(123.123.123.123)からのアクセスの場合を除き、ADFS Proxy経由のアクセスを拒否する
exists([Type == "http://schemas.microsoft.com/2012/01/requestcontext/claims/x-ms-proxy"]) && NOT exists([Type == "http://schemas.microsoft.com/2012/01/requestcontext/claims/x-ms-client-application", Value == "Microsoft.Exchange.ActiveSync"]) && NOT exists([Type == "http://schemas.microsoft.com/2012/01/requestcontext/claims/x-ms-forwarded-client-ip", Value =~ "123.123.123.123"]) => issue(Type = "http://schemas.microsoft.com/authorization/claims/deny", Value = "true");
③Exchange ActiveSyncならびにブラウザベースのAPを除き、社外からOffice365へのアクセスをすべて拒否する
1.すべてのユーザにアクセスを許可
=> issue(Type = "http://schemas.microsoft.com/authorization/claims/permit", Value = "true");
2.ActiveSyncプロトコルまたはブラウザアクセス、もしくは会社のFirewallのIP(123.123.123.123)からのアクセスの場合を除き、ADFS Proxy経由のアクセスを拒否する
exists([Type == "http://schemas.microsoft.com/2012/01/requestcontext/claims/x-ms-proxy"]) && NOT exists([Type == "http://schemas.microsoft.com/2012/01/requestcontext/claims/x-ms-client-application", Value == "Microsoft.Exchange.ActiveSync"]) && NOT exists([Type == "http://schemas.microsoft.com/2012/01/requestcontext/claims/x-ms-forwarded-client-ip", Value =~ "123.123.123.123"]) && NOT exists([Type == "http://schemas.microsoft.com/2012/01/requestcontext/claims/x-ms-endpoint-absolute-path", Value == "/adfs/ls/"]) => issue(Type = "http://schemas.microsoft.com/authorization/claims/deny", Value = "true");
④明示されたADグループを除き、社外からOffice365へのアクセスをすべて拒否する
1.すべてのユーザにアクセスを許可
=> issue(Type = "http://schemas.microsoft.com/authorization/claims/permit", Value = "true");
2.明示されたADグループ(S-1-1-12-1234567890-123456789-123456789-1234)のメンバーもしくは会社のFirewallのIP(123.123.123.123)からのアクセスの場合を除き、ADFS Proxy経由のアクセスを拒否する
exists([Type == "http://schemas.microsoft.com/2012/01/requestcontext/claims/x-ms-proxy"]) && NOT exists([Type == "http://schemas.microsoft.com/ws/2008/06/identity/claims/groupsid", Value =~ "S-1-1-12-1234567890-123456789-123456789-1234"]) && NOT exists([Type == "http://schemas.microsoft.com/2012/01/requestcontext/claims/x-ms-forwarded-client-ip", Value =~ "123.123.123.123"])=> issue(Type = "http://schemas.microsoft.com/authorization/claims/deny", Value = "true");