AzureAD条件付きアクセスの制御方法を表に纏めて,気になる部分検証してみました

***
この記事は [リンク情報システム](https://www.lis.co.jp/) の「[2021新春アドベントカレンダー TechConnect!](https://qiita.com/dgkz/private/eabde6515457d8acec9b)」のリレー記事です。
TechConnect! はアドベントカレンダーとして、engineer.hanzomon というグループによってリレーされます。
（リンク情報システムの[Facebook](https://www.facebook.com/lis.co.jp/)はこちらから）

本日は服部が担当します。
***


##AzureADの条件付きアクセスとは

AzureADの条件付きアクセスは、ユーザーからのアクセスを制御するのに利用できる機能です。
例えば、このユーザーはこのアプリにログインさせたいけど、このユーザーはさせたくないとか、ここからのアクセスは二要素認証をさせたい等、様々なアクセス制御が可能になります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/924475/61db9b42-4c24-6417-1be2-17c1cbc18f0e.png)



microsoftの技術文献を見ると詳細は載っていますが、設定情報が少しわかりにくかったので表にしてみました。

##条件付きアクセス設定項目表


|大項目	|中項目	|内容	|
|:----------	|:----------	|:----------	|
|**名前-**	|	|条件付きアクセス名：ユニークなものでOK	|
|**割り当て-**	|	|	|
|	|**ユーザーとグループ**	|条件付きアクセスを割り当てるユーザーとグループを指定できる　対象/対象外も選択可能	|
|	|〇なし	|ユーザーとグループの指定なし	|
|	|〇すべてのユーザー	|AzureADテナントにいるすべてのユーザーが条件付きアクセスの対象となる	|
|	|〇ユーザーとグループ	|ユーザーとグループを以下から選択	|
|	|　□すべてのゲストと外部ユーザー	|ゲストと外部ユーザーを指定できる	|
|	|　□ディレクトリロール	|officeアプリ管理者等　ロール単位で選択が出来る	|
|	|　□ユーザーとグループ	|対象のユーザとグループを指定できる	|
|	|**クラウドアプリまたは操作**	|クラウドアプリを指定できる　対象/対象外も選択可能	|
|	|クラウドアプリ	|	|
|	|　〇なし	|クラウドアプリの指定なし	|
|	|　〇すべてのクラウドアプリ	|AzureADテナントのすべてのクラウドアプリが対象となる	|
|	|　〇アプリを選択	|対象アプリを指定できる	|
|	|ユーザ―操作	|	|
|	|　□セキュリティ情報の登録	|ユーザー設定から対象のユーザーに対しセキュリティ情報の登録をするとMFAとSSPRの統合管理が可能となるが、その対象ユーザーに対してアクセス制御が実施できる	|
|	|**条件**	|	|
|	|デバイスプラットフォーム	|対象デバイスを指定できる。対象/対象外も選択可能　注意：デバイスはアクセス元のuseragent文字列でデバイスを判断させている。ただしipadからのsafari等useragent等だけで判断すると、問題が起こるものについては、クッキーをもとに判別するなど一部ユーザー エージェント以外の要素を判断材料としている	|
|	|　〇任意のデバイス	|対象のデバイス全て（Android/ios/windows phone/windows/macOSを指す。ラズパイのLINUX等上記に当たらないデバイスもすべてが当てはまる　ちなみにデバイスプラットフォームを未構成にした場合も、同様の動作になる	|
|	|  〇デバイスプラットフォームの選択	|Android/ios/windows phone/windows/macOS　を選択できる　全てを選択した場合は、選択したデバイスは制御されるが、ラズパイのLINUX等上記に当たらないデバイスは対象デバイスにならない	|
|	|**場所**	|対象の場所を指定できる　GIP(グローバルIPアドレス）等で場所の絞り込みが出来る　対象/対象外も選択可能	|
|	|　〇すべての場所	|全ての場所からのアクセスを対象にできる	|
|	|　〇すべての信頼できる場所	|ネームドローケンション(IPアドレスの範囲を設定できる。社内アクセスや社外アクセスを区別したいときに利用）で設定する際に、”信頼できる場所としてマークする”事が可能。信頼できる場所を纏めて、対象にできる	|
|	|　〇選択された場所	|ネームドロケーションでGIP単位で設定した値を割り当てる事が出来る	|
|	|**クライアントアプリ**	|先進認証かレガシ認証でクライアントの指定ができる。はい/いいえの選択ができ、いいえにした場合は最新および従来の認証を含むすべてのクライアント アプリからのアクセスが可能	|
|	|　先進認証クライアント	|	|
|	|　　□ブラウザー	|ブラウザからのアクセスを対象にできる(SAMLやOAUTH等のWEBベースのアプリケーションも含まれる）	|
|	|　　□モバイルアプリとデスクトップクライアント	|モバイルアプリとデスクトップクライアントアプリを対象にできる　officeのデスクトップアプリ(outlook）やiphoneのアプリ等を利用する場合を対象にできる	|
|	|　レガシ認証クライアント	|	|
|	|　　□Exchange ActiveSync クライアント	|レガシ認証のみを使用するExchangeActivesyncクライアントを対象にできる※注　レガシ認証は基本認証を使用するプロトコルだが、基本認証は2021後半に廃止予定	|
|	|　　□他のクライアント	|その他のメールプロトコル(SMTPやPOPを対象に出来る)　※注　基本認証は2021後半に廃止予定	|
|	|**デバイスの状態**	|Hybrid Azure AD Join を使用したデバイスやintune準拠単位で指定できる　いいえにするとデバイスの指定はされない	|
|	|　はい	|	|
|	|　　〇すべてのデバイスの状態	|Hybrid Azure AD Join やintune準拠　等全てのデバイス状態を対象にできる	|
|	|　いいえ	|	|
|	|　　□Hybrid Azure AD Join を使用したデバイス	|Hybrid Azure AD Join を使用したデバイスを対象外に出来る	|
|	|　　□デバイスは準拠としてマーク済み	|intune準拠したデバイスを対象外にできる	|
|**アクセス制御-**	|	|	|
|	|**許可**	|アクセスを付与させるか　アクセスをブロックさせるか選択できる	|
|	|　□多要素認証を要求する	|MFA(多要素認証）を強制的に割り当てることができる	|
|	|　□デバイスは準拠しているとしてマーク済みである必要があります	|intuneに準拠しているデバイスを対象にできる	|
|	|　□Hybrid Azure AD Join を使用したデバイスが必要	|Hybrid Azure AD Joinデバイスを対象にできる	|
|	|　□承認されたクライアント アプリが必要です	|承認済み (先進認証対応) クライアント アプリからのアクセスのみと限定。　※注　承認済みクライアントアプリはMS製品しかできない模様。アプリ保護ポリシーをせずに、アプリケーションを通したい場合に利用。　Microsoft Authenticator のようなブローカー アプリが必要になる	|
|	|　□アプリの保護ポリシーが必要	|アプリ保護ポリシーがかかったアプリを対象にできる	|
|	|**セッション**	|セッション方法を指定できる	|
|	|　□アプリの条件付きアクセス制御を使う	|MCAS(Microsoft Cloud App Security ）等で設定したアクセス制御を対象にできる。現状はMCASの為に利用される設定	|
|	|　□サインインの頻度	|先進認証(ADAL認証）の規定90日のリフレッシュトークンチケットに対し、強引にサインさせる事が出来る。ネイティブ アプリ (デスクトップ アプリなど) でリフレッシュ トークン を失効させ、サインインを強制的に行わせる機能。サインイン頻度は(AOUTH/OIDC）で実装可能。SAML連携している3rdパーティ製アプリは不可	|
|	|　□永続的なブラウザー セッション	|ブラウザを閉じても　再び開いた場合サインイン状態を維持できる　すべてのクライアントアプリでのみ適用　ブラウザ経由でAzureADに認証を行った際のセッショントークンが保持され「サインインの状態を維持しますか?」と表示されなくなる。ただしシークレットモードの場合は、クッキー情報が共有されないので、ブラウザを閉じたらセッションは維持されない	|
|**ポリシーの有効化**	|	|	|
|	|レポート専用/オン/オフ	|レポート専用はテスト用/　条件付きアクセスはオン/オフで制御できる　	|


###条件付きアクセス設定時の注意
実際に設定してみて気になった部分をピックアップします。

**〇デバイスプラットフォームの選択**
デバイスの選択はAndroid/ios/windows phone/windows/macOS　の5種類しか設定できません。ですので、全部選択しても、ラズパイのLINUX等は条件付きアクセスの制御の対象にならないので注意が必要です。

全てのアクセスを制御したい場合はデバイスを任意のデバイスにするか、未構成にする必要があります。



**〇デバイスプラットフォーム**

デバイスの判定は現時点ではアクセス元のuseragentで判定しています。
ただこれだと、不都合が起きます。
以下はipadからアクセスしたchrome safariのユーザーエージェントをそれぞれ記載したものです。

【Chrome】
Mozilla/5.0 (iPad; CPU OS 14_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) CriOS/85.0.4183.109 Mobile/15E148 Safari/604.1

【Safari】
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0 Safari/605.1.15


この場合、Safariアクセスでは　デバイスはMacOSとして判定されてしまうため、
一部のアクセスについては、useragentだけでなく、クッキーも判別要素にして、デバイスの判定をして両方ともipadとして判定しているとMicrosoftさんから伺いました。

故意にuseragentをいじったりすれば、デバイスの判定も変わってしまうらしいです。

実際に確認してみます。

以下はgoogleディベロッパツールを利用し、WindowsPCのchromeからのアクセスを
故意にMACOSからのアクセスに変えて、salesforceにアクセスしたものです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/924475/f28e2d6e-3bcf-1336-6544-8c10e5fc9d2f.png)

salesforceにログイン後、AzureADでサインログを確認してみます。
OSがMACOSとして判断されていますね。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/924475/140cb372-87ea-56b2-0912-e70e71488f7a.png)



**〇デバイスは準拠しているとしてマーク済みである必要があります**

準拠しているかの判定はintuneに登録されていることが前提ですが、
intuneに登録されていれば判定されるわけではありません。
例えばintune登録すると、デバイス証明書が対象のデバイスにインストールされますが、
条件付きアクセスでintuneに準拠されるかどうかは、このデバイス証明書を持っているかではなく

"デバイス証明書をAzureADに提示できるか"

が判定基準になります。
具体的に見てみようと思います。

まずintuneに登録時はデバイス証明書というものがインストールされます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/924475/21fc9076-126d-f633-d58e-509fe47b7995.png)
AzureADの条件付きアクセスで、intue準拠判定を受けるにはこのデバイス証明書を提示できるかが判定基準になります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/924475/9fdd0cad-5257-c123-a9cf-2f0e07bd9a11.png)
Ofiice製品はデバイス証明書をAzureADに提示する仕組みがあるので、条件付きアクセスの判定対象になります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/924475/e6c8af6f-608d-338c-6c56-5565978d210d.png)
3rdパーティ製アプリの場合、デバイス証明書が端末にインストールされてても、証明書を提示する仕組みがないものが多く、その結果Intuneに準拠していない=アクセス拒否の結果になります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/924475/d8be43ef-a029-3164-0edd-947f05aa0727.png)

持っていても見せる仕組みがなければ、許可判定はされません。
3rdパーティ製アプリはその仕組みが実装されていない事が多いので注意が必要です。

少し本テーマと脱線しますが、実際にどのようなエラーがでるのか確認してみます。

salesforceでのアプリケーションに対して、intuneに準拠したデバイスしかアクセスさせないように設定してみました。

intuneに登録されているiphoneからsalesforceアプリを利用してアクセスしてみると以下エラーが出ました。ブラウザからアクセスしてって言ってますね。デバイス証明書を渡す仕組みがないため、intune準拠と判定されず、エラーが返されています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/924475/86620d99-2088-87b9-928c-02aff03fc0bf.png)

ブラウザアクセスと言っても、毎回ユーザーに　携帯からブラウザ開いて、URL入力してね！
は現実的ではないですね。AzureADではモバイル専用アプリがないアプリケーション用に、WEBリンクを組み込むアプリを作成できます。これで何とかなるか確認してみます。

Microsoft endpoint Managerを開き、アプリ画面から[+追加] をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/924475/73095c07-c421-07d4-d8e7-9d1d74b47972.png)
アプリケーションの選択画面で[webリンク] をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/924475/4553b046-70d3-9d2f-1413-0890a3eb3912.png)
WEBリンクを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/924475/f6f62d6f-99fe-b776-1d73-97b84a9239f3.png)
アプリの追加画面で好きなURLを入力できます。
今回は個人のsalesforce　テナントURLを入力しました。
対象ユーザーorデバイスを指定して完了を押せば、intune準拠されている端末に自動にインストールされます。実際に見てみます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/924475/61c3371e-00ac-70d7-2c95-49239e9741d7.png)

左がアプリストアから落としたsalesforceアプリ　右がwebリンクを組み込んだアプリです
自動でインストールされました。ロゴは自由に設定できますが、今回は設定していません。
実際アクセスできるか試してみます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/924475/9cf5c48f-e1a3-2adb-35e4-63ca0012b828.png)
webリンク組み込みアプリはsafariやedge等のブラウザを利用するので、無事条件付きアクセスも突破できました。ただUIがモバイル用じゃないから使いにくい(笑）URLを省略できるくらいしかメリットないなぁ。。。。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/924475/c6bebc41-1c31-bdf5-7109-8a32c374316e.png)







##まとめ

AzureADの条件付きアクセスをうまく利用すれば、セキュリティ面での担保ができ、安全なアクセス環境が構築できます。
私自身こういった表があると嬉しいなって思い、完全自己満足で作成いたしました。(笑）
どなたかのお役に立てば幸いです。