Microsoft Sentinel CCF-Pushconnectors (Vorschau) – Leitfaden für erste Schritte

Dieses Handbuch hilft Ihnen, Push-basierte codelose Connectors für Microsoft Sentinel mithilfe des Codeless Connector Framework (CCF) Push (Vorschau) zu verstehen, zu erstellen und bereitzustellen.

Was ist CCF Push?

CCF-Pushconnectors ermöglichen Es Ihren Anwendungen, Sicherheitsereignisse direkt in Echtzeit an Microsoft Sentinel zu senden. Im Gegensatz zu herkömmlichen abrufbasierten Connectors, die regelmäßig Daten aus APIs abrufen, ermöglichen Push-Connectors es Ihnen, Daten zu Sentinel zu übertragen, sobald in Ihrem System Ereignisse auftreten.

CCF Push bietet mehrere wichtige Vorteile:

  • Anwendungsgesteuerter Datenfluss: Ihre Anwendung steuert, wann und wie Daten gesendet werden, wodurch intelligente Batchverarbeitungsstrategien und eine optimierte Netzwerknutzung ermöglicht werden.
  • Echtzeiterfassung: Senden Sie Daten sofort, wenn Ereignisse eintreten, ohne auf Abfrageintervalle zu warten.
  • Vereinfachte Architektur: Es ist nicht erforderlich, API-Endpunkte zu verwalten, damit Sentinel abfragen kann.
  • Vorlagenbasierte Bereitstellung: Die Bereitstellung erstellt ARM-Vorlagen für DCRs, benutzerdefinierte Tabellen, Entra-Anwendungsregistrierung und geheime Clientschlüssel – Sie erhalten die Verbindungsdetails, die in Ihrer sendenden Anwendung konfiguriert werden sollen.
  • Sichere Authentifizierung: Verwendet Microsoft Entra-Anwendungen mit OAuth 2.0 für sichere Datenübermittlung.

Voraussetzungen

  • Bevor Sie beginnen, müssen Sie Zugriff auf das Azure-Sentinel GitHub-Repository für Verpackungstools haben.
  • Microsoft Entra-Berechtigungen:
    • Berechtigung zum Erstellen einer App-Registrierung in der Microsoft Entra-ID. Erfordert in der Regel die Entra ID-Rolle „Anwendungsentwickler“ oder höher.
    • Berechtigung zum Erstellen einer Anwendung mit geheimen Schlüsseln. Wenn Sie diese Berechtigung nicht erteilen, schlägt der Connector aus Sicherheitsgründen fehl.
    • Der Herausgeber muss über die entsprechende Rolle verfügen, um Token aus der Microsoft Entra-Anwendung abzurufen. Diese Token sind für die Authentifizierung von Anforderungen an den Datensammlungsendpunkt (Data Collection Endpoint, DCE) erforderlich, bei dem der Connector letztendlich seine Daten überträgt. Wenn der Anbieter keine Tokens abrufen kann, können keine Daten an die DCE gesendet werden.
  • Microsoft Azure-Berechtigungen:
    • Berechtigung zum Zuweisen der Rolle Herausgeber von Überwachungsmetriken für die Datensammlungsregel (DCR). Erfordert in der Regel die Azure RBAC-Rolle „Besitzer“ oder die Rolle „Benutzerzugriffsadministrator“.

Wie CCF-Push funktioniert

Das Pushmodell im Vergleich zum Pullmodell

Wenn Sie den Unterschied zwischen Push- und Pulldatenaufnahmemodellen verstehen, können Sie den richtigen Verbindertyp für Ihr Szenario auswählen.

CCF-Pull-Verbinder – Abrufbasiert:

Im Pullmodell ruft Microsoft Sentinel ihre API regelmäßig ab, um Daten abzurufen:

  • Microsoft Sentinel initiiert Verbindungen mit Ihrer Datenquellen-API in einem konfigurierten Zeitplan.
  • Daten werden in regelmäßigen Abrufintervallen empfangen, z. B. alle fünf Minuten.
  • Sie müssen einen öffentlich zugänglichen API-Endpunkt verwalten.
  • Die Abfrageinfrastruktur von Sentinel verwaltet den Datensammlungsprozess.

CCF-Pushconnectors - Ereignisgesteuert:

Im Pushmodell sendet Ihre Anwendung Daten direkt an Microsoft Sentinel:

  • Ihre Anwendung initiiert die Datenübermittlung, wenn Ereignisse auftreten.
  • Daten kommen in nahezu Echtzeit ein, wenn Ereignisse generiert werden.
  • Sie müssen keinen API-Endpunkt verwalten.
  • Ihre Anwendung steuert die Batchverarbeitung, Zeitsteuerung und Datenflussoptimierung.

Der Pushdatenfluss

Der CCF-Pushdatenfluss besteht aus fünf Hauptschritten:

  1. Sie stellen den Connector in Microsoft Sentinel bereit.

  2. Azure erstellt automatisch die folgenden Ressourcen:

    • Microsoft Entra-Anwendung mit Anmeldeinformationen
    • Data Collection Rule (DCR) – definiert, wie Ihre Daten verarbeitet werden.
    • Datensammlungsendpunkt (DATA Collection Endpoint, DCE) – die URL, an die Sie Daten senden
    • Benutzerdefinierte Protokolltabelle – wo Ihre Daten gespeichert werden
    • Rollenzuweisungen – Berechtigungen für die Entra-App
  3. Sie erhalten die folgenden Verbindungsdetails:

    • Mieter-ID
    • Anwendungs-ID (Client)
    • Geheimer Clientschlüssel
    • DCE-URI (Endpunkt-URL)
    • Unveränderliche DCR-ID
    • Name des Streams
  4. Ihre Anwendung sendet die folgenden Daten:

    • Ruft mithilfe der von CCF generierten Anmeldeinformationen für die Entra-App ein OAuth 2.0-Token ab. Weitere Informationen finden Sie im OAuth 2.0-Clientanmeldeinformationsfluss
    • Formatiert Ereignisse als JSON, die Ihrem Tabellenschema entsprechen
    • POST-Daten an den DCE-Endpunkt senden
  5. Azure verarbeitet und speichert Daten:

    • DCRs transformiert die Daten (optionale KQL-Transformationen)
    • Daten werden in die benutzerdefinierte Tabelle in Log Analytics geschrieben.
    • Die Daten sind für Abfragen, Analysen und Warnungen in Sentinel verfügbar.

