【Intuneカスタムコンプライアンス】特定の更新プログラムを基準に条件付きアクセスでアクセス制御

皆さんこんにちは。国井です。
このブログはEnterprise Mobility + Security(EMS) Advent Calendar 2021の9日目に参加しています。

今日のお題はこちら

特定の更新プログラムがインストールされていれば条件付きアクセスでアクセスを許可する

です。
では早速見ていきましょう。

前提条件

条件付きアクセスを利用するのでAzure AD Premium P1が必要です。
それと更新プログラムがインストールされているかのチェックにはMicrosoft Intuneを使います。

おおまかな作業ステップ

更新プログラムのインストール状況を調査するためPowerShellコマンドレットを各クライアントコンピューターで実行します。
そして、その結果に基づいてIntuneのコンプライアンスポリシーで準拠・非準拠の判定を行い、準拠しているデバイス(つまり更新プログラムがインストールされているデバイス)であれば条件付きアクセスでアクセスを許可、そうでなければブロック、という設定を作っていきます。

【Step1】PowerShellスクリプトの作成

最初にPowerShellスクリプトを作ります。
Get-Hotfixというコマンドレットを実行して更新プログラムがインストール状況を確認し、特定の更新プログラムがインストールされているかチェックしていきます。
ここではこんな感じのスクリプトを作ってみました。

$patch = “KB4593175”
$ep = (Get-HotFix).HotFixID | where {$_ -eq $patch}
if ($ep -eq $patch){$hash = @{ Patch = $true}} else {$hash = @{ Patch = $false}}
return $hash | ConvertTo-Json -Compress

スクリプトの解説を簡単にしておくと、
1行目でチェック対象の更新プログラムのKB番号(HotfixID)を設定します。
そして2行目以降では、このスクリプトを実行するデバイスで特定の更新プログラムがインストールされているかをチェックし、インストールされていれば、Patch属性にTrueという値をセットするというものです。
なかなか見にくいスクリプトですが、これには理由があってIntuneのコンプライアンスポリシーでPowerShellスクリプトを実行する場合、私の調べた限りでは以下の縛りがあるようです。

・最後の行はreturn $hash | ConvertTo-Json -Compressと書いて終わらなければならない
・空白行はNG
・コメントアウトはNG

試しにKB4593175に対応する更新プログラムがインストールされていることを自分のコンピューターで実行してチェックしてみます。

image

更新プログラムがインストールされているデバイスであれば、最後に{“Patch”:true}というJSON形式の値を返してくれます。

【Step2】PowerShellスクリプトのIntuneへの登録

Step1で作成したスクリプトをIntuneに登録します。最終的にこのスクリプトはIntuneのコンプライアンスポリシーで利用するので、
Microsoft Endpoint Manager admin centerの デバイス > コンプライアンスポリシー > スクリプト から登録します。

image

スクリプト自体はこんな感じで登録してあります。

image

【Step3】JSONファイルの作成

コンプライアンスポリシーを作成する前にもうひとつやることがあります。
コンプライアンスポリシーではPowerShellスクリプトの実行結果のうち、どのような結果だったら準拠とするのか?という基準を指定しなければなりません。それをJSONファイルで事前に作成しておくのです。
JSONファイルはマイクロソフトのdocsサイトにサンプルがあるのでここから流用します。

私が作ったサンプルはこちらです。

{
“Rules”:[
{
“SettingName”:”Patch”,
“Operator”:”IsEquals”,
“DataType”:”Boolean”,
“Operand”:true,
“MoreInfoUrl”:https://bing.com,
“RemediationStrings”:[
{
“Language”: “en_US”,
“Title”: “Required patch must be installed.”,
“Description”: “Required patch must be installed. Please refer to the link above”
}
]
}
]
}

改行が崩れてだいぶ汚いのですが、大事なポイントは

“SettingName”:”Patch”,
“Operator”:”IsEquals”,
“DataType”:”Boolean”,
“Operand”:true,

の4行です。このように書いておけばPowerShellスクリプトの実行結果である{“Patch”:true}の文字列は準拠と判定してくれます。

【Step4】コンプライアンスポリシーの作成

JSONファイルができたらコンプライアンスポリシーを作りましょう。
Microsoft Endpoint Manager admin centerの デバイス > コンプライアンスポリシー > ポリシーからWindows 10以降用のポリシーを新規作成し、登録します。
カスタムコンプライアンスの項目から

image

[検出スクリプトを選択する]項目から前の手順で作成したPowerShellスクリプトを選択し、
[カスタムコンプライアンス設定で JSON ファイルをアップロードし検証する] 項目からStep3で作成したJSONファイルを登録します。

キャプチャ

登録できたらウィザードを終わらせて、そのまま保存しましょう。
これで放っておけばコンプライアンスポリシーが適用され、各クライアントデバイスでPowerShellスクリプトが実行されます。
実行結果はコンプライアンスポリシーのプロパティで確認できます。

image
準拠・非準拠の結果は [デバイスの状態] から確認してください。
(ちなみにこの結果が確認できるまでに半日近くかかったんですよね.. もうちょっと何とかならないですかね..)

image

Step5 条件付きアクセスポリシーの作成

ここから先はもうおなじみの設定だと思います。
Azure AD管理センターから セキュリティ > 条件付きアクセス の順にアクセスし、ポリシーの作成でコンプライアンスポリシーが準拠だったらアクセスを許可するというポリシーを作成します。

image

以上です。お疲れ様でした!
これで特定の更新プログラムがインストールされているデバイスであればOffice365にアクセスできるようになります。

■参考URL
カスタム コンプライアンス設定の検出に使用する PowerShell スクリプトを作成Microsoft Intune | Microsoft Docs