Azure Identity Protectionのログ収集


# はじめに
[Identity Protection](https://www.microsoft.com/ja-jp/security/business/SIEM-and-XDR/microsoft-defender-for-identity)に対してAPIアクセスしてログを取得するために必要なAPI設定を以下の手順を記述します。


利用できるAPIは、以下の通り。 Azureユーザアカウントがリスクにさらされた時にログが生成される。
1~3は、ログ収集GETコマンド。Microsoftサポートによると4は、侵害されたユーザーを確認する。5危険なユーザーを無視するというPOSTコマンドで要求が成功した場合は、"204 No Content" として応答されるだけとのこと。

今回は1~3について記載します。
1. https://graph.microsoft.com/v1.0/identityProtection/riskDetections
2. https://graph.microsoft.com/v1.0/identityProtection/riskyUsers/{riskyUserId}/history
3. https://graph.microsoft.com/v1.0/identityProtection/riskyUsers
4. https://graph.microsoft.com/v1.0/identityProtection/riskyUsers/confirmCompromised
5. https://graph.microsoft.com/v1.0/identityProtection/riskyUsers/dismiss

また、Identity Protectionで取得できる情報には、サービス プリンシパルの場合は “servicePrincipalRiskDetection" と "riskyServicePrincipals" もあります。https://learn.microsoft.com/ja-jp/graph/api/resources/identityprotection-overview?view=graph-rest-1.0#for-service-principals

マイクロソフトによると2023/3月時点では、syslog等で外部出力する方法はないとのことです。

# Graph API準備
Azure Active Directoryを開きアプリケーション->アプリの登録をクリックします。

![1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3307206/24bcfb88-5830-27da-7fc9-39dda2012e57.png)

新規作成を押し、任意の名前を入力して登録します。
![２.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3307206/d7f63ecf-c917-5ca7-914a-3f5c5c633065.png)

左のメニューから証明書とシークレットをクリックします。
注意：有効期限は最大の24か月。このタイミングでAPIトークンを作成するためのクレデンシャルが無効になります。
追加します。

![3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3307206/b7ddbb5d-654a-3ade-2b14-c167f8598c50.png)

シークレットの値をコピーして自身のノートパット等に記録しておきます。あとで利用します。

![4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3307206/6143260e-1f4b-6b8b-d0d0-814f7b982682.png)

APIアクセス許可をクリックして画面のように４つの権限を与えます。
アクセス許可の追加->Microsoft Graph->アプリケーションの許可とクリックして対象の権限を選択します。

![5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3307206/8cb72e63-eb1b-c47b-7f0d-0ad75b50c6bf.png)


ｘｘｘに管理者の同意を与えますを押します。状態がｘｘに付与されましたになることを確認します。

![6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3307206/c498d4c5-8269-027b-eeb7-5f16b52f962d.png)

アプリケーション（クライアント）ID、ディレクトリ（テナント）IDをコピーしてノートパット等に貼り付けます。

![7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3307206/1f49a39e-c0aa-ce7f-89f9-ca59261496e8.png)

# API　実行
### Token取得API　Request
```
curl --location --request POST 'https://login.microsoftonline.com/{上記で取得したディレクトリ（テナント）ID値}/oauth2/v2.0/token' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode 'grant_type=client_credentials' \
--data-urlencode 'client_secret={上記で取得した値}' \
--data-urlencode 'client_id={上記で取得した値}' \
--data-urlencode 'scope=https://graph.microsoft.com/.default'
```
### Token 取得 Response
access_token部分をコピーして後続のRequestコマンドで利用します。
```
{
    "token_type": "Bearer",
    "expires_in": 3599,
    "ext_expires_in": 3599,
    "access_token": "{Tokenが表示される}"
}
```
### APIによるデータ取得(riskDetections)
Authorization: Bearer 以下に上記で取得したtokenを設定します。
```
curl --location --request GET 'https://graph.microsoft.com/v1.0/identityProtection/riskDetections' \
--header 'accept: application/json' \
--header 'Authorization: Bearer {Token}'
```
### riskDetections Response
Torブラウザを利用してAzureログインしたらこのようなログが生成されました
```
"{
    ""@odata.context"": ""https://graph.microsoft.com/v1.0/$metadata#identityProtection/riskDetections"",
    ""value"": [
        {
            ""id"": ""34952612d88c80936f3dfc64b9e2573e1a887dcbd9e7fa44395076dddb72e312"",
            ""requestId"": ""be63b488-0121-42f7-96d7-240a56da7600"",
            ""correlationId"": ""eb2af637-c2ed-4529-9681-0aea1e7f62c8"",
            ""riskEventType"": ""anonymizedIPAddress"",
            ""riskState"": ""atRisk"",
            ""riskLevel"": ""medium"",
            ""riskDetail"": ""none"",
            ""source"": ""IdentityProtection"",
            ""detectionTimingType"": ""realtime"",
            ""activity"": ""signin"",
            ""tokenIssuerType"": ""AzureAD"",
            ""ipAddress"": ""185.220.101.175"",
            ""activityDateTime"": ""2023-03-01T06:46:00.1181587Z"",
            ""detectedDateTime"": ""2023-03-01T06:46:00.1181587Z"",
            ""lastUpdatedDateTime"": ""2023-03-01T06:48:19.1017986Z"",
            ""userId"": ""b9fd1244-50e1-4221-835d-f53111b29ac8"",
            ""userDisplayName"": ""test"",
            ""userPrincipalName"": ""test0301@test02131.onmicrosoft.com"",
            ""additionalInfo"": ""[{\""Key\"":\""userAgent\"",\""Value\"":\""Mozilla/5.0 (Windows NT 10.0; rv:102.0) Gecko/20100101 Firefox/102.0\""}]"",
            ""location"": {
                ""city"": ""Schoenwalde-Glien"",
                ""state"": ""Brandenburg"",
                ""countryOrRegion"": ""DE"",
                ""geoCoordinates"": {
                    ""latitude"": 52.61983,
                    ""longitude"": 13.12743
                }
            }
        },
        {
            ""id"": ""c356cfc985b2b2c4c1c7e24675595cc1149cef760d3655f651c9eabb556f5ffc"",
            ""requestId"": ""baa66880-8bb7-4354-803b-d12224a96f00"",
            ""correlationId"": ""eb2af637-c2ed-4529-9681-0aea1e7f62c8"",
            ""riskEventType"": ""anonymizedIPAddress"",
            ""riskState"": ""atRisk"",
            ""riskLevel"": ""medium"",
            ""riskDetail"": ""none"",
            ""source"": ""IdentityProtection"",
            ""detectionTimingType"": ""realtime"",
            ""activity"": ""signin"",
            ""tokenIssuerType"": ""AzureAD"",
            ""ipAddress"": ""185.220.101.175"",
            ""activityDateTime"": ""2023-03-01T06:48:39.9072409Z"",
            ""detectedDateTime"": ""2023-03-01T06:48:39.9072409Z"",
            ""lastUpdatedDateTime"": ""2023-03-01T06:49:41.410552Z"",
            ""userId"": ""b9fd1244-50e1-4221-835d-f53111b29ac8"",
            ""userDisplayName"": ""test"",
            ""userPrincipalName"": ""test0301@test02131.onmicrosoft.com"",
            ""additionalInfo"": ""[{\""Key\"":\""userAgent\"",\""Value\"":\""Mozilla/5.0 (Windows NT 10.0; rv:102.0) Gecko/20100101 Firefox/102.0\""}]"",
            ""location"": {
                ""city"": ""Schoenwalde-Glien"",
                ""state"": ""Brandenburg"",
                ""countryOrRegion"": ""DE"",
                ""geoCoordinates"": {
                    ""latitude"": 52.61983,
                    ""longitude"": 13.12743
                }
            }
        }
    ]
}"
```
### 

### APIによるデータ取得(riskUsers)

```
"curl --location 'https://graph.microsoft.com/v1.0/identityProtection/riskyUsers' \
--header 'accept: application/json' \
--header 'Authorization: Bearer {Token}''"
```

### riskUsers Response
Torブラウザを利用してAzureログインしたらこのようなログが生成されました
```
"{
    ""@odata.context"": ""https://graph.microsoft.com/v1.0/$metadata#identityProtection/riskyUsers"",
    ""value"": [
        {
            ""id"": ""b9fd1244-50e1-4221-835d-f53111b29ac8"",
            ""isDeleted"": false,
            ""isProcessing"": false,
            ""riskLevel"": ""medium"",
            ""riskState"": ""atRisk"",
            ""riskDetail"": ""none"",
            ""riskLastUpdatedDateTime"": ""2023-03-01T06:53:19.4682155Z"",
            ""userDisplayName"": ""test"",
            ""userPrincipalName"": ""test0301@test02131.onmicrosoft.com""
        }
    ]
}"
```
### APIによるデータ取得(User history)
```
"curl --location 'https://graph.microsoft.com/v1.0/identityProtection/riskyUsers/b9fd1244-50e1-4221-835d-f53111b29ac8/history' \
--header 'accept: application/json' \
--header 'Authorization: Bearer {Token}'"
```
### riskUsers History Response
Torブラウザを利用してAzureログインしたらこのようなログが生成されました
```
"{
    ""@odata.context"": ""https://graph.microsoft.com/v1.0/$metadata#identityProtection/riskyUsers('b9fd1244-50e1-4221-835d-f53111b29ac8')/history"",
    ""value"": [
        {
            ""id"": ""b9fd1244-50e1-4221-835d-f53111b29ac8"",
            ""isDeleted"": false,
            ""isProcessing"": false,
            ""riskLevel"": ""medium"",
            ""riskState"": ""atRisk"",
            ""riskDetail"": ""none"",
            ""riskLastUpdatedDateTime"": ""2023-03-01T06:53:19.4682155Z"",
            ""userDisplayName"": ""test"",
            ""userPrincipalName"": ""test0301@test02131.onmicrosoft.com"",
            ""userId"": ""b9fd1244-50e1-4221-835d-f53111b29ac8"",
            ""initiatedBy"": null,
            ""activity"": {
                ""riskEventTypes"": [
                    ""anonymizedIPAddress""
                ],
                ""detail"": null
            }
        }
    ]
}"
```

# 参考資料
https://learn.microsoft.com/en-us/graph/api/resources/identityprotection-overview?view=graph-rest-1.0

https://urldefense.proofpoint.com/v2/url?u=https-3A__learn.microsoft.com_en-2Dus_graph_tutorial-2Driskdetection-2Dapi-3Ftabs-3Dhttp&d=DwQGaQ&c=jf_iaSHvJObTbx-siA1ZOg&r=G9-y8sxMSbzKt8tlvH1ZZXaJncNpGgl4rbPGpWVzZu0&m=pls7ml-7UYDwHjrlhAC7of1e-JEcLGfMqsOSljxl0Y6JXZOlQusD3ud1zbMyqVy4&s=ICNypNamZuRdJE_dc7KLgZ6U1MVW09LE0lLAtpYD6bA&e=