CCF-Pushartefakte

Eine CCF Push Connector-Lösung besteht aus vier Hauptkomponenten:

  • Benutzerdefinierte Tabellendefinition
  • Datensammlungsregel (Data Collection Rule, DCR)
  • Connector-Definition (UI)
  • Konfiguration des Push-Connectors

Benutzerdefinierte Tabellendefinition

Was es ist: Das Schema, das die Struktur Ihrer Daten in Log Analytics definiert.

Wichtige Anforderungen:

  • Der Tabellenname muss mit _CL (benutzerdefiniertes Protokollsuffix) enden.
  • Muss eine TimeGenerated Spalte (Datums-/Uhrzeittyp) enthalten.
  • Spaltentypen: string, int, long, real, bool, datetime, dynamic, guid.
  • Verwenden Sie die API-Version 2025-07-01 oder höher.
  • Weitere Informationen finden Sie unter Erstellen einer benutzerdefinierten Tabelle in Azure Monitor-Protokollen.

Example:

{
  "name": "ContosoSecurityAlerts_CL",
  "type": "Microsoft.OperationalInsights/workspaces/tables",
  "apiVersion": "2025-07-01",
  "properties": {
     "schema": {
        "name": "ContosoSecurityAlerts_CL",
        "columns": [
          {
             "name": "TimeGenerated",
             "type": "datetime"
          },
          {
             "name": "EventSeverity",
             "type": "string"
          },
          {
             "name": "EventType",
             "type": "string"
          },
          {
             "name": "UserName",
             "type": "string"
          },
          {
             "name": "SourceIP",
             "type": "string"
          },
          {
             "name": "DeviceId",
             "type": "string"
          },
          {
             "name": "AlertMessage",
             "type": "string"
          }
        ]
     }
  }
}

Datensammlungsregel (Data Collection Rule, DCR)

Was es ist: Definiert, wie Azure Monitor Ihre Daten erfasst und verarbeitet. Weitere Informationen finden Sie unter Datensammlungsregeln in Azure Monitor.

Was es tut:

  • Gibt den Namen des Eingabedatenstroms an (was Ihre App beim Senden von Daten verwendet)
  • Definiert optionale KQL-Transformationen zum Gestalten und anreichern von Daten
  • Leitet Daten an die Zieltabelle weiter.
  • Links zum Datensammlungsendpunkt (DATA Collection Endpoint, DCE)

Wichtige Komponenten:

  • streamDeclarations: Definiert die Struktur der eingehenden Daten (muss mit dem übereinstimmen, was Ihre App sendet)
  • destinations: Wo die Daten gespeichert werden (Ihr Log Analytics-Arbeitsbereich)
  • dataFlows: Die Transformationspipeline vom Eingabedatenstrom in die Ausgabetabelle
  • dataCollectionEndpointId: Verknüpfungen zum DCE für die Datenaufnahme

Example:

{
  "name": "ContosoSecurityAlertsPushDCR",
  "apiVersion": "2021-09-01-preview",
  "type": "Microsoft.Insights/dataCollectionRules",
  "location": "[parameters('workspace-location')]",
  "properties": {
     "streamDeclarations": {
        "Custom-ContosoSecurityAlerts": {
          "columns": [
             {
                "name": "EventSeverity",
                "type": "string"
             },
             {
                "name": "EventType",
                "type": "string"
             },
             {
                "name": "UserName",
                "type": "string"
             },
             {
                "name": "SourceIP",
                "type": "string"
             },
             {
                "name": "DeviceId",
                "type": "string"
             },
             {
                "name": "AlertMessage",
                "type": "string"
             }
          ]
        }
     },
     "destinations": {
        "logAnalytics": [
          {
             "workspaceResourceId": "[variables('workspaceResourceId')]",
             "name": "clv2ws1"
          }
        ]
     },
     "dataFlows": [
        {
          "streams": [
             "Custom-ContosoSecurityAlerts"
          ],
          "destinations": [
             "clv2ws1"
          ],
          "transformKql": "source | extend TimeGenerated = now()",
          "outputStream": "Custom-ContosoSecurityAlerts_CL"
        }
     ],
     "dataCollectionEndpointId": "[concat('/subscriptions/',parameters('subscription'),'/resourceGroups/',parameters('resourceGroupName'),'/providers/Microsoft.Insights/dataCollectionEndpoints/',parameters('workspace'))]"
  }
}

Important

  • Der Streamname muss mit Custom- dem Präfix beginnen.
  • Das transformKql kann einfach "source" für Pass-Through verwendet werden oder KQL-Logik für die Datentransformation einschließen.
  • outputStream muss mit Ihrem Tabellennamen sowie mit dem Custom- Präfix und _CL Suffix übereinstimmen.

Connector-Definition (UI)

Die Connectordefinition steuert, wie der Verbinder im Microsoft Sentinel-Datenkonnektorkatalog angezeigt wird. Weitere Informationen finden Sie in der API-Referenz zu Datenkonnektordefinitionen.

Die Connectordefinition umfasst:

  • Connector Titel, Beschreibung und Branding
  • Erforderliche Voraussetzungen und Berechtigungen, z. B. Arbeitsbereichszugriff und Entra-Berechtigungen
  • Anleitungsschritte für die Bereitstellung
  • Benutzeroberflächensteuerelemente zum Anzeigen von Verbindungsdetails für Benutzer

Wichtige UI-Elemente:

  • DeployPushConnectorButton: Löst die automatisierte Ressourcenbereitstellung aus
  • CopyableLabel: Zeigt Verbindungsdetails nach der Bereitstellung an (verwendet fillWith Parameter)
  • Markdown: Stellt formatierte Anweisungen und Kontext bereit.
  • IsConnectedQuery: Überprüft die Verbindungskonnektivität basierend auf aktuellen Daten.

Beispielstruktur (gekürzt für Klarheit):

