# Azure Sentinel Integration

### Overview

Microsoft Sentinel is a cloud-native SIEM and SOAR solution built on Azure. It provides intelligent security analytics and threat intelligence across the enterprise, with a single solution for alert detection, threat visibility, proactive hunting, and threat response.

This guide walks you through integrating Microsoft Sentinel with the alert management platform. Since Sentinel does not natively support outbound HTTP webhooks, the integration is implemented using Azure Logic Apps (Playbooks) as middleware. When a Sentinel incident is created, an Automation Rule triggers a Logic App playbook that formats and forwards the incident payload via HTTP POST to the platform webhook.

***

### Integration Flow

1. A security event or custom Analytics rule triggers a new Incident in Microsoft Sentinel.
2. The Sentinel Automation Rule detects the incident creation and runs the configured Logic App playbook.
3. The Logic App sends an HTTP POST request to the platform webhook with the structured incident payload.
4. The platform receives the payload, validates the schema, and creates an alert with the appropriate severity.

***

### Webhook Payload Schema

The payload is sent by the Logic App as a custom-structured JSON object built from the Sentinel incident trigger output.

| **Field**        | **Type** | **Required** | **Description**                                        |
| ---------------- | -------- | ------------ | ------------------------------------------------------ |
| IncidentName     | string   | Yes          | Display name of the Sentinel incident                  |
| IncidentNumber   | integer  | Yes          | Auto-incremented incident identifier in the workspace  |
| Severity         | string   | Yes          | Incident severity: High, Medium, Low, or Informational |
| Status           | string   | Yes          | Current lifecycle status: New, Active, or Closed       |
| Description      | string   | No           | Optional description of the incident (may be null)     |
| WorkspaceId      | string   | Yes          | Unique identifier of the Log Analytics workspace       |
| CreatedTime      | string   | Yes          | ISO 8601 timestamp of when the incident was created    |
| LastModifiedTime | string   | Yes          | ISO 8601 timestamp of the last modification            |

***

### Severity / Status Mapping

Sentinel's `Severity` field maps directly to platform priority:

| **Sentinel Severity** | **Platform Priority** | **Description**                                       |
| --------------------- | --------------------- | ----------------------------------------------------- |
| High                  | CRITICAL              | High severity incident, immediate response required   |
| Medium                | HIGH                  | Medium severity incident, prompt investigation needed |
| Low                   | MEDIUM                | Low severity incident, investigate when possible      |
| Informational         | LOW                   | Informational event, no immediate action required     |

Sentinel `Status` maps to platform alert lifecycle:

| **Sentinel Status** | **Platform Status** | **Description**                            |
| ------------------- | ------------------- | ------------------------------------------ |
| New                 | PROBLEM             | New incident created, not yet investigated |
| Active              | PROBLEM             | Incident is currently being investigated   |
| Closed              | RECOVERY            | Incident has been resolved and closed      |

***

### Alert Payload Examples

#### Raised (New Incident)

This payload is sent when a new Sentinel incident is created and the automation rule triggers the Logic App. The `Status` field is `"New"` and `Severity` reflects the analytics rule configuration.

JSON

```
{
  "IncidentName": "OnCall Webhook Test Alarmı",
  "IncidentNumber": 108,
  "Severity": "Medium",
  "Status": "New",
  "Description": null,
  "WorkspaceId": "32382f81-6cf6-416f-9bfb-5c6a224c5843",
  "CreatedTime": "2026-02-24T01:11:49.84Z",
  "LastModifiedTime": "2026-02-24T01:11:50.03Z"
}
```

<figure><img src="https://4108595529-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FimJRSa33y5Ej6rwXrBeA%2Fuploads%2FubNnNpMVQkHdAVyyWuQt%2FEkran%20Resmi%202026-02-24%2015.51.17.png?alt=media&#x26;token=2c5ed5d5-3237-443a-8e00-390bbecc5e1c" alt=""><figcaption></figcaption></figure>

### Installation & Configuration

#### Step 1: Create an Alert Source in the Platform

1. Log in to the alert management platform.
2. Navigate to Integrations → Add Integration.
3. Select Microsoft Sentinel (or Custom Webhook) as the provider.
4. Name the integration (e.g., `Production Sentinel Alerts`).
5. Save and copy the generated Webhook URL.

***

#### Step 2: Create a Log Analytics Workspace & Add Sentinel

Microsoft Sentinel requires a Log Analytics workspace. If you already have one, skip to Step 3.

1. In the Azure Portal, search for Log Analytics workspaces and click + Create.
2. Create a new Resource Group (e.g., `sentinel-rg`) and name your workspace (e.g., `sentinel-workspace`). Complete the deployment.

