Microsoft Sentinel を用いて、インシデントを Zendesk に自動通知させる

# 1. はじめに
Microsoft Sentinel を用いて、インシデント検知時に Zendesk への自動通知を設定したのでメモ。
自動通知については、シリーズ化していますので、他の通知設定例については以下をご参照下さい。

- [Microsoft Sentinel を用いて、インシデントを Slack に自動通知させる](https://qiita.com/hisnakad/items/b44b3ebd3977714cf890)
- [Microsoft Sentinel を用いて、インシデントを Microsoft Teams に自動通知させる](https://qiita.com/hisnakad/items/abbedd7acee0707230d3)
- [Microsoft Sentinel を用いて、インシデントをメール通知させる（O365コネクタ）](https://qiita.com/hisnakad/items/cfaeae8c7b92c7d26365)

# 2. 構成図
本構成のシステム構成図を紹介します。
目的は Microsoft Sentinel を運用監視する際に、高インシデントが発生したタイミングで Zendesk にインシデントをチケットとして登録することが目的になります。
Microsoft Defender for Cloud は Microsoft Sentinel に対する脅威アラート生成として、今回はサンプルアラート機能を用いて検証を行っています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653790/f893e1b8-afba-c1bb-a6b0-bddab59253df.png)

# [補足] Zendesk とは
Zendesk はクラウドサービスで提供するカスタマーサポート・サービス管理ツールです。
日本のお客様も事例で挙がっており、お客様の相談もあり Azure の Logic Apps を用いて検証を行いました。
-　https://www.zendesk.co.jp/

Microsoft Azure では、Logic Apps コネクタで Zendesk との接続をサポートしています。(2022.2現在プレビュー機能）
詳細は以下公式ドキュメントをご参照下さい。
- https://docs.microsoft.com/en-us/connectors/zendesk/

Logic Apps の Zendesk コネクタは以下の Action に対応しており、新規作成や削除、更新などが出来るようです。
今回は `Create Item` を用いて、Zendesk にチケット登録するまでを設定してみます。

| Action   | Detail |
| :--- | :----------- |
| Create Item | Creates a Zendesk item |
| Delete item | Deletes a Zendesk item |
| Get item | Retrieves a Zendesk item |
| Get items | Retrieves Zendesk items of a certain Zendesk type (example: 'Ticket') |
| Get tables	 | Retrieves Zendesk tables from a site |
| Update item |Updates an existing Zendesk item|

# 3. 設定方法
-  Microsoft Sentinel より、新たにプレイブックを作成します。
    -  ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653790/cd3aabb5-ffc5-c102-3063-d9595347bd2d.png)
    -  プレイブック名を入れて、Microsoft Sentinel のインシデントトリガーに対応した、空の Logic Apps を作成します。
    -  ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653790/aa906649-7049-3f5b-a88d-2ad62f74f732.png)
    -  途中で Microsoft Sentinel とのマネージドIDを接続する項目を有効にします。
-  Logics Apps で Zendesk コネクタを用いて接続します。
    -  ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653790/b15d59d4-0c64-0e62-c4cd-ba5ca3ae5a0b.png)
        -  ここで、新たにインシデントを作成する目的で **項目の作成**を選択します。
    -  Zendesk 側に認証を行います。
        -  ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653790/1fb58db9-ff35-f10e-28f5-2d7350af9d8b.png)
            -  Logics apps の Zendesk コネクタはユーザー認証ベースで接続が行われます
            -  「Company name」の箇所は、Zendesk と契約した際のサブドメイン（https://**XXXX**.zendesk.com/）を記入します
            -  サインインをクリックすると、Zendeskのユーザー認証に遷移しますので、Ticket 起票に用いるユーザーIDで認証を行います。
