Microsoft Copilot for Security で Logic Apps カスタム プラグインを作る
はじめに
Microsoft Copilot for Security が GA され、ようやくいろいろ検証できるようになりました。Copilot for Security の特徴として、Microsoft 製品だけではなく、様々な 3rd Party 製品とプラグインと呼ばれる機能で連携できる点が強みです。こちらを検証してみました。
要件
Copilot for Security 側で Sentinel のインシデント番号と理由などを指定してクローズするための Logic Apps プラグインを作成します。
参考
こちらのサンプルを参考にしました。
設定
Logic Apps
まず Logic Apps 側です。
[HTTP 要求の受信時] は Copilot for Security から以下の JSON スキーマでリクエストを受けることを想定しています。
{
"properties": {
"incidentNo": {
"type": "string"
},
"classificationReason": {
"type": "string"
},
"closeReasonText": {
"type": "string"
}
},
"type": "object"
}
[クエリを実行して結果を一覧表示する] は当初想定していなかったのですが、Logic Apps で Sentinel インシデントを操作する際にインシデント ARM ID が必要になり、後ほど説明するプラグインの yaml のほうにいくら説明を追記しても、Security for Copilot が インシデント ARM ID をリクエストに入れてくれませんでした。(インシデント番号を入れてくる)
そのため、インシデント番号からインシデント ARM ID を取得するクエリを追加し、出力を JSON 解析しています。
{
"items": {
"properties": {
"IncidentUrl": {
"type": "string"
}
},
"required": [
"IncidentUrl"
],
"type": "object"
},
"type": "array"
}
収集した情報をもとにインシデントを更新します。
最後に HTTP レスポンスを記載しています。(理由は後ほど説明します)
Copilot for Security
スタンドアローンのポータルを開き、ツールのアイコンをクリックします。
Custom の [プラグインのアップロード] をクリックします。
Copilot for Security プライグイン を選択し、yaml ファイルを登録します。yaml には Logic Apps に渡す必要のあるパラメーターを定義します。ここの Description を認識して適切なパラメーターを Copilot for Security が渡してくれるのでしょうか。詳細よく分からずです。
Descriptor:
Name: CloseSentinelIncident
DisplayName: CloseSentinelIncident
Description: Skills to close a Sentinel incident
SkillGroups:
- Format: LogicApp
Skills:
- Name: Close Sentinel Incident
DisplayName: logic app that close a Sentinel incident
Description: run logic app to close a Sentinel incident
Inputs:
- Name: incidentNo
Description: sentinel incident No
Required: true
- Name: classificationReason
Description: Option is TruePositive - SuspiciousActivity, BenignPositive - SuspiciousButExpected, FalsePositive - IncorrectAlertLogic, FalsePositive - MisconfiguredAlertLogic, FalsePositive - InaccurateData, Undetermined - UnableToDetermined. If not provided, provide options and ask for user to choose again.
DefaultValue: SuspiciousActivity
Required: true
- Name: closeReasonText
Description: close reason text
Required: false
Settings:
SubscriptionId: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
ResourceGroup: rg-demo
WorkflowName: logicapp-cfs-CloseIncident
TriggerName: manual
動作確認
yaml ファイル登録後、プラグインとして使用できるようになるので、実際に試してみました。
自然言語で指示しても、適切にパラメーターを取得してうまくクローズ処理しているように見えるのですが、しかし、ワークフローの最後のアクションの出力を取得する際に、responseData.Properties.outputsLink がnullとなっています。これは、ワークフローが正常に完了しなかった可能性を示しています。
のメッセージの通り、Copilot for Security 側で Logic Apps の正常完了が確認できていないように見えます。なお、実際には Logic Apps 側は正常完了しており、インシデントはクローズされていました。
そのため、Logic Apps の最終処理に HTTP レスポンスの処理を入れたのですが、ActionResponseSkipped. The execution of template action '応答' is skipped: the client application is not waiting for a response from service.
のメッセージの通り、スキップされており、おそらく Copilot for Security が Logic Apps の完了応答を待ってくれないみたいです。responseData.Properties.outputsLink を調べても何も出てこず、解決方法が分かりません。
最後に
ということで、現状中途半端な感じになっています。Logic Apps プラグイン用の公式ドキュメントもまだ出ていないようなので、もう少し待ってから見直してみようと思います。もし解決策ご存じの方いらっしゃればぜひコメントください。
Discussion