追加費用なしでアクセス制御を実現できる、Exchange Online条件付きアクセス

2018年10月19日

Office 365 Advent Calendar 2017 – Adventarの7日目です。予定ではExchange Onlineの予定表機能について一言物申そうと思ってましたが、タイムリーにExchange Onlineの新機能が実装されたので嬉しくてテーマ変更します。嬉しい!

Exchange Online 条件付きアクセスとは

MC124248 New feature: Client Access Rules for Exchange Onlineで予告されていたExchange Onlineの新機能です。Azure AD Premium,EM+Sなどの追加ライセンスなしに、Exchange Onlineの設定だけでクライアントからの接続を絞る条件付きアクセスが実現できます。すごいぜ!!!!

Exchange Online のクライアント アクセス規則: Exchange Online Help

できること

以下の条件を組み合わせて、合致した場合に"アクセス許可"または"アクセス禁止"を設定できます。

  • ネットワーク
    • 単体IP:192.168.1.1.
    • IPレンジ:192.168.0.1-192.168.0.254.
    • CIDR形式:192.168.3.1/24.
  • アクセス手法
    • ActiveSync:ExchangeActiveSync
    • Exchange管理センター:ExchangeAdminCenter
    • EWS:ExchangeWebServices
    • IMAP4:IMAP4
    • オフラインアドレス帳:OfflineAddressBook
    • OutlookAnywhere:OutlookAnywhere
    • OWA:OutlookWebApp
    • POP:POP3
    • PowerShellWebServices:PowerShellWebServices
    • Exchange Online PowerShell:RemotePowerShell
    • RESTAPI:REST
  • 認証方式
    • ADFS認証:AdfsAuthentication
    • ベーシック認証:BasicAuthentication
    • 証明書認証:CertificateBasedAuthentication
    • 非ベーシック認証:NonBasicAuthentication
    • Oauth認証:OAuthAuthentication
  • ユーザー属性
    • ユーザー名
    • City
    • Company
    • CountryOrRegion
    • CustomAttribute1-15
    • Department
    • Office
    • PostalCode
    • StateOrProvince
    • StreetAddress

ユーザー属性については、ユーザー名は文字列指定(*によるワイルドカード指定可能、複数指定可能)、その他はOPath形式での指定となります。

やってみる

よくありそうな社外からのOWA使用禁止をやってみました。

1. ルール設定

会社のIPが 163.49.213.44 って想定でルールを作ります。プロトコル指定はOWAで、163.49.213.44以外のネットワークからはDenyとします。

New-ClientAccessRule -Name "BlockOWA" -Action DenyAccess -AnyOfProtocols OutlookWebApp -ExceptAnyOfClientIPAddressesOrRanges 163.49.213.44

ゲットするとこんな感じです。

PS C:\Script> Get-ClientAccessRule | fl
RunspaceId                           : 96ccb8b3-bf62-4c77-8850-c84bc4369e8b
Priority                             : 1
Enabled                              : True
DatacenterAdminsOnly                 : False
Action                               : DenyAccess
AnyOfClientIPAddressesOrRanges       : {}
ExceptAnyOfClientIPAddressesOrRanges : {163.49.213.44}
AnyOfSourceTcpPortNumbers            : {}
ExceptAnyOfSourceTcpPortNumbers      : {}
UsernameMatchesAnyOfPatterns         : {}
ExceptUsernameMatchesAnyOfPatterns   : {}
UserIsMemberOf                       : {}
ExceptUserIsMemberOf                 : {}
AnyOfAuthenticationTypes             : {}
ExceptAnyOfAuthenticationTypes       : {}
AnyOfProtocols                       : {OutlookWebApp}
ExceptAnyOfProtocols                 : {}
UserRecipientFilter                  :
Scope                                : All
AdminDisplayName                     :
ExchangeVersion                      : 0.20 (15.0.0.0)
Name                                 : BlockOWA
DistinguishedName                    : CN=BlockOWA,CN=Client Access Rules,CN=Configuration,CN=myalmea.onmicrosoft.com,CN=ConfigurationUnits,DC=JPNPR01A004,DC=PROD,DC=OUTLOO
K,DC=COM
Identity                             : BlockOWA
Guid                                 : 0ae9e5ce-6edb-48e6-bdf8-76d23d08135e
ObjectCategory                       : JPNPR01A004.PROD.OUTLOOK.COM/Configuration/Schema/ms-Exch-Client-Access-Rule
ObjectClass                          : {top, msExchClientAccessRule}
WhenChanged                          : 2017/12/07 23:32:39
WhenCreated                          : 2017/12/07 23:32:39
WhenChangedUTC                       : 2017/12/07 14:32:39
WhenCreatedUTC                       : 2017/12/07 14:32:39
Id                                   : BlockOWA
OriginatingServer                    : KAWPR01A004DC01.JPNPR01A004.PROD.OUTLOOK.COM
IsValid                              : True
ObjectState                          : Changed

