🤖

Microsoft Copilot for Security で Logic Apps カスタム プラグインを作る

2024/04/05に公開

はじめに

Microsoft Copilot for Security が GA され、ようやくいろいろ検証できるようになりました。Copilot for Security の特徴として、Microsoft 製品だけではなく、様々な 3rd Party 製品とプラグインと呼ばれる機能で連携できる点が強みです。こちらを検証してみました。

要件

Copilot for Security 側で Sentinel のインシデント番号と理由などを指定してクローズするための Logic Apps プラグインを作成します。

参考

こちらのサンプルを参考にしました。
https://github.com/Yaniv-Shasha/SecurityCopilot/tree/main/Workshop/Custom_Plugin/Task01_Send_jokeByemail

設定

Logic Apps

まず Logic Apps 側です。

[HTTP 要求の受信時] は Copilot for Security から以下の JSON スキーマでリクエストを受けることを想定しています。

要求本文の 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 プラグイン用の公式ドキュメントもまだ出ていないようなので、もう少し待ってから見直してみようと思います。もし解決策ご存じの方いらっしゃればぜひコメントください。

Microsoft (有志)

Discussion