MICROSOFT DEFENDER XDR REST API のHello World
適用対象:
- Microsoft Defender XDR
重要
一部の情報は、市販される前に大幅に変更される可能性があるプレリリース製品に関するものです。 Microsoft は、ここに記載された情報に関して、明示または黙示を問わず、いかなる保証も行いません。
単純な PowerShell スクリプトを使用してインシデントを取得する
このプロジェクトを完了するには、5 分から 10 分かかります。 今回の見積もりには、アプリケーションの登録と、PowerShell サンプル スクリプトからのコードの適用が含まれます。
Microsoft Entra IDでアプリを登録する
グローバル管理者 ロールを持つユーザーとして Azure にサインインします。
[Microsoft Entra ID>アプリの登録新しい登録]> に移動します。
登録フォームで、アプリケーションの名前を選択し、[ 登録] を選択します。 リダイレクト URI の選択は省略可能です。 この例を完了するために必要な操作はありません。
アプリケーション ページで、[API アクセス許可][アクセス許可>の追加] の順>に選択し、organizationが使用する API を選択>し、「Microsoft Threat Protection」と入力して、[Microsoft Threat Protection] を選択します。 アプリがMicrosoft Defender XDRにアクセスできるようになりました。
[ 管理者の同意の付与] を選択します。 アクセス許可を追加するたびに、[管理者の同意を 付与 する] を選択して有効にする必要があります。
アプリケーションにシークレットを追加します。 [ 証明書 & シークレット] を選択し、シークレットに説明を追加してから、[ 追加] を選択します。
ヒント
[ 追加] を選択した後、[ 生成されたシークレット値のコピー] を選択します。 脱退後にシークレット値を取得することはできません。
アプリケーション ID とテナント ID を安全な場所に記録します。 これらは、アプリケーション ページの [概要 ] の下に表示されます。
アプリを使用してトークンを取得し、トークンを使用して API にアクセスする
Microsoft Entra トークンの詳細については、Microsoft Entra チュートリアルを参照してください。
重要
このデモ アプリの例では、テスト目的でシークレット値を貼り付けることをお勧めしますが、運用環境で実行されているアプリケーションに シークレットをハードコーディングしないでください 。 サード パーティは、シークレットを使用してリソースにアクセスできます。 Azure Key Vaultを使用して、アプリのシークレットを安全に保つことができます。 アプリを保護する方法の実際の例については、「Azure Key Vaultを使用してサーバー アプリのシークレットを管理する」を参照してください。
以下のスクリプトをコピーし、お気に入りのテキスト エディターに貼り付けます。 Get-Token.ps1として保存します。 PowerShell ISE でそのままコードを実行することもできますが、次のセクションでインシデントフェッチ スクリプトを使用するときにもう一度実行する必要があるため、保存する必要があります。
このスクリプトはトークンを生成 し、名前 の下の作業フォルダーにLatest-token.txt保存します。
# This script gets the app context token and saves it to a file named "Latest-token.txt" under the current directory. # Paste in your tenant ID, client ID and app secret (App key). $tenantId = '' # Paste your directory (tenant) ID here $clientId = '' # Paste your application (client) ID here $appSecret = '' # # Paste your own app secret here to test, then store it in a safe place! $resourceAppIdUri = 'https://api.security.microsoft.com' $oAuthUri = "https://login.windows.net/$tenantId/oauth2/token" $authBody = [Ordered] @{ resource = $resourceAppIdUri client_id = $clientId client_secret = $appSecret grant_type = 'client_credentials' } $authResponse = Invoke-RestMethod -Method Post -Uri $oAuthUri -Body $authBody -ErrorAction Stop $token = $authResponse.access_token Out-File -FilePath "./Latest-token.txt" -InputObject $token return $token
トークンを検証する
受け取ったトークンをコピーして JWT に貼り付けてデコードします。
JWT は JSON Web トークンを表します。 デコードされたトークンには、多数の JSON 形式の項目または要求が含まれます。 デコードされたトークン内の ロール 要求に必要なアクセス許可が含まれていることを確認します。
次の図では、、、および アクセス許可を持つ
Incidents.Read.All
Incidents.ReadWrite.All
アプリから取得されたデコードされたトークンをAdvancedHunting.Read.All
確認できます。
最近のインシデントの一覧を取得する
次のスクリプトでは、 Get-Token.ps1 を使用して API にアクセスします。 次に、過去 48 時間以内に最後に更新されたインシデントの一覧を取得し、その一覧を JSON ファイルとして保存します。
重要
このスクリプトは、Get-Token.ps1保存したのと同じフォルダー に 保存します。
# This script returns incidents last updated within the past 48 hours.
$token = ./Get-Token.ps1
# Get incidents from the past 48 hours.
# The script may appear to fail if you don't have any incidents in that time frame.
$dateTime = (Get-Date).ToUniversalTime().AddHours(-48).ToString("o")
# This URL contains the type of query and the time filter we created above.
# Note that `$filter` does not refer to a local variable in our script --
# it's actually an OData operator and part of the API's syntax.
$url = "https://api.security.microsoft.com/api/incidents`?`$filter=lastUpdateTime+ge+$dateTime"
# Set the webrequest headers
$headers = @{
'Content-Type' = 'application/json'
'Accept' = 'application/json'
'Authorization' = "Bearer $token"
}
# Send the request and get the results.
$response = Invoke-WebRequest -Method Get -Uri $url -Headers $headers -ErrorAction Stop
# Extract the incidents from the results.
$incidents = ($response | ConvertFrom-Json).value | ConvertTo-Json -Depth 99
# Get a string containing the execution time. We concatenate that string to the name
# of the output file to avoid overwriting the file on consecutive runs of the script.
$dateTimeForFileName = Get-Date -Format o | foreach {$_ -replace ":", "."}
# Save the result as json
$outputJsonPath = "./Latest Incidents $dateTimeForFileName.json"
Out-File -FilePath $outputJsonPath -InputObject $incidents
これで完了です。 これで次の操作が正常に完了しました。
- アプリケーションを作成して登録しました。
- そのアプリケーションにアラートを読み取るためのアクセス許可を付与しました。
- API に接続されています。
- PowerShell スクリプトを使用して、過去 48 時間以内に更新されたインシデントを返しました。
関連記事
- Microsoft Defender XDR API の概要
- Microsoft Defender XDR API にアクセスする
- ユーザーなしでMicrosoft Defender XDRにアクセスするアプリをCreateする
- ユーザーの代わりにMicrosoft Defender XDR API にアクセスするアプリをCreateする
- Microsoft Defender XDR API へのマルチテナント パートナー アクセス権を持つアプリをCreateする
- Azure Key Vaultを使用してサーバー アプリのシークレットを管理する
- OAuth 2.0 ユーザー サインインと API アクセスの承認
ヒント
さらに多くの情報を得るには、 Tech Community: Microsoft Defender XDR Tech Community の Microsoft Security コミュニティとEngageします。