Intune Suite EPM 昇格リクエストを通知させる

# 概要
Intune Suite アドオン機能 "[エンドポイント 特権管理](https://learn.microsoft.com/ja-jp/mem/intune/protect/epm-overview)" を使用するとデスクトップ全体ではなく特定のファイルを実行するためだけの一時的な特権を "標準ユーザー" に与えることができます。その運用の仕方はいくつか方法がありますが、ユーザーが特権を要求しそのリクエストを管理者が承認することで権限が付与される簡易なワークフローを構成することもできます。しかしながら、そのリクエストが来ていることは（現状では）管理者が Microsoft Intune 管理センターの該当ページを能動的に確認する必要があり、運用の即時性を考えるとちょっともの足りません。

<details><summary>Abstraction</summary>
The Intune Suite add-on feature Endpoint Privilege Management allows you to grant temporary privileges to "standard users" only to run specific files instead of the entire desktop. There are several ways to do this, but you can also configure a simple workflow where a user requests privileges and an administrator approves the request to grant privileges. However, the fact that the request is coming in requires the administrator to actively check the relevant page in the Microsoft Intune admin center (currently), which is a bit inadequate for the immediacy of operations.

</details>

img EPM001
![EPM001.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/885580/322eea4f-f039-8af2-6cf9-63b7ba418cca.png)


Intune はその内部データを Graph API を介して操作することができるので、これを活用することで機能を補完できそうです。やってみましょう。

:::note info
Disclaimer
Graph API による操作を解説するためだけのサンプルになり、実運用上のあれやこれやは考慮していませんので、その点は読者皆様でご対応ください。
:::

# 構成概要

Azure Logic Apps フローを使い
Graph API beta を介して、
EPM 昇格リクエスト を取得し、
Teams チャネルに投稿

# Graph API

