🔚

Logic Apps の Defender for Endpoint コネクタでサービス プリンシパル・マネージド ID を使う

2023/04/27に公開

はじめに

Logic Apps のコネクタには各 Azure や M365 サービスにアクセスする際、サービス プリンシパルやマネージド ID が選択可能です。Azure リソースであれば、RBAC を付与するだけなのでシンプルですが、M365 系は API のアクセス許可が必要になります。そのため、今回は Defender for Endpoint (コネクタ名としては Microsoft Defender ATP) のアラート情報取得にサービス プリンシパル・マネージド ID を使って検証します。
なお、今回の各種アクセス許可の付与にはグローバル管理者、アプリケーション管理者、クラウド アプリケーション管理者のいずれかの Azure AD ロールが必要となるようです。

サービス プリンシパルでアクセス

参考としたドキュメントはこちらです。
https://learn.microsoft.com/ja-jp/microsoft-365/security/defender-endpoint/exposed-apis-create-app-webapp?view=o365-worldwide

まず作成したサービス プリンシパルに Defender for Endpoint API のアクセス許可を付与します。[API のアクセス許可] から[アクセス許可の追加] をクリックし、[所属する組織で使用している API] から WindowsDefenderATP を検索します。(部分一致ではなく前方一致で検索されるようなので、Windows から入力が必要です)


アプリケーションのアクセス許可を選択し、アラート情報を取得するので [Alert.Read.All] を選択します。


最後に管理者の同意を行います。


作成したサービス プリンシパルを Logic Apps のコネクタで設定します。Microsoft Defender ATP のコネクタで [サービス プリンシパルを使用して接続する] をクリックします。


サービス プリンシパルの情報を入力し、保存します。


実行するとアラート情報が取得できていることが確認できます。

マネージド ID でアクセス

マネージド ID の場合はもう少し複雑です。アプリの登録ページに出てこないため、ポータルからは API アクセス許可が付与できず、CLI からの操作になります。参考はこちらですが、MS Graph API 用なので、Defender for Endpoint API 用に変更しています。
https://learn.microsoft.com/en-us/azure/active-directory/develop/multi-service-web-app-access-microsoft-graph-as-app?tabs=azure-powershell%2Cprogramming-language-nodejs#grant-access-to-microsoft-graph

まずは Logic Apps でマネージド ID を有効化します。[ID] からシステム割り当て済みを有効にしてオブジェクト ID をコピーしておきます。


MS Graph PowerShell を使用してマネージド ID に API アクセス許可を付与します。

# テナント ID と先ほどメモしたオブジェクト ID を設定
$TenantID="xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
$SpID="70291fef-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
$ApiName = "WindowsDefenderATP"

# API の許可を指定、1 つのみ指定
# 複数必要の場合は「マネージド ID にアクセス許可を設定」のコマンドを繰り返し実施
$PermissionName = "Alert.Read.All"

# 事前に MS Graph PowerShell にログイン
Connect-MgGraph -TenantId $TenantID -Scopes Application.Read.All,AppRoleAssignment.ReadWrite.All
Import-Module Microsoft.Graph.Applications

# 対象 API のサービスプリンシパルを取得
$ApiServicePrincipal = Get-MgServicePrincipal -Filter "DisplayName eq '$ApiName'" | Select-Object -first 1

# マネージド ID にアクセス許可を設定
$AppRole = $ApiServicePrincipal.AppRoles | Where-Object {$_.Value -eq $PermissionName -and $_.AllowedMemberTypes -contains "Application"}

$params = @{
	PrincipalId = $SpID
	ResourceId = $ApiServicePrincipal.Id
	AppRoleId = $AppRole.Id
}

New-MgServicePrincipalAppRoleAssignment -ServicePrincipalId $SpID -BodyParameter $params

MS Graph PowerShell のインストール方法などはこちら。
https://learn.microsoft.com/en-us/powershell/microsoftgraph/installation?view=graph-powershell-1.0


Azure AD の[エンタープライズ アプリケーション] のページから対象のマネージド ID のアクセス許可を確認すると、追加されていることが確認できます。


設定したマネージド ID を Logic Apps のコネクタで設定します。Microsoft Defender ATP のコネクタで [マネージド ID を使用して接続する] をクリックします。


システム割り当てマネージド ID を選択します。


実行するとアラート情報が取得できていることが確認できます。

Microsoft (有志)

Discussion