2. 動作確認

もちろん実機からも動作確認するんですけど、めっちゃ優れものだな~と思うのは、Test-ClientAccessRuleってコマンドでどのルールが適用されるかシミュレーションできるんですね。(オンプレADのポリシーの結果セット的なやつ)

Test-ClientAccessRule -AuthenticationType BasicAuthentication -Protocol OutlookWebApp -RemoteAddress 163.49.213.44 -RemotePort 443 -User admin@almea.jp
Test-ClientAccessRule -AuthenticationType BasicAuthentication -Protocol OutlookWebApp -RemoteAddress 163.49.213.45 -RemotePort 443 -User admin@almea.jp
Identity Name     Action
-------- ----     ------
BlockOWA BlockOWA DenyAccess

1行目は許可したいIPからアクセスしている想定なのでルールがヒットしませんが、2行目は許可IPじゃないので、Denyのルールにヒットしてます。これで許可と拒否ルール間違えて実装とかしても気づくね!

ちなみに最初のルール設定時に"最長24時間かかる事があるよ"って言われて、まっさか~って思ってたらマジで12時間くらいかかったので気長に待ちましょう。2回目からは1時間以内に反映されるようです。

実機からは以下のような画面でブロックされます。

f:id:teraco:20171207235546p:plain

これでAzure AD Premium, EM+S不要じゃない?

一応、EM+Sとの違いをまとめておきますと。

Exchange Online条件付きアクセス EM+S条件付きアクセス
対象 Exchange Online Office 365,Azure AD 連携アプリ
条件 IP、クライアント種別、認証方式、ユーザー IP、ブラウザまたはアプリ、ユーザー、バイス
アクション 許可、拒否 許可、拒否、二要素目を求める

バイス情報での制御、条件に合致したら電話番号などで二要素認証したいならEM+S。逆にExchange OnlineはpowershellREST APIなど細かい制御が出来るのはよいかも。管理用端末からはpowershellでしかアクセスさせない、とか。

なお、EM+Sの条件付きアクセスと違って、Exchange Online条件付きアクセスでOWAアクセス禁止しても、Teamsその他にはふつーにログインできます。不思議だわ~。

※ EM+S条件付きアクセスでExchange Onlineへのアクセスを禁止すると、Exchange Onlineを基盤としているTeamsへのアクセスも禁止されてしまう

Tips

Exchange Online条件付きアクセスはルールに優先度がつけられ、優先度の高い方から合致したルールが有効になるようです。てことで、管理者IDについてはpowershellを常時許可、みたいなルールを優先度0に入れておくと安全だな、と思いました。

ということで

Exchange Online導入したいけど、ネットカフェからはアクセスさせたくない、ちゃんとVPN張ってアクセスさせたい、というエンタープライズ用途には朗報なんじゃないでしょうか。Exchange Onlineについては、既定の機能でユーザー毎にIMAPやPOPの許可/不許可もコントロールできましたが、Exchange Online条件付きアクセスで一括でポリシーを設定できるのも運用上楽になるかと思います。

逆に言うと、EM+S買ってIP制限しかしない、とかヌルいことやってないで、もっとリッチな機能使おうよ、ってメッセージなんでしょうか。

明日、12/8は@hrfmjpさんです。お楽しみに!

Posted by tera