まずは、[Graph Explorer](https://developer.microsoft.com/en-us/graph/graph-explorer) を使ってどのようにオブジェクトを取得できるのかを試してみましょう。

`GET /deviceManagement/elevationRequests`
[API リファレンス](https://learn.microsoft.com/ja-jp/graph/api/resources/intune-epmgraphapiservice-privilegemanagementelevationrequest?view=graph-rest-beta)

img EPM002
![EPM002.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/885580/5e22174e-bdba-386c-ccfe-7eba50f4cec5.png)

事前に行っておいた EPM 昇格リクエストが `[Response Preview]` に表示されました。

:::note info
使用する API はベータ バージョンなので URI フィールドの一つ前のドロップダウンで `beta` を選択する必要があります。
:::

:::note info
アクセス許可として `DeviceManagementConfiguration.Read.All` を与えるのを忘れずに
:::

# Entra ID アプリケーション

## アプリケーションの作成
Graph API を利用するためにはアクセス先のテナントで認証されてアクセストークンを取得する必要があります。今回は特定のユーザーのアカウントに依存させないために、アプリケーション専用アクセスを用います。その解説はここでは省略しますので詳細には [Microsoft Learn](https://learn.microsoft.com/ja-jp/entra/identity-platform/app-only-access-primer) を参照ください。

また、認証方法としてはクライアント シークレットをここでは使用します。詳細な構成手順はこちらの [Microsoft Learn](https://learn.microsoft.com/ja-jp/azure/azure-web-pubsub/howto-authorize-from-application) を参照ください。

Microsoft Entra 管理センター > アプリケーション > アプリの登録
新規登録

img EPM003
![EPM003.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/885580/94cb9ae6-d8cb-1527-2bfe-0ac870945c91.png)


作成が完了したら、表示されている `ディレクトリ (テナント) ID` と `アプリケーション (クライアント) ID` を控えておきます。

## アクセス許可の構成

1. 管理 > API のアクセス許可
2. `[+ アクセス許可の追加]`
3. Microsoft Graph を選択
4. `[アプリケーションの許可]` を選択
5. `DeviceManagementConfiguration.Read.All` を選択
   img EPM004
   ![EPM004.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/885580/dfaa0c89-e096-9661-7097-150ea4838d60.png)
6. `[<テナント名> に管理者の同意を与えます]` を選択
   img EPM005
   ![EPM005.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/885580/1321dfa5-839b-1f05-25c0-9ce78e9ec44e.png)


## クライアント シークレットの作成

1. 管理 > 証明書とシークレット を選択
2. `クライアント シークレット` を選択
3. `[+ 新しいクライアント シークレット]` を選択
4. `説明` と `有効期限` を指定し `[追加]` を選択
5. 表示されたクライアント シークレットを控える

img EPM006
![EPM006.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/885580/91b45ef7-9eef-9711-a7dc-03192176abf7.png)


:::note warn
クライアント シークレットは表示され後にそのページから移動してしまうと、再度その値を確認することができなくなります。そのため、値を控えていなかった場合は再作成となります。
:::

# ロジック アプリの作成

これで Azure Logic App から Graph API を呼び出す下準備ができたので、フローを作成しましょう。

Azure Portal の検索フィールドを使ってロジック アプリを探します。

img EPM007
![EPM007.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/885580/432bbad2-d7f1-4eb1-add3-3601dd6bc8df.png)

1. `[+ 追加]` を選択
2. `[従量課金]` を選択 ※
3. アプリ名称、リージョンなど必須項目を入力しウィザードを進めて
4. `[確認および作成]`

:::note info
※ 本記事ではひとまず [従量課金] を選択しているので、本番環境ではよしなに選択ください。
:::

## フロー定義

アプリの作成が完了するとその概要ページから `[編集]` を選択することでフローの編集を開始できます。フロー作成の詳細はこちらの [Microsoft Learn](https://learn.microsoft.com/ja-jp/azure/logic-apps/tutorial-build-schedule-recurring-logic-app-workflow) を参照ください。

真っ白なキャンバスの真ん中に `[トリガーの追加]` とあるのでそれをクリックしてフロー定義を始めます。

img EPM008
![EPM008.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/885580/829786cf-892a-a051-6bd0-ddca306330b1.png)

1. Recurrence トリガーを挿入
2. HTTP アクションを挿入
3. Parse JSON アクションを挿入
4. Teams チャットまたはチャネルでメッセージを投稿する を挿入

`[Recurrence]` トリガーはそのパラメータで繰り返し実行するリズムを構成できます。その詳細は [Microsoft Learn](https://learn.microsoft.com/ja-jp/azure/connectors/connectors-native-recurrence?tabs=consumption) を参照ください。

## HTTP アクションの設定

HTTP アクションをクリックして情報画面を表示させ、`[URI]` と `[Method]` を指定します。

img EPM009
![EPM009.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/885580/7458a31c-156c-4217-8666-be52da3382e6.png)

URI `https://graph.microsoft.com/beta/deviceManagement/elevationRequests`

Method `GET`

詳細パラメーター ドロップダウンリストから `[Authentication]` にチェックをつけ、`[全てを表示]` をクリック

img EPM010
![EPM010.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/885580/840f009e-b9aa-b65d-da31-f39713c6183e.png)

`[Authentication Type]` に `Active Directory OAuth` を選択

パラメーターとして控えておいた、テナント ID、クライアント ID、シークレットをそれぞれ入力します。

img EPM011
![EPM011.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/885580/f5303477-2d7c-31d3-0413-bf769004dad7.png)

これで `URI` に指定した API への操作（`Method`）の結果は、HTTP リクエストの応答（Response の Body）として得られます。

キャンバス上の Parse JSON アクションをクリックして次の構成に移ります。

## Parse JSON アクションの設定

`[Content]` フィールドにカーソルを合わせると表示される稲妻アイコンを選択し`HTTP body`を選択します。これで前のステップ HTTP アクションの結果として得られた JSON ドキュメントを参照することができるようになります。

img EPM012
![EPM012.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/885580/0623967a-5e41-ad88-0f5d-9bc00808d230.png)

`Schema` フィールドには応答で得られる JSON の構文を指定するのですが、これを手作業で指定するのは大変面倒なので、サンプルの応答から構文を解析させます。

再び `Graph Explorer` にアクセスして、API リクエストを実行してその応答をコピーし、`[サンプルのペイロードを使用してスキーマを生成する]` を選択して表示されたテキストボックスに貼り付けます。

img EPM013
![EPM013.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/885580/1eae49dd-a2d6-1313-e654-7b2131f2610a.png)

貼り付けられたら `[完了]` を選択します。すると貼り付けた内容が解析されてこのようにスキーマが展開されます。

img EPM014
![EPM014.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/885580/ff19f289-9377-b3c1-02d0-89ce0a02aa9f.png)

キャンバス上の Teams アクションをクリックして次の構成に移ります。

## Teams アクションの構成

Teams コネクタの詳細はこちらの [Microsoft Learn](https://learn.microsoft.com/ja-jp/connectors/teams/) を参照ください。

- 投稿者： `[ユーザー]`
- 投稿先： `[チャネル]`
- チーム： `<投稿先のチームをドロップダウンから選択>`
- メッセージ： `<メッセージの本文を記述>`

メッセージ フィールドにカーソルを合わせるとメニュー アイコンが表示されるので稲妻アイコンを選択すると前のステップで解析された JSON ドキュメントを参照することができます。

ここでは次の属性を使用しました。
- ユーザー： `[requestedByUserPrincipalName]`
- アプリ： `[fileName]`
- 申請理由： `[requestJustification]`

文字列 `リクエストを確認する` は、Microsoft Intune 管理センターの "エンドポイント特権管理" 画面へのハイパーリンクとしました。

img EPM015
![EPM015.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/885580/7b2d0501-1047-093e-6981-120bb7de79aa.png)


構成ができたらフローを保存し画面右上の `[×]` をクリックし画面を閉じて、検証に移りましょう。

# フローの実行

フローの概要画面で画面右側に横並びになっているメニューに `[有効]` と表示されていたらそれを選択し、フローを実行可能な状態にします。選択後は `[無効]` と表示され選択するとフローが無効化され、その実行が停止されます。（有効なまま放置すると繰り返し実行され課金されていくので検証後は無効化しましょう）

img EPM016
![EPM016.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/885580/55e51cd3-fc8c-f3e2-385d-822f581dbb6a.png)


フローをすぐに実行したければ、その並びにある `[実行]` メニューを選択します。

実行結果は 開発ツール > 実行履歴 から確認できます。結果が成功 (Succeeded) となっていたら、投稿先に指定した Teams チャネルを確認してみましょう。

img EPM017
![EPM017.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/885580/a35af6d7-8715-00d2-af5d-0fa77c283602.png)


Microsoft Intune 管理センターで確認できるリクエストが、Teams に投稿されています。これで定期的に管理センターを確認しにいかなくても、チャネル投稿の通知にリアクティブ対応すれば良くなりました。

# 最後に
Logic App は他にも多彩なアクションがあるので、皆さんで色々と工夫をしてみてください。また、同様な方法で Graph API を参照するアクションを構成できるので、運用の自動化に活用してみてください。参考になっていれば幸いです。

## 参考記事
https://qiita.com/hieki/items/bb57170724a07b992c23

-- End of File --