<figure><img src="https://4108595529-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FimJRSa33y5Ej6rwXrBeA%2Fuploads%2F0gd3Sjlj7FQdF2NsQujY%2Fimage.png?alt=media&#x26;token=67406922-b5a5-49de-8b4e-2db32242ce6e" alt=""><figcaption></figcaption></figure>

<figure><img src="https://4108595529-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FimJRSa33y5Ej6rwXrBeA%2Fuploads%2Fg1AyCkRvHNb4hJmz1cFG%2Fimage.png?alt=media&#x26;token=d9093e78-e4dd-4c05-a9a7-b06a33840764" alt=""><figcaption></figcaption></figure>

3. Search for Microsoft Sentinel in the Azure Portal, click + Create, select your newly created workspace, and click Add.

> ![](https://4108595529-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FimJRSa33y5Ej6rwXrBeA%2Fuploads%2FIB57D29hMbgE5CdSl1sm%2Fimage.png?alt=media\&token=b1de826d-4785-4685-b5b9-108783a5c0c0)![](https://4108595529-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FimJRSa33y5Ej6rwXrBeA%2Fuploads%2F2YAf6nrkeczsmzQtmcj6%2Fimage.png?alt=media\&token=bd2b59c6-d3cb-4247-8bf3-fe2f1f206425)

***

#### Step 3: Create a Logic App (Playbook)

*CRITICAL: To avoid trigger recognition bugs, always create the Playbook directly from within Sentinel, NOT from the general Azure Logic Apps menu.*

1. In the Azure Portal, go to Microsoft Sentinel and select your workspace.
2. In the left sidebar, under Configuration, click Automation.
3. Click + Create at the top and select Playbook with incident trigger.

<figure><img src="https://4108595529-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FimJRSa33y5Ej6rwXrBeA%2Fuploads%2Fea73YyuIjM2lZW0qSdH0%2Fimage.png?alt=media&#x26;token=cb0117b7-dad9-4aa3-bbb4-5c83d4b96f5b" alt=""><figcaption></figcaption></figure>

4. Select your Resource Group (`sentinel-rg`) and name your playbook (e.g., `SentinelWebhookPlaybook`). Click Review + create and complete the deployment.

***

#### Step 4: Configure the Logic App Workflow

1. Open your newly created Logic App (`SentinelWebhookPlaybook`) and go to Logic app designer.
2. The trigger Microsoft Sentinel incident will already be there. Click the + button below it and select Add an action.

<figure><img src="https://4108595529-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FimJRSa33y5Ej6rwXrBeA%2Fuploads%2FyP6qfW0rp0ZM9GxqQFqp%2FEkran%20Resmi%202026-02-24%2015.53.06.png?alt=media&#x26;token=b4f33a68-e430-4813-a755-b4ca922cb9a5" alt=""><figcaption></figcaption></figure>

3. Search for HTTP and add the green HTTP action. Configure it exactly as follows:
   * Method: `POST`
   * URI: Your platform webhook URL (from Step 1)
   * Headers: Key = `Content-Type`, Value = `application/json` *(⚠️ Ensure there are NO trailing spaces in the value)*.
   * Body: Compose the JSON payload using the Dynamic content menu to map Sentinel incident fields:

JSON

```
{
  "IncidentName": @{triggerBody()?['object']?['properties']?['title']},
  "IncidentNumber": @{triggerBody()?['object']?['properties']?['incidentNumber']},
  "Severity": @{triggerBody()?['object']?['properties']?['severity']},
  "Status": @{triggerBody()?['object']?['properties']?['status']},
  "Description": @{triggerBody()?['object']?['properties']?['description']},
  "WorkspaceId": @{triggerBody()?['workspaceId']},
  "CreatedTime": @{triggerBody()?['object']?['properties']?['createdTimeUtc']},
  "LastModifiedTime": @{triggerBody()?['object']?['properties']?['lastModifiedTimeUtc']}
}
```

4. Click Save.

<figure><img src="https://4108595529-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FimJRSa33y5Ej6rwXrBeA%2Fuploads%2FdmzyhRi2aRaIART5Boyg%2FEkran%20Resmi%202026-02-24%2015.53.52.png?alt=media&#x26;token=3cec44b5-acd4-4476-9c3f-3b31575e9113" alt=""><figcaption></figcaption></figure>

***

#### Step 5: Grant Permissions to Azure Security Insights (CRITICAL)

For Sentinel to automatically trigger your playbook, its background service (`Azure Security Insights`) must have explicit permission on the resource group.

1. In the Azure Portal search bar, type Resource groups and open `sentinel-rg`.
2. Click Access control (IAM) in the left menu.
3. Click + Add → Add role assignment.
4. Search for and select the Microsoft Sentinel Automation Contributor role. Click Next.

<figure><img src="https://4108595529-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FimJRSa33y5Ej6rwXrBeA%2Fuploads%2FmiCN41MewpcbOc7aDYxe%2FEkran%20Resmi%202026-02-24%2015.57.02.png?alt=media&#x26;token=551f9da0-d2db-4407-8f82-3757555e87e9" alt=""><figcaption></figcaption></figure>

5. Under "Assign access to", select User, group, or service principal.
6. Click + Select members, search for Azure Security Insights, and select it.

<figure><img src="https://4108595529-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FimJRSa33y5Ej6rwXrBeA%2Fuploads%2F9qFuqU3g1QT55yC2pwSe%2FEkran%20Resmi%202026-02-24%2015.57.53.png?alt=media&#x26;token=022172fc-6edf-468f-89da-03512fea16a7" alt=""><figcaption></figcaption></figure>

7. Click Review + assign. *(Note: If you get a "Role assignment already exists" error, you can safely skip this step).*

<figure><img src="https://4108595529-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FimJRSa33y5Ej6rwXrBeA%2Fuploads%2FBQjixzH1j1H1F2FtajnX%2FEkran%20Resmi%202026-02-24%2015.58.50.png?alt=media&#x26;token=0001d826-e0de-4847-a968-cd665d251da6" alt=""><figcaption></figcaption></figure>

#### Step 6: Create a Sentinel Automation Rule

1. Return to the Microsoft Sentinel console → Automation.
2. Click + Create → Automation rule.
3. Configure the rule:
   * Trigger: `When incident is created`
   * Actions: `Run playbook`
   * Open the playbook dropdown and select your Logic App (`SentinelWebhookPlaybook`).
4. Click Apply.

<figure><img src="https://4108595529-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FimJRSa33y5Ej6rwXrBeA%2Fuploads%2FeIbchpMKial9l48ZtT1V%2Fimage.png?alt=media&#x26;token=805c7a8b-eeff-45ab-9dfa-f644a3d16117" alt=""><figcaption></figcaption></figure>

***

### Testing

To verify the integration end-to-end, create a scheduled analytics rule to generate a test incident.

1. In Sentinel, navigate to Analytics. Click + Create → Scheduled query rule.
2. Set Name to `OnCall Webhook Test Alarmı` and Severity to `Medium`.
3. In the Set rule logic tab, use the following KQL query:

Code snippet:

```
print Message="OnCall Test Alarmı"
| extend TimeGenerated = now()
```

4. Set query scheduling to run every 5 Minutes and ensure "Create incidents from alerts" is Enabled. Save the rule.

<figure><img src="https://4108595529-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FimJRSa33y5Ej6rwXrBeA%2Fuploads%2FL15XY8xu9DbgQJGyLFUZ%2FEkran%20Resmi%202026-02-24%2016.09.15.png?alt=media&#x26;token=5aae2f67-f838-48bb-83f9-b161039b462e" alt=""><figcaption></figcaption></figure>

5. Wait up to 5 minutes. Check the Incidents page in Sentinel to confirm the incident was created.

<figure><img src="https://4108595529-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FimJRSa33y5Ej6rwXrBeA%2Fuploads%2FmOR8KBdHpccw1HdzG4sN%2FEkran%20Resmi%202026-02-24%2016.09.49.png?alt=media&#x26;token=64050638-b571-49bb-a8fe-8d9108dd8f0f" alt=""><figcaption></figcaption></figure>

6. Verify your webhook endpoint to ensure the JSON payload was received successfully. You can also check the Logic App's Run history for a `Succeeded` status.

<figure><img src="https://4108595529-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FimJRSa33y5Ej6rwXrBeA%2Fuploads%2FWUiTwbPANVL6p3sMgK8j%2FEkran%20Resmi%202026-02-24%2016.10.36.png?alt=media&#x26;token=d0a3a7ce-5da9-49b5-a5bc-952fd0905225" alt=""><figcaption></figcaption></figure>

### Troubleshooting

| **Issue**                                            | **Possible Cause**                                | **Resolution**                                                                                                                                                                                               |
| ---------------------------------------------------- | ------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| Logic App run history shows `Failed` (Bad Request)   | Format error in HTTP Headers.                     | Edit the Logic App HTTP action and ensure the `Content-Type` value is exactly `application/json` without any trailing spaces.                                                                                |
| Playbook does not appear in Automation Rule dropdown | Incorrect Playbook creation or missing IAM roles. | Ensure you created the Playbook from within Sentinel, NOT the general Logic Apps menu. Verify that `Azure Security Insights` has the `Microsoft Sentinel Automation Contributor` role on the Resource Group. |
| Incidents are created but Playbook does not trigger  | Automation rule misconfigured.                    | Verify the Automation Rule trigger is set to "When incident is created" (not Alert) and the rule is "Enabled".                                                                                               |
| Empty fields in the received alert                   | Dynamic content mismatch.                         | Open the Logic app designer and ensure the dynamic content tokens in your JSON body match the specific Sentinel incident schema fields.                                                                      |
