Microsoft Defender for Endpoint API を使用する場合は、ユーザーなしでMicrosoft Defender for Endpointにアクセスすることが必要になる場合があります。 たとえば、バックグラウンドで実行され、組織に代わって Defender for Endpoint とやり取りするサービスを作成できます。 サインインしているユーザーなしでバックグラウンド サービスにアクセスする必要がある場合は、ユーザーなしでエンドポイントのDefenderにアクセスできるアプリケーションを作成します。
この記事では、アプリケーションをMicrosoft Entra IDに登録し、アプリ専用のアクセス許可を付与し、エンドポイント API アクセスのDefenderのアクセス トークンを取得する方法について説明します。 API アクセスには 、OAuth 2.0 クライアント資格情報フローが必要です。
前提条件
Azureでアプリの登録を作成するには、アプリケーション管理者などのアプリの作成を許可するアプリ登録アクセス許可を持つMicrosoft Entra ロールが必要です。
手順 1: Azureでアプリを作成する
アプリを登録し、Azureで API アクセス許可を付与するには、次の手順を実行します。
Azure portal にサインインし
アプリの登録を検索し、アプリの登録に移動します。
[新規登録] を選択します。
アプリケーションの名前を選択し、[ 登録] を選択します。
アプリケーション ページで、[管理> API のアクセス許可> アクセス許可の追加> 組織で使用している API] に移動します。
[ API のアクセス許可の要求 ] ページで、 WindowsDefenderATP を検索して選択します。
必要なアクセス許可の種類を選択し、[ アクセス許可の追加] を選択します。
委任されたアクセス許可 - ユーザーであるかのようにアプリでサインインします。
アプリケーションのアクセス許可 - API にサービスとしてアクセスします。
アプリの適切なアクセス許可を選択します。 必要なアクセス許可を特定するには、呼び出している API の [アクセス許可] セクションを参照してください。 次に、2 つの例を紹介します。
[アクセス許可の追加] を選択します。
手順 2: アプリにシークレットを追加する
次の手順では、アプリ シークレットを使用してアプリを認証する方法について説明します。 証明書を使用してアプリを認証するには、「 自己署名パブリック証明書を作成してアプリケーションを認証する」を参照してください。
アプリケーション ページから、[証明書とシークレット]>[新しいクライアント シークレット]を選択します。
[ クライアント シークレットの追加] ウィンドウで 、説明と有効期限を追加します。
[追加] を選択します。
作成したシークレットの 値 をコピーします。 ページを離れた後、この値を取得することはできません。
アプリの 概要 ページで、 アプリケーション (クライアント) ID と ディレクトリ (テナント) ID をコピーします。 アプリを認証するには、この ID が必要です。
アプリケーション ID とテナント ID を書き留めます。 アプリケーション ページで、[ 概要 ] に移動し、次の内容をコピーします。
マルチテナント アプリ
Microsoft Defender for Endpointパートナーは、アプリをマルチテナントに設定する必要があります。 複数の顧客のテナントで実行されるアプリを作成する予定の場合は、アプリをマルチテナント アプリに設定します。
Azure アプリ ページで、[> 認証の管理] に移動します。
プラットフォームを追加します。
[ プラットフォームの構成 ] ウィンドウで、[ Web] を選択します。
https://portal.azure.comに を追加し、構成 を選択します。[ サポートされているアカウントの種類 ] オプション で、[任意の組織のディレクトリにあるアカウント ] を選択し、[保存] を選択 します。
アプリを実行したら、アプリを使用する予定の各テナントで承認する必要があります。 これは、アプリケーションが顧客の代わりに Defender for Endpoint と対話するためです。 ユーザーまたは顧客は、同意リンクを選択してアプリを承認する必要があります。 管理者権限を持つユーザーで同意してください。
同意リンクを形成する方法を次に示します。 テナント管理者がこの URL にアクセスすると、顧客テナントがアプリを承認できるように、Microsoft ID プラットフォーム同意フローが開きます。
00000000-0000-0000-0000-000000000000をアプリ ID に置き換えます。
https://login.microsoftonline.com/common/oauth2/authorize?prompt=consent&client_id=00000000-0000-0000-0000-000000000000&response_type=code&sso_reload=true
アクセス トークンを取得する
次のメソッドは、アプリの アクセス トークンを取得する方法を示しています。
ヒント
一部のMicrosoft Defender for Endpoint API では、レガシ リソース https://api.securitycenter.microsoft.comに対して発行されたアクセス トークンが引き続き必要です。 トークンの対象ユーザーが API で予想されるリソースと一致しない場合、API エンドポイントが403 Forbiddenを使用している場合でも、要求はhttps://api.security.microsoft.comで失敗します。 トークンを取得するときに、リソースまたはスコープとして https://api.securitycenter.microsoft.com を使用します。
# This script acquires the App Context Token and stores it in the variable $token for later use.
# Paste your Tenant ID, App ID, and App Secret (App key) into the quotes below.
$tenantId = '' ### Paste your tenant ID here
$appId = '' ### Paste your Application ID here
$appSecret = '' ### Paste your Application key here
$sourceAppIdUri = 'https://api.securitycenter.microsoft.com/.default'
$oAuthUri = "https://login.microsoftonline.com/$TenantId/oauth2/v2.0/token"
$authBody = [Ordered] @{
scope = "$sourceAppIdUri"
client_id = "$appId"
client_secret = "$appSecret"
grant_type = 'client_credentials'
}
$authResponse = Invoke-RestMethod -Method Post -Uri $oAuthUri -Body $authBody -ErrorAction Stop
$token = $authResponse.access_token
$token