2️⃣

Purview インサイダーリスク管理(IRM)~HRコネクタ編~

2023/05/13に公開

はじめに

Microsoft Purviewのインサイダーリスク管理(以下、IRM)を検証してみたTipsを 全般設定編」・「HRコネクタ編(本記事)」「ポリシー作成・確認」 の3本でまとめてみます。

設定自体は複雑ではないですが、立ち上げに向けた社内調整と運用初期のアラート誤検知のパラメーター微調整が大変だという印象です。

データコネクタ

Microsoft 365以外のサードパーティのデータ(slackやTwitterなど)をインポートしてPurviewのソリューションで利用できるようにする機能です。

インポートしたデータはMicrosoftクラウドやMicrosoft 365のユーザーのメールボックスに蓄積します。(コネクタの種類によって)

どこからインポートするかはサービスによってまちまちで、例えばslackでは17a-4 DataParserというサービスが実際にslackからデータを収集し、その収集したデータをPurviewのデータコネクタがインポートして各ユーザーのメールボックスに割り振ります。(参考)


Microsoft Learnより引用

使用するインポートサービスによってはライセンス料が必要なので注意が必要です。
IRMで利用する退職者用のコネクタ(HRコネクタ)はMicrosoftが提供しているので外部との契約は不要です。

HRコネクタ

ユーザーの退職日をIRMのポリシーのトリガーとして利用する場合は事前に作成する必要があります。
退職日を記載したCSVファイルを右記URL(https://webhook.ingestion.office.com/api/signals)にPOSTすることでMicrosoftのクラウドに取り込まれ、IRMで利用できるようになります。

IRMではポリシーテンプレートの「離職するユーザーによるデータの盗難」というものがあり、トリガー(どんな事象が発生したときにユーザーアクティビティの分析を始めるか)として 「人事データコネクトイベント」「ユーザーアカウントがAzure ADから削除されました」 を利用できます。


両方 or どちらかを選択可能

人事データを取得できる場合は利用したほうがいいかなと思います。
Azure ADからユーザーを削除するのは最後の最後になるので調査の初動が遅れるからです。

人事データをIT部門が見てはいけないといった場合でも、IRMのポリシーではユーザーをマスキングし、IT部門にアクセス権がないSharePoint上のフォルダにCSVファイルをアップロードしていくといった運用でこの問題は解決できるかなと思います。
※Sentinelにログを送信している場合はマスキングが外れるのでお気をつけください

事前準備

  • アクセス権:Data Connector管理ロール
  • 退職日CSVファイル:下記列(検証ではUTF-8で作成)
csv
EmailAddress,ResignationDate,LastWorkingDate
sarad@contoso.com,2023-04-23,2023-06-30
pilarp@contoso.com,2023-04-24,2023-12-31
項目 概要 形式
EmailAddress ユーザーのメールアドレス sarad@contoso.com
ResignationDate 退職日を通知した日や退職届受付日とか。 ISO 8601の日付と時刻の形式
LastWorkingDate 退職日 ISO 8601の日付と時刻の形式

HRコネクタ設定

手順はMicrosoft Learnに公開されています。
https://learn.microsoft.com/ja-jp/microsoft-365/compliance/import-hr-data?view=o365-worldwide#step-1-prepare-a-csv-file-with-your-hr-data

Azure ADでアプリを登録

Azure AD > アプリの登録でHRコネクタ用のアプリを作成し、「クライアントID」・「クライアントシークレット」・「テナントID」の値を取得します。
※リダイレクトURLやアクセス許可は不要です

参考:Azure Active Directory への登録 | IBM Spectrum Protect Plus

HRコネクタ作成

  1. Purview > データコネクタ > 自分のコネクタ > コネクタを追加 > HRを選択
  2. サービス使用条件に同意
  3. 作成したAzure ADのアプリのアプリID(クライアントID)・コネクタの名前を入力
  4. 今回のシナリオは退職日なので「Employee resignation」にチェック
  5. インポートするファイルの形式をcsvにし、サンプルのデータを入力したcsvファイルをアップロード
  6. CSVの列名とシナリオをマッピング
  7. 完了
  8. 作成したコネクタをクリックし、ソースとの接続状態:「接続済み」になっていることを確認し、「コネクタジョブID」の値を取得

以上でHRコネクタの作成は完了です。

テスト(スクリプト)

PSファイルをこちらのGitHubで取得し、PowerShellで下記コマンドを実行することでCSVデータを手動でアップロードすることができます。

.\HRConnector.ps1 -tenantId <tenantId> -appId <appId>  -appSecret <appSecret>  -jobId <jobId>  -filePath '<filePath>'
パラメーター
tenantId Azure ADのテナントID
appId 作成したAzure ADアプリのクライアントID(アプリID)
appSecret 作成したAzure ADアプリのクライアントシークレット
jobId HRコネクタのジョブID
filePath CSVファイルのパス

ログの取得

スクリプトが成功するとHRコネクトでtxtファイルのログを取得できます。
ポータル上で取得できるのは7日分っぽいです。(公開情報に記載は見当たりませんでした)


更新データがない場合

データインポートの自動化(任意)

CSVファイルを毎回アップロードするのは面倒なので、タスクスケジューラーで自動化する方法Power AutomateでOneDriveにCSVファイルがアップロードされたときに動くフローがMicrosoft Learnに公開されています。
Power AutomateはHTTPリクエストを利用するのでプレミアムライセンスが必要ですが、運用を考えるとこちらの方が良い気がします。

Github上のImportHRDataforIRM.zipパッケージを取得し、Power Automateにインポートします。

テナントIDなど必要な値を入力、URlをhttps://webhook.ingestion.office.com/api/signals に変更、ユーザー認証、およびOne Driveのフォルダを選択してフローの準備が完了です。(詳細はMicrosoft Learnに記載されています。)

おわりに

次回実際にIRMポリシーの動きを見てみます。(量多すぎていつになるのやら)

Discussion