{
    "name": "ContosoSecurityAlertsPush",
    "apiVersion": "2022-09-01-preview",
    "type": "Microsoft.SecurityInsights/dataConnectorDefinitions",
    "location": "[parameters('workspace-location')]",
    "kind": "Customizable",
    "properties": {
        "connectorUiConfig": {
            "id": "ContosoSecurityAlertsPush",
            "title": "Contoso Security Alerts (Push)",
            "publisher": "Contoso Corporation",
            "descriptionMarkdown": "The [Contoso Security Alerts](https://www.contoso.com/) connector provides the capability to push real-time security alerts from your Contoso application directly into Microsoft Sentinel using the Codeless Connector Framework (CCF) Push pattern. This connector ingests alert severity, event types, user information, and network details into a custom Log Analytics table for analysis, alerting, and visualization.",
            "graphQueries": [
                {
                    "metricName": "Security Alerts",
                    "legend": "ContosoSecurityAlerts_CL",
                    "baseQuery": "ContosoSecurityAlerts_CL"
                }
            ],
            "sampleQueries": [
                {
                    "description": "All security alerts",
                    "query": "ContosoSecurityAlerts_CL\n | sort by TimeGenerated desc"
                },
                {
                    "description": "Critical and High severity alerts",
                    "query": "ContosoSecurityAlerts_CL\n | where EventSeverity in ('Critical', 'High')\n | sort by TimeGenerated desc"
                }
            ],
            "dataTypes": [
                {
                    "name": "ContosoSecurityAlerts_CL",
                    "lastDataReceivedQuery": "ContosoSecurityAlerts_CL\n| summarize Time = max(TimeGenerated)\n| where isnotempty(Time)"
                }
            ],
            "connectivityCriteria": [
                {
                    "type": "IsConnectedQuery",
                    "value": [
                        "ContosoSecurityAlerts_CL\n| summarize LastLogReceived = max(TimeGenerated)\n| project IsConnected = LastLogReceived > ago(7d)"
                    ]
                }
            ],
            "availability": {
                "status": 1
            },
            "permissions": {
                "resourceProvider": [
                    {
                        "provider": "Microsoft.OperationalInsights/workspaces",
                        "permissionsDisplayText": "read and write permissions are required.",
                        "providerDisplayName": "Workspace",
                        "scope": "Workspace",
                        "requiredPermissions": {
                            "write": true,
                            "read": true,
                            "delete": true
                        }
                    }
                ],
                "customs": [
                    {
                        "name": "Microsoft Entra",
                        "description": "Permission to create an app registration in Microsoft Entra ID. Typically requires Entra ID Application Developer role or higher."
                    },
                    {
                        "name": "Microsoft Azure",
                        "description": "Permission to assign Monitoring Metrics Publisher role on data collection rule (DCR). Typically requires Azure RBAC Owner or User Access Administrator role."
                    }
                ]
            },
            "instructionSteps": [
                {
                    "title": "1. Create ARM Resources and Provide the Required Permissions",
                    "description": "This connector enables your Contoso application to push security alerts directly to Microsoft Sentinel via the Azure Monitor Ingestion API.",
                    "instructions": [
                        {
                            "type": "Markdown",
                            "parameters": {
                                "content": "#### Automated Configuration and Secure Data Ingestion with Entra Application \nClicking on \"Deploy\" will trigger the creation of a Log Analytics table and a Data Collection Rule (DCR). \nIt will then create an Entra application, link the DCR to it, and set the entered secret in the application. This setup enables data to be sent securely to the DCR using an Entra token."
                            }
                        },
                        {
                            "type": "DeployPushConnectorButton",
                            "parameters": {
                                "label": "Deploy Contoso Push connector resources",
                                "applicationDisplayName": "Contoso Security Alerts Push Connector Application"
                            }
                        }
                    ]
                },
                {
                    "title": "2. Configure Your Contoso Application",
                    "description": "Use the following parameters to configure your Contoso application to push security alerts to the workspace.",
                    "instructions": [
                        {
                            "type": "CopyableLabel",
                            "parameters": {
                                "label": "Tenant ID (Directory ID)",
                                "fillWith": [
                                    "TenantId"
                                ]
                            }
                        },
                        {
                            "type": "CopyableLabel",
                            "parameters": {
                                "label": "Entra App Registration Application ID",
                                "fillWith": [
                                    "ApplicationId"
                                ],
                                "placeholder": "Deploy push connector to get the App Registration Application ID"
                            }
                        },
                        {
                            "type": "CopyableLabel",
                            "parameters": {
                                "label": "Entra App Registration Secret",
                                "fillWith": [
                                    "ApplicationSecret"
                                ],
                                "placeholder": "Deploy push connector to get the App Registration Secret"
                            }
                        },
                        {
                            "type": "CopyableLabel",
                            "parameters": {
                                "label": "Data Collection Endpoint Uri",
                                "fillWith": [
                                    "DataCollectionEndpoint"
                                ],
                                "placeholder": "Deploy push connector to get the Data Collection Endpoint Uri"
                            }
                        },
                        {
                            "type": "CopyableLabel",
                            "parameters": {
                                "label": "Data Collection Rule Immutable ID",
                                "fillWith": [
                                    "DataCollectionRuleId"
                                ],
                                "placeholder": "Deploy push connector to get the Data Collection Rule Immutable ID"
                            }
                        },
                        {
                            "type": "CopyableLabel",
                            "parameters": {
                                "label": "Stream Name",
                                "value": "Custom-ContosoSecurityAlerts"
                            }
                        },
                        {
                            "type": "Markdown",
                            "parameters": {
                                "content": "#### Configure Contoso Application\nUpdate your Contoso application configuration with the above credentials to enable security alert push to Microsoft Sentinel.\n\nExample configuration:\njson\n{\n \"azure\": {\n \"tenant_id\": \"<Tenant ID>\",\n \"client_id\": \"<Application ID>\",\n \"client_secret\": \"<Application Secret>\",\n \"dce_endpoint\": \"<Data Collection Endpoint Uri>\",\n \"dcr_immutable_id\": \"<Data Collection Rule Immutable ID>\",\n \"stream_name\": \"Custom-ContosoSecurityAlerts\"\n }\n}\n"
                            }
                        }
                    ]
                }
            ]
        }
    }
}