-  Logic Apps のコネクタ内容を更新し、Zendesk 側の起票内容にマッピングします。
    -  Zendeskの **Ticket** テーブルに対して、Subject、Description、Priority を反映させました。
    -  ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653790/8cfc8318-6f52-f013-d810-74f4f0866c40.png)
        - API の仕様に拠るものなのか、Zendesk 側のTicket に起票できるフィールドは以下に限られていました。
            - エラーログから抜粋したところ、Zendesk 側の Ticket として起票できるフィールドが以下であることが分かります。
                - ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653790/91321559-a9b1-a656-ae7a-0a86cdefc30e.png)

            - Zendesk 側でサポートされているフィールドはZendesk Developer サイトの[公式ドキュメント](https://developer.zendesk.com/api-reference/ticketing/tickets/tickets/)を参照する必要があります。
                - Logic Apps のコネクタより送信できるフィールドは全ての Ticket フィールドが対応している訳ではないため、注意が必要です。
                - フィールドの Type も注意が必要です。
                    - **String**であれば、Microsoft Sentinel のフィールドとマッピングしても問題無いなど
 
>Valid fields are: 'id', 'url', 'external_id', 'type', 'subject', 'raw_subject', 'description', 'priority', 'status', 'recipient', 'requester_id', 'submitter_id', 'assignee_id', 'organization_id', 'group_id', 'collaborator_ids', 'forum_topic_id', 'problem_id', 'has_incidents', 'due_at', 'tags', 'via', 'custom_fields', 'satisfaction_rating', 'sharing_agreement_ids', 'followup_ids', 'ticket_form_id', 'brand_id', 'created_at', 'updated_at'


-  Zendesk側の結果表示など試行錯誤した結果、マッピングする情報として以下を行いました。
    -  `subject` に対してはインシデントのタイトルを反映させる
    -  `description` 部分は単純にチケットのBODYとして用いられているようなので、複数のフィールドを入れる（今回はインシデントの説明、インシデントURL）
    -  `priority` にはインシデントの重要度をマッピングする

| Zendesk Field | Microsoft Sentinel Field |
| :--- | :----------- |
| Subject | "インシデントのタイトル" |
| description | "インシデントの説明" / "インシデントのURL" |
| priority | "インシデントの重大度" |

# 4. 試してみる ～ 動作確認
今回は Microsoft Sentinel のアラート通知のため、Microsoft Defender for Cloud のサンプルアラート機能を用いました。
Microsoft Defender for Cloud では、IaaS/PaaS 環境に対する保護として Microsoft Defender シリーズの構成、導入を行える機能（CWPP - Cloud Workload Protection Platform）があり、サンプルアラートを生成する機能があります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653790/02ca9c2c-10e3-e174-e77c-79ee878e07b6.png)

- Microsoft Defender for Cloud によるアラートを Microsoft Sentinel 経由で Automation 機能を経由して、Zendesk 側に通知した結果、無事 Zendesk 側でインシデントが作成されることを確認しました。
    - ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653790/c0621a3d-0450-3023-4ca0-bea4d6170e0c.png)
-Zendesk 側でチケットをクリックすると、description フィールドにマッピングしたインシデント詳細や、Microsoft Sentinel のインシデントURLが反映されることが分かります。
    - ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653790/7e94465b-bead-8b0f-1979-e36b046fd623.png)

# 5. 注意事項など
Logic Apps コネクタ側の仕様にはスロットル制限や、サポートする対象フィールドなどの制約が記載されています。
コネクタの動作チェックやエラーなどを確認しながら、テスト頂くことをお勧めします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653790/6a5d5dad-a987-280e-a35c-dc5555f6abde.png)

# 6. まとめ
以上、Microsoft Sentinel のセキュリティインシデントを Zendesk に通知する設定例でした。
どなたかの参考になれば幸いです。

＊本稿は、個人の見解に基づいた内容であり、所属する会社の公式見解ではありません。また、いかなる保証を与えるものでもありません。正式な情報は、各製品の販売元にご確認ください。