条件付きアクセスで[デバイスのフィルター]を使う (2)

皆さんこんにちは。国井です。
Enterprise Mobility + Security(EMS) Advent Calendar 2021 の2日目として参加させていただいています。

今回は以前に紹介した「条件付きアクセスで[デバイスのフィルター]を使う」の続編です。
(前回から時間があいてしまってごめんなさい!)

前回、条件付きアクセスでデバイスのフィルターを使うとAzure ADへのデバイス登録だったり、OSバージョンだったり、様々なデバイス属性をもとにアクセス制御ができるという話をしました。そのときにデバイスのextensionAttribute属性を使えば、お好きな属性をセットしてアクセス制御に使えるけど、どうやって設定するのか?ってところで苦しんでいると話を同時にしました。

ちなみに私はいまextensionAttributeにどうやって値を入れるのかというところで苦しんでいるところなので、実装できた方いらしたら共有していただけると嬉しいです!

最後にこんな書き込みをしたら、色々と情報をいただきました(ありがとうございます!)
ということで、今回はいただいた情報をまとめながら実装方法を紹介します。

やりたいこと

前提条件を確認しておきますが、今回やりたいことはデバイスのextensionAttribute属性にBYODという値をセットし、BYODという値を持つデバイスからのアクセスがあったらアクセスをブロックするという条件付きアクセスポリシーを作ってみます。

extensionAttribute属性へのアクセス方法

extensionAttribute属性の設定はAzure ADのPowerShellコマンドレットでサクっとできるのかなと思ったら世の中そんなに甘くないことがわかりました。
ということで現時点ではMicrosoft Graph経由で設定する必要があります。
仕様は以下のサイトから確認できます。

Microsoft Graphからデバイスオブジェクトの属性を変更する場合、Directory.ReadWrite.AllとDirectory.AccessAsUser.All(いずれも委任の場合)の2つのAPIアクセス許可が必要になります。
これを踏まえて、次のステップに進みましょう。

Graph Explorerで試す

まずは手始めにGraph Explorerを使ってサイトの中で言っていることが本当なのか試してみましょう。
Graph Explorerサイトからご自身のAzure ADのアカウントでサインインし、[アクセス許可を選択する]を選択してDirectory.ReadWrite.AllとDirectory.AccessAsUser.Allの2つのアクセス許可を割り当てます。

image

設定できたらextensionAttribute属性の設定を行うのですが、その前に設定変更したいデバイスのIDをしらべておきます。
調べるときはURIとして https://graph.microsoft.com/beta/devices?select=displayname,id と入力して [クエリの実行] をクリックすれば
画面下部に結果が確認できます。

image

デバイスのIDが確認できたら続いてデバイスのextensionAttribute値を確認します。
URIとしてhttps://graph.microsoft.com/beta/devices/ID (ID部分には前に調べた値が入る)と入力して [クエリの実行] をクリックします。
するとextensionAttribute1-15の値が確認できます。

image

では、いよいよextensionAttributeを設定しましょう。ここではextensionAttribute1属性にBYODという値を入れます。URIはそのままにして、GETからPATCHへの変更と、要求本文に以下の文字列を入れて

{
“extensionAttributes”: {
“extensionAttribute1”: “BYOD”
}
}

実行します。

image

実行後、改めてextensionAttribute属性を確認すると、extensionAttribute1属性にBYODと入っていることがわかります。

image

PowerShellから属性を設定する ~ 準備

ここまで見ていただいた内容を今度はPowerShellから実行してみましょう。
まず始めに[アプリの登録]をAzure AD管理センターから作成します。[アプリの登録]から今回は[DeviceExtension]という名前のアプリを作成し、

image

生成されるクライアントID、テナントIDを控えておきます。

image

さらに[認証]項目からリダイレクトURIを控えておきます。

image

[APIのアクセス許可]項目に進み、[アクセス許可の追加]をクリックして、Microsoft GraphのAPIアクセス許可であるDirectory.ReadWrite.AllとDirectory.AccessAsUser.Allを追加します。
(委任されたアクセス許可から追加してください)
追加できたら[管理者の同意を与えます]をクリックして同意の設定を行うこともお忘れなく。

image

PowerShellからextensionAttribute属性を設定する

続いてPowerShellからextensionAttribute属性を設定してみましょう。今度はextensionAttribute2属性にBYODという値を入れていきます。
ここではMSAL.PSというモジュールを使っていきますので、まだ入れていない方はインストールしておきましょう。

Install-Module -Name MSAL.PS –AcceptLicense

次にアプリの登録で設定した値を変数にセットします。

$ClientId = "クライアントID"
$RedirectUri = "https://login.microsoftonline.com/common/oauth2/nativeclient"
$TenantId = "テナントID"

これらの変数をもとにトークンを取りに行きます。

$authResult = Get-MsalToken -ClientId $ClientId -RedirectUri $RedirectUri `
-TenantId $TenantId –Interactive
$Token = $authResult.Accesstoken

トークンを取得できたら、トークンを使ってextensionAttribute属性を設定します。

$apiUrl=https://graph.microsoft.com/beta/devices/e8de6f3e-a509-4d1c-b4a8-ca283148e15a/extensionAttributes

$body = '{
"extensionAttributes": {
"extensionAttribute2": "BYOD"
}
}'

Invoke-RestMethod -Headers @{Authorization = "Bearer $token"; "Content-type" ` ="application/json"} -Uri $apiUrl -Method patch -Body $body

これでできあがり。
前に登場したGraph Explorerで確認してみましょう。

image

おお!extensionAttribute2属性もBYODという文字列が入りました。

条件付きアクセスでアクセス制御する

最後にextensionAttribute1属性にBYODという文字列が入っているデバイスからのアクセスがブロックされるか見てみましょう。
設定はこちら。

image

設定の後でアクセスしたら、ご覧のとおりにアクセスがブロックされましたー

image

デバイスに様々な属性を渡してあげて、その値に基づいて条件付きアクセスで制御する。
リモートワークでデバイス単位でのアクセス制御が求められる時代でもありますし、これを使いこなせれば運用管理の幅が広がりそうですね。