Important

  • Das id in connectorUiConfig muss eindeutig sein und mit den Referenzen in der Datenkonnektorkonfiguration übereinstimmen.
  • Verwenden Sie IsConnectedQuery für Produktions-Connectors (überprüft aktuelle Daten) oder hasDataConnectors für eine einfachere Überprüfung.
  • Die fillWith Parameter in CopyableLabel werden nach der Bereitstellung automatisch befüllt.
  • Feste Werte, z. B. der Datenstromname, verwenden den value Parameter anstelle von fillWith.

Konfiguration des Push-Connectors

Die Konfiguration des Pushconnectors ist die Datenkonnektorinstanz, die die Connectordefinition mit bereitgestellten Ressourcen verknüpft.

Die Konfiguration des Push-Connectors

  • Verknüpft die Connectordefinition (UI) mit der bereitgestellten DCR- und Entra-App.
  • Speichert Authentifizierungsdetails (App-ID, Dienstprinzipal-ID)
  • DCR-Konfiguration speichern (Endpoint, unveränderliche ID, Streamname)
  • Ermöglicht der Benutzeroberfläche das Abrufen und Anzeigen von Verbindungsdetails für Benutzer.

Wichtige Eigenschaften:

  • connectorDefinitionName: Muss mit der id Connector-Definition übereinstimmen
  • dcrConfig: Enthält DCR-Endpunkt, Regel-ID und Datenstromname
  • auth: Enthält die Entra-Anwendungs-ID und die Dienstprinzipal-ID.
  • kind: Muss für Push-Verbinder "Push" sein

Beispiel:

{
  "name": "ContosoSecurityAlertsPushDCR",
  "apiVersion": "2021-09-01-preview",
  "type": "Microsoft.Insights/dataCollectionRules",
  "location": "[parameters('workspace-location')]",
  "properties": {
    "streamDeclarations": {
      "Custom-ContosoSecurityAlerts": {
        "columns": [
          {
            "name": "EventSeverity",
            "type": "string"
          },
          {
            "name": "EventType",
            "type": "string"
          },
          {
            "name": "UserName",
            "type": "string"
          },
          {
            "name": "SourceIP",
            "type": "string"
          },
          {
            "name": "DeviceId",
            "type": "string"
          },
          {
            "name": "AlertMessage",
            "type": "string"
          }
        ]
      }
    },
    "destinations": {
      "logAnalytics": [
        {
          "workspaceResourceId": "[variables('workspaceResourceId')]",
          "name": "clv2ws1"
        }
      ]
    },
    "dataFlows": [
      {
        "streams": [
          "Custom-ContosoSecurityAlerts"
        ],
        "destinations": [
          "clv2ws1"
        ],
        "transformKql": "source | extend TimeGenerated = now()",
        "outputStream": "Custom-ContosoSecurityAlerts_CL"
      }
    ],
    "dataCollectionEndpointId": "[concat('/subscriptions/',parameters('subscription'),'/resourceGroups/',parameters('resourceGroupName'),'/providers/Microsoft.Insights/dataCollectionEndpoints/',parameters('workspace'))]"
  }
}

Important

  • Die connectorDefinitionName muss exakt mit der Verbinderdefinition id übereinstimmen.
  • Der streamName Datenstrom muss mit dem in Ihrem DCR deklarierten Datenstrom übereinstimmen.
  • Diese Ressource wird während der Bereitstellung automatisch erstellt, wenn Benutzer die Schaltfläche "DeployPushConnector " auswählen.

Erstellen Ihres ersten Pushconnectors

In diesem Beispiel erstellen Sie einen einfachen Pushconnector, der Sicherheitswarnungen von Ihrer Anwendung an Sentinel sendet.

Ziel: Senden von Sicherheitswarnungen aus Ihrer Anwendung in Echtzeit an Sentinel

Ihre Anwendung sendet die Ereignisstruktur:

{
  "TimeGenerated": "2025-11-21T10:30:00Z",
  "EventSeverity": "Medium",
  "EventType": "LoginAlert",
  "UserName": "alice@contoso.com",
  "SourceIP": "192.168.1.100",
  "DeviceId": "device-12345",
  "AlertMessage": "Multiple failed login attempts detected"
}

Schritt-für-Schritt-Anleitung zum Erstellen des Pushconnectors

  1. Klonen des Azure-Sentinel Repositorys

    Forken Sie das offizielle Azure-Sentinel-Repository und klonen Sie es anschließend auf Ihren lokalen Computer. Dieses Repository enthält die Verpackungstools und stellt die Standardlösungsstruktur bereit.

    1. Klonen des Repositorys
      git clone https://github.com/<YOUR_FORK>/Azure-Sentinel.git

    2. Navigieren Zum Verzeichnis "Lösungen" cd Azure-Sentinel/Solutions
      Die Repositorystruktur umfasst:

    • Tools/Create-Azure-Sentinel-Solution/V3/
    • Enthält das Skript zum Packen von createSolutionV3.ps1
    • Lösungen/ Wo Sie Ihre Connectorlösung erstellen
  2. Erstellen Sie die Verzeichnisstruktur für Ihre Lösung. Erstellen Sie ein neues Lösungsverzeichnis innerhalb des Lösungsverzeichnisses gemäß der Standardbenennungskonvention. Erstellen von Lösungsverzeichnissen (aus Azure-Sentinel/Solutions/)

    mkdir ContosoSecurityAlerts
    cd ContosoSecurityAlerts
    mkdir Data
    mkdir "Data Connectors"
    mkdir "Data Connectors/ContosoSecurityAlerts_ccf"
    

    Ihre Ordnerstruktur sieht wie folgt aus:

    Azure-Sentinel/
     └–– Lösungen/
        └–– ContosoSecurityAlerts/
            ├── Daten/
            └–– Daten-Connectoren/
                └–– ContosoSecurityAlerts_ccf/

  3. Definieren Sie Ihre Tabelle

    Erstellen Sie im Ordner ContosoSecurityAlerts_ccf eine Datei mit dem Namen table.json mit ihrer benutzerdefinierten Tabellendefinition:

    {
      "name": "ContosoSecurityAlerts_CL",
      "type": "Microsoft.OperationalInsights/workspaces/tables",
      "apiVersion": "2025-07-01",
      "properties": {
        "schema": {
          "name": "ContosoSecurityAlerts_CL",
          "columns": [
            {
              "name": "TimeGenerated",
              "type": "datetime"
            },
            {
              "name": "EventSeverity",
              "type": "string"
            },
            {
              "name": "EventType",
              "type": "string"
            },
            {
              "name": "UserName",
              "type": "string"
            },
            {
              "name": "SourceIP",
              "type": "string"
            },
            {
              "name": "DeviceId",
              "type": "string"
            },
            {
              "name": "AlertMessage",
              "type": "string"
            }
          ]
        }
      }
    }
    
  4. DCR erstellen

    Erstellen Sie im Ordner ContosoSecurityAlerts_ccf eine Datei mit dem Namen DCR.json, die den Eingabedatenstrom definiert, und leitet Daten an Ihre Tabelle weiter:

    {
      "name": "ContosoSecurityAlertsPushDCR",
      "apiVersion": "2021-09-01-preview",
      "type": "Microsoft.Insights/dataCollectionRules",
      "location": "[parameters('workspace-location')]",
      "properties": {
        "streamDeclarations": {
          "Custom-ContosoSecurityAlerts": {
            "columns": [
              {
                "name": "EventSeverity",
                "type": "string"
              },
              {
                "name": "EventType",
                "type": "string"
              },
              {
                "name": "UserName",
                "type": "string"
              },
              {
                "name": "SourceIP",
                "type": "string"
              },
              {
                "name": "DeviceId",
                "type": "string"
              },
              {
                "name": "AlertMessage",
                "type": "string"
              }
            ]
          }
        },
        "destinations": {
          "logAnalytics": [
            {
              "workspaceResourceId": "[variables('workspaceResourceId')]",
              "name": "clv2ws1"
            }
          ]
        },
        "dataFlows": [
          {
            "streams": [
              "Custom-ContosoSecurityAlerts"
            ],
            "destinations": [
              "clv2ws1"
            ],
            "transformKql": "source | extend TimeGenerated = now()",
            "outputStream": "Custom-ContosoSecurityAlerts_CL"
          }
        ],
        "dataCollectionEndpointId": "[concat('/subscriptions/',parameters('subscription'),'/resourceGroups/',parameters('resourceGroupName'),'/providers/Microsoft.Insights/    dataCollectionEndpoints/',parameters('workspace'))]"
      }
    }
    
  5. Erstellen der Connectordefinition

    Erstellen Sie im Ordner ContosoSecurityAlerts_ccf eine Datei mit dem Namen connectorDefinition.json, die definiert, wie Benutzer mit dem Connector in Sentinel interagieren:

    {
        "name": "ContosoSecurityAlertsPush",
        "apiVersion": "2022-09-01-preview",
        "type": "Microsoft.SecurityInsights/dataConnectorDefinitions",
        "location": "[parameters('workspace-location')]",
        "kind": "Customizable",
        "properties": {
            "connectorUiConfig": {
                "id": "ContosoSecurityAlertsPush",
                "title": "Contoso Security Alerts (Push)",
                "publisher": "Contoso Corporation",
                "descriptionMarkdown": "The [Contoso Security Alerts](https://www.contoso.com/) connector provides the capability to push real-time security alerts from your   Contoso application directly into Microsoft Sentinel using the Codeless Connector Framework (CCF) Push pattern. This connector ingests alert severity, event  types, user information, and network details into a custom Log Analytics table for analysis, alerting, and visualization.",
                "graphQueries": [
                    {
                        "metricName": "Security Alerts",
                        "legend": "ContosoSecurityAlerts_CL",
                        "baseQuery": "ContosoSecurityAlerts_CL"
                    }
                ],
                "sampleQueries": [
                    {
                        "description": "All security alerts",
                        "query": "ContosoSecurityAlerts_CL\n | sort by TimeGenerated desc"
                    },
                    {
                        "description": "Critical and High severity alerts",
                        "query": "ContosoSecurityAlerts_CL\n | where EventSeverity in ('Critical', 'High')\n | sort by TimeGenerated desc"
                    }
                ],
                "dataTypes": [
                    {
                        "name": "ContosoSecurityAlerts_CL",
                        "lastDataReceivedQuery": "ContosoSecurityAlerts_CL\n| summarize Time = max(TimeGenerated)\n| where isnotempty(Time)"
                    }
                ],
                "connectivityCriteria": [
                    {
                        "type": "IsConnectedQuery",
                        "value": [
                            "ContosoSecurityAlerts_CL\n| summarize LastLogReceived = max(TimeGenerated)\n| project IsConnected = LastLogReceived > ago(7d)"
                        ]
                    }
                ],
                "availability": {
                    "status": 1
                },
                "permissions": {
                    "resourceProvider": [
                        {
                            "provider": "Microsoft.OperationalInsights/workspaces",
                            "permissionsDisplayText": "read and write permissions are required.",
                            "providerDisplayName": "Workspace",
                            "scope": "Workspace",
                            "requiredPermissions": {
                                "write": true,
                                "read": true,
                                "delete": true
                            }
                        }
                    ],
                    "customs": [
                        {
                            "name": "Microsoft Entra",
                            "description": "Permission to create an app registration in Microsoft Entra ID. Typically requires Entra ID Application Developer role or higher."
                        },
                        {
                            "name": "Microsoft Azure",
                            "description": "Permission to assign Monitoring Metrics Publisher role on data collection rule (DCR). Typically requires Azure RBAC Owner or User   Access Administrator role."
                        }
                    ]
                },
                "instructionSteps": [
                    {
                        "title": "1. Create ARM Resources and Provide the Required Permissions",
                        "description": "This connector enables your Contoso application to push security alerts directly to Microsoft Sentinel via the Azure Monitor Ingestion  API.",
                        "instructions": [
                            {
                                "type": "Markdown",
                                "parameters": {
                                    "content": "#### Automated Configuration and Secure Data Ingestion with Entra Application \nClicking on \"Deploy\" will trigger the creation    of a Log Analytics table and a Data Collection Rule (DCR). \nIt will then create an Entra application, link the DCR to it, and set the     entered secret in the application. This setup enables data to be sent securely to the DCR using an Entra token."
                                }
                            },
                            {
                                "type": "DeployPushConnectorButton",
                                "parameters": {
                                    "label": "Deploy Contoso Push connector resources",
                                    "applicationDisplayName": "Contoso Security Alerts Push Connector Application"
                                }
                            }
                        ]
                    },
                    {
                        "title": "2. Configure Your Contoso Application",
                        "description": "Use the following parameters to configure your Contoso application to push security alerts to the workspace.",
                        "instructions": [
                            {
                                "type": "CopyableLabel",
                                "parameters": {
                                    "label": "Tenant ID (Directory ID)",
                                    "fillWith": [
                                        "TenantId"
                                    ]
                                }
                            },
                            {
                                "type": "CopyableLabel",
                                "parameters": {
                                    "label": "Entra App Registration Application ID",
                                    "fillWith": [
                                        "ApplicationId"
                                    ],
                                    "placeholder": "Deploy push connector to get the App Registration Application ID"
                                }
                            },
                            {
                                "type": "CopyableLabel",
                                "parameters": {
                                    "label": "Entra App Registration Secret",
                                    "fillWith": [
                                        "ApplicationSecret"
                                    ],
                                    "placeholder": "Deploy push connector to get the App Registration Secret"
                                }
                            },
                            {
                                "type": "CopyableLabel",
                                "parameters": {
                                    "label": "Data Collection Endpoint Uri",
                                    "fillWith": [
                                        "DataCollectionEndpoint"
                                    ],
                                    "placeholder": "Deploy push connector to get the Data Collection Endpoint Uri"
                                }
                            },
                            {
                                "type": "CopyableLabel",
                                "parameters": {
                                    "label": "Data Collection Rule Immutable ID",
                                    "fillWith": [
                                        "DataCollectionRuleId"
                                    ],
                                    "placeholder": "Deploy push connector to get the Data Collection Rule Immutable ID"
                                }
                            },
                            {
                                "type": "CopyableLabel",
                                "parameters": {
                                    "label": "Stream Name",
                                    "value": "Custom-ContosoSecurityAlerts"
                                }
                            },
                            {
                                "type": "Markdown",
                                "parameters": {
                                    "content": "#### Configure Contoso Application\nUpdate your Contoso application configuration with the above credentials to enable security     alert push to Microsoft Sentinel.\n\nExample configuration:\njson\n{\n \"azure\": {\n \"tenant_id\": \"<Tenant ID>\",\n \"client_id\":  \"<Application ID>\",\n \"client_secret\": \"<Application Secret>\",\n \"dce_endpoint\": \"<Data Collection Endpoint Uri>\",\n   \"dcr_immutable_id\": \"<Data Collection Rule Immutable ID>\",\n \"stream_name\": \"Custom-ContosoSecurityAlerts\"\n }\n}\n"
                                }
                            }
                        ]
                    }
                ]
            }
        }
    }
    
  6. Erstellen der Datenkonnektorkonfiguration

    Erstellen Sie im Ordner ContosoSecurityAlerts_ccf eine Datei mit dem Namen dataConnector.json, die die Connectordefinition mit den bereitgestellten Ressourcen verknüpft:

    {
      "name": "ContosoSecurityAlertsPushConnectorPolling",
      "apiVersion": "2024-09-01",
      "type": "Microsoft.SecurityInsights/dataConnectors",
      "kind": "Push",
      "properties": {
        "connectorDefinitionName": "ContosoSecurityAlertsPush",
        "dcrConfig": {
          "streamName": "Custom-ContosoSecurityAlerts",
          "dataCollectionEndpoint": "[[parameters('dcrConfig').dataCollectionEndpoint]",
          "dataCollectionRuleImmutableId": "[[parameters('dcrConfig').dataCollectionRuleImmutableId]"
        },
        "auth": {
          "type": "Push",
          "AppId": "[[parameters('auth').appId]",
          "ServicePrincipalId": "[[parameters('auth').servicePrincipalId]"
        },
        "request": {
          "RetryCount": 1
        },
        "response": {
          "eventsJsonPaths": [
            "$"
          ]
        }
      }
    }
    
  7. Erstellen von Lösungsmetadatendateien

    1. Solution_ContosoSecurityAlerts.json Erstellen Sie Solution_ContosoSecurityAlerts.json im Ordner "Daten" Ihre Lösungsdetails:

      {
           "Name": "ContosoSecurityAlerts",
           "Author": "Contoso Corporation - support@contoso.com",
           "Logo": "<svg width=\"75px\" height=\"75px\" viewBox=\"0 0 75 75\" xmlns=\"http://www.w3.org/2000/svg\"><rect width=\"75\" height=\"75\" fill=\"#FF6B35\"/><text   x=\"37.   5\" y=\"45\" font-family=\"Arial\" font-size=\"18\" fill=\"white\" text-anchor=\"middle\" font-weight=\"bold\">CONTOSO</text></svg>",
           "Description": "The Contoso Security Alerts solution provides real-time security alert ingestion from your Contoso application into Microsoft Sentinel using the       Codeless Connector Framework (CCF) Push pattern. Your application pushes alert severity, event types, user information, and network details directly to Azure   Monitor     for analysis, alerting, and visualization.",
           "Data Connectors": [
                "Data Connectors/ContosoSecurityAlerts_ccf/connectorDefinition.json"
           ],
           "BasePath": "C:\\GitHub\\Azure-Sentinel\\Solutions\\ContosoSecurityAlerts",
           "Version": "1.0.0",
           "Metadata": "SolutionMetadata.json",
           "TemplateSpec": true,
           "Is1PConnector": false
      }
      

      Important

      Kritische Feldanforderungen:

      • BasePath: Aktualisieren Sie den tatsächlichen lokalen Pfad zum Azure-Sentinel Repository.
      • Metadata: Muss SolutionMetadata.json referenzieren (erstellt in Schritt 6B)
      • Version: Semantische Versionsverwaltung, z. B. 3.0.0
      • TemplateSpec: Immer true für Lösungen des Content Hubs
      • Is1Pconnector: Auf false für Partner- oder benutzerdefinierte Konnektoren einstellen
    2. Erstellen von SolutionMetadata.json im Lösungsstamm

      Erstellen Sie im Ordner "ContosoSecurityAlerts" SolutionMetadata.json im Stammverzeichnis der Lösung (dieselbe Ebene wie der Ordner "Daten"):

      {
        "publisherId": "contoso",
        "offerId": "contoso-security-alerts",
        "firstPublishDate": "2025-01-01",
        "lastPublishDate": "2025-01-01",
        "providers": [
           "Contoso"
        ],
        "categories": {
           "domains": [
              "Security - Threat Protection",
              "Security - Cloud Security"
           ]
        },
        "support": {
           "name": "Contoso Corporation",
           "tier": "Partner",
           "link": "https://www.contoso.com/support"
        }
      }
      

      Sie benötigen die datei SolutionMetadata.json für die Inhaltshub-Verpackung:

      • Das Verpackungstool erwartet diese Datei im Lösungsstamm.
      • Es enthält Marketplace-Metadaten für die Content Hub-Verteilung
    3. Erstelle ReleaseNotes.md im Lösungsstamm

      Version Änderungsdatum (DD-MM-YYYY) Änderungsverlauf
      3.0.0 DD-MM-YYYY Beispiellösung

    Überprüfungsprüfliste

    Bevor Sie mit dem nächsten Schritt fortfahren, überprüfen Sie Folgendes:

    • Der Ordnername weist keine Leerzeichen auf, z. B. ContosoSecurityAlerts
    • Name Feld in Solution_ContosoSecurityAlerts.json entspricht dem Ordnernamen genau
    • SolutionMetadata.json ist im Lösungsstamm vorhanden (nicht im Datenordner)
    • BasePath verweist auf Ihren tatsächlichen lokalen Azure-Sentinel Repositorypfad
    • Metadata Das Feld verweist auf "SolutionMetadata.json"
    • publisherId und offerId stimmen zwischen beiden Dateien überein
  8. Überprüfen der Lösungsstruktur

    Vergewissern Sie sich, dass die Ordnerstruktur mit dem erforderlichen Layout mit allen Dateien übereinstimmt:

    Azure-Sentinel/
    └── Solutions/
         └── ContosoSecurityAlerts/                         Folder name (no spaces)
              ├── Data/
              │   └── Solution_ContosoSecurityAlerts.json    From Step 7A
              ├── SolutionMetadata.json                      From Step 7B (at root)
              ├── ReleaseNotes.md                            From Step 7C
              └── Data Connectors/
                    └── ContosoSecurityAlerts_ccf/
                         ├── table.json                         From Step 3
                         ├── DCR.json                           From Step 4
                         ├── connectorDefinition.json           From Step 5
                         └── dataConnector.json                 From Step 6
    
  9. Verpacken Sie Ihre Lösung

    Verwenden Sie das createSolutionV3.ps1 Paketierungstool, um die ARM-Bereitstellungsvorlage zu generieren.

    # Navigate to the packaging tools directory (from Azure-Sentinel repository root)
    cd Tools/Create-Azure-Sentinel-Solution/V3
    
    # Run the packaging tool
    # When prompted for "Enter solution data folder path:", provide:
    # <REPO_ROOT>Solutions/ContosoSecurityAlerts/Data (Note! This path is absolute)
    .\createSolutionV3.ps1
    

    Das Skript erledigt automatisch:

    • Überprüft Die Daten-/Ordnerstruktur
    • Verarbeitet Connectorartefakte

    Erwartete Ausgabe:

    Das Paketskript zeigt eine fehlgeschlagene Arm-TTK-Überprüfung (Azure Resource Manager Template Toolkit). Dieser Fehler wird für CCF-Push-Connectors erwartet und ist normal.

    Failed arm-ttk (Test-AzTemplate): Package
    Failed arm-ttk (Test-AzTemplate) on solutions: Package
    ************Validating if Package Json files are valid or not***************
    File Solutions\ContosoSecurityAlerts\Package\createUiDefinition.json is a valid Json file!
    File Solutions\ContosoSecurityAlerts\Package\mainTemplate.json is a valid Json file!
    File Solutions\ContosoSecurityAlerts\Package\testParameters.json is a valid Json file!
    

    Die Verpackung war erfolgreich, wenn die drei JSON-Überprüfungsmeldungen angezeigt werden, die gültige Dateien bestätigen. Sie können den arm-ttk Fehler für CCF-Pushconnectors ignorieren.

    Weitere Informationen finden Sie in der Dokumentation zuAzure-Sentinel Solutions Tools.

  10. Bereitstellen des Lösungspakets

    Stellen Sie die generierte ARM-Vorlage (Package/mainTemplate.json) in Ihrem Azure-Abonnement bereit.

    1. Suchen Sie im Azure-Portal nach "Bereitstellen einer benutzerdefinierten Vorlage".
    2. Wählen Sie im Editor "Eigene Vorlage erstellen" aus.
    3. Wählen Sie "Datei laden" und wählen Sie Package/mainTemplate.json aus Ihrem Ausgabeordner aus.
    4. Wählen Sie "Speichern" aus.
    5. Füllen Sie die Bereitstellungsparameter aus:
      • Abonnement: Ihr Azure-Abonnement
      • Ressourcengruppe: Die Ressourcengruppe, die Ihren Sentinel-Arbeitsbereich enthält
      • Region: Dieselbe Region wie Ihr Sentinel-Arbeitsbereich
      • Arbeitsbereich: Name des Log Analytics-Arbeitsbereichs
    6. Wählen Sie "Überprüfen" und "Erstellen" und dann "Erstellen" aus.

    Diese Bereitstellung macht den Connector in Ihrer Microsoft Sentinel Datenconnector-Galerie verfügbar.

    Ausführliche Schritte finden Sie unter [Schnellstart: Erstellen und Bereitstellen von ARM-Vorlagen mithilfe des Azure-Portals](/azure/azure-resource-manager/templates/quickstart-create-templates-use-the-portal).

  11. Aktivieren des Datenconnectors

    Aktivieren Sie nach der Bereitstellung des Lösungspakets den Connector, um Ressourcen bereitzustellen und Anmeldeinformationen zu generieren.

    1. Navigieren Sie im Azure-Portal zu Ihrem Microsoft Sentinel-Arbeitsbereich
    2. Wechseln Sie zu Konfiguration>Datenkonnektoren
    3. Suchen und Auswählen von Contoso-Sicherheitswarnungen (Push)
    4. Seite Connector-Seite öffnen auswählen
    5. Wählen Sie die Connectorschaltfläche "Contoso-Sicherheitswarnungen bereitstellen" aus .
    6. Warten Sie, bis die Bereitstellung abgeschlossen ist (erstellt benutzerdefinierte Tabelle, DCR, DCE, Entra-Anwendung mit Anmeldeinformationen)
    7. Kopieren Sie die angezeigten Verbindungsdetails:
      • Mieter-ID
      • Anwendungs-ID (Client)
      • Geheimer Clientschlüssel
      • Endpunkt-URI der Datensammlung
      • Unveränderliche ID der Datensammlungsregel
      • Stream-Name: Custom-ContosoSecurityAlerts
  12. Konfigurieren Ihrer Anwendung

    Aktualisieren Sie Den Anwendungscode mit den Anmeldeinformationen und Ressourcendetails aus Schritt 10. Der Code verwendet den OAuth 2.0-Clientanmeldeinformationsfluss, um sich bei Azure Monitor zu authentifizieren.

    Caution

    Schützen Sie Ihre Anmeldeinformationen: Hinterlegen Sie Anmeldeinformationen (Mandanten-ID, Anwendungs-ID, geheimer Clientschlüssel) niemals fest im Code Ihrer Anwendung oder checken Sie sie in die Versionskontrolle ein. Verwenden Sie sichere Speicherlösungen für Anmeldeinformationen, z. B.:

    • Azure Key Vault für Produktionsanwendungen
    • Umgebungsvariablen oder Konfigurationsdateien (von der Quellcodeverwaltung ausgeschlossen)
    • Verwaltete Identitäten, sofern zutreffend
    • Tools zur Verwaltung geheimer Daten, die Anmeldeinformationen im Ruhezustand verschlüsseln

    Python-Beispielanwendungscode:

    Im folgenden Beispiel werden Platzhalterwerte wie <Ihre Mandanten-ID> verwendet. Ersetzen Sie diese Werte durch sichere Verweise auf Ihre tatsächlichen Anmeldeinformationen.

    import requests
    import json
    from datetime import datetime, timezone
    
    # Connection details from Step 11
    
    tenant_id = "<Your-Tenant-ID>"
    app_id = "<Your-Application-ID>"
    app_secret = "<Your-Client-Secret>"
    dce_uri = "<Your-DCE-URI>"
    dcr_immutable_id = "<Your-DCR-Immutable-ID>"
    stream_name = "Custom-ContosoSecurityAlerts"
    
    
    **Get OAuth token**
    
    token_url = f"https://login.microsoftonline.com/{tenant_id}/oauth2/v2.0/token"
    token_data = {
         "client_id": app_id,
         "scope": "https://monitor.azure.com//.default",
         "client_secret": app_secret,
         "grant_type": "client_credentials"
    }
    token_response = requests.post(token_url, data=token_data)
    access_token = token_response.json()["access_token"]
    
    
    # Create event matching your table schema
    
    event = [{
         "TimeGenerated": datetime.now(timezone.utc).isoformat(),
         "EventSeverity": "Medium",
         "EventType": "LoginAlert",
         "UserName": "alice@contoso.com",
         "SourceIP": "192.168.1.100",
         "DeviceId": "device-12345",
         "AlertMessage": "Multiple failed login attempts detected"
    }]
    
    
    # Send to Sentinel
    
    headers = {
         "Authorization": f"Bearer {access_token}",
         "Content-Type": "application/json"
    }
    upload_url = f"{dce_uri}/dataCollectionRules/{dcr_immutable_id}/streams/{stream_name}?api-version=2023-01-01"
    response = requests.post(upload_url, headers=headers, json=event)
    
    print(f"Status: {response.status_code}")
    print("Security alert sent to Sentinel!")
    
  13. Abfragen Ihrer Daten

    Nach dem Senden von Warnungen in Sentinel abfragen. 5-10 Minuten für die erste Aufnahme zulassen.

    // View all recent alerts
    ContosoSecurityAlerts_CL
    | where TimeGenerated > ago(1h)
    | order by TimeGenerated desc
    
    // High severity alerts
    ContosoSecurityAlerts_CL
    | where EventSeverity == "High"
    | project TimeGenerated, EventType, UserName, SourceIP, AlertMessage
    
    // Alert summary by severity
    ContosoSecurityAlerts_CL
    | where TimeGenerated > ago(7d)
    | summarize Count=count() by EventSeverity
    

Nachdem Sie sich nun mit CCF-Push-Konnektoren auskennen, gehen Sie nun wie folgt vor:

  1. Entwerfen Sie Ihr Datenschema – Identifizieren Sie die Ereignisse, die Sie senden möchten, und deren Felder.
  2. Erstellen Von Connectorartefakten – Erstellen Sie die vier JSON-Dateien (Tabelle, DCR, Connectordefinition, Datenconnector).
  3. Struktur der Lösung organisieren – Einrichten von Daten/- und Daten-Connectors/Ordnern mit der richtigen Benennung.
  4. Packen Sie Ihre Lösung – Verwenden Sie createSolutionV3.ps1 zum Generieren von Bereitstellungsvorlagen.
  5. Bereitstellen und Testen – Bereitstellen in Ihrem Sentinel-Arbeitsbereich und Überprüfen des Datenflusses.
  6. Integration in Ihre Anwendung – Fügen Sie Code zum Senden von Ereignissen in Echtzeit hinzu.
  7. Erstellen von Warnungen und Arbeitsmappen – Verwenden Sie Ihre Daten für die Sicherheitsüberwachung.

Weitere Ressourcen

CCF-Dokumentation

Azure Monitor und Datensammlung

Authentifizierung und Sicherheit

Microsoft Sentinel

Hilfe erhalten

  • Für ISV-Partner, die Integrationen erstellen, wenden Sie sich an: azuresentinelpartner@microsoft.com
  • Für technische Fragen verwenden Sie Microsoft Q&A mit dem Tag "azure-sentinel".