Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Den här guiden hjälper dig att förstå, skapa och distribuera push-baserade kodlösa anslutningsappar för Microsoft Sentinel med hjälp av CCF-push (Codeless Connector Framework) (förhandsversion).
Vad är CCF-push?
MED CCF Push-anslutningsappar kan dina program skicka säkerhetshändelser direkt till Microsoft Sentinel i realtid. Till skillnad från traditionella avsökningsbaserade anslutningsappar som regelbundet hämtar data från API:er kan du med push-anslutningsappar skicka data till Sentinel när händelser inträffar i systemet.
CCF Push ger flera viktiga fördelar:
- Programkontrollerat dataflöde: Ditt program styr när och hur du skickar data, aktiverar intelligenta batchbearbetningsstrategier och optimerad nätverksanvändning.
- Inmatning i realtid: Skicka data omedelbart när händelser inträffar, utan att vänta på avsökningsintervall.
- Förenklad arkitektur: Du behöver inte underhålla API-slutpunkter för att Sentinel ska kunna avsöka.
- Mallbaserad etablering: Distributionen skapar ARM-mallar för DOMÄNKONTROLLanter, anpassade tabeller, Entra-programregistrering och klienthemligheter – du får anslutningsinformationen som ska konfigureras i ditt sändande program.
- Säker autentisering: Använder Microsoft Entra-program med OAuth 2.0 för säker dataöverföring.
Förutsättningar
- Innan du börjar måste du ha åtkomst till Azure-Sentinel GitHub-lagringsplats för paketeringsverktyg.
- Microsoft Entra-behörigheter:
- Behörighet att skapa en appregistrering i Microsoft Entra-ID. Kräver vanligtvis rollen Entra ID Application Developer eller högre behörighet.
- Behörighet att skapa ett program med hemligheter. Om du inte beviljar den här behörigheten misslyckas anslutningsappen på grund av säkerhetsskäl.
- Utgivaren måste ha rätt roll för att hämta token från Microsoft Entra-programmet. Dessa token krävs för att autentisera begäranden till datainsamlingsslutpunkten (DCE), som är slutpunkten där anslutningsappen slutligen push-överför sina data. Om providern inte kan hämta token kan data inte skickas till DCE.
- Microsoft Azure-behörigheter:
- Behörighet att tilldela rollen "Monitoring Metrics Publisher" på en datainsamlingsregel (DCR). Kräver vanligtvis rollen Azure RBAC-ägare eller Användaråtkomstadministratör.
Så här fungerar CCF-push
Push-modellen jämfört med pull-modellen
Genom att förstå skillnaden mellan push- och pull-datainmatningsmodeller kan du välja rätt anslutningstyp för ditt scenario.
CCF-dragkontakter – avsökningsbaserade:
I pull-modellen avsöker Microsoft Sentinel regelbundet ditt API för att hämta data:
- Microsoft Sentinel initierar anslutningar till datakällans API enligt ett konfigurerat schema.
- Data anländer med regelbundna avsökningsintervall, till exempel var femte minut.
- Du måste ha en offentligt tillgänglig API-slutpunkt.
- Sentinels avsökningsinfrastruktur hanterar datainsamlingsprocessen.
CCF-push-kontakter – händelsedrivna:
I push-modellen skickar ditt program data direkt till Microsoft Sentinel:
- Ditt program initierar dataöverföring när händelser inträffar.
- Data kommer nästan i realtid när händelser genereras.
- Du behöver inte underhålla en API-slutpunkt.
- Ditt program styr batchbearbetning, tidsoptimering och dataflödesoptimering.
Push-dataflödet
CCF-pushdataflödet består av fem huvudsteg:
Du distribuerar anslutningsappen i Microsoft Sentinel.
Azure skapar automatiskt följande resurser:
- Microsoft Entra-program med autentiseringsuppgifter
- Datainsamlingsregel (DCR) – definierar hur du bearbetar dina data
- Datainsamlingsslutpunkt (DCE) – URL:en där du skickar data
- Anpassad loggtabell – där dina data lagras
- Rolltilldelningar – behörigheter för Entra-appen
Du får följande anslutningsinformation:
- Hyresgästens ID
- Program-ID (klient)
- Klienthemlighet
- DCE-URI (slutpunkts-URL)
- DCR Oföränderligt ID
- Strömnamn
Programmet skickar följande data:
- Hämtar en OAuth 2.0-token med ccf-genererade Entra-appautentiseringsuppgifter. Mer information finns i OAuth 2.0-flödet för klientautentiseringsuppgifter
- Formaterar händelser som JSON som matchar tabellschemat
- POST-data till DCE-slutpunkten
Azure bearbetar och lagrar data:
- DCR:er transformerar data (valfria KQL-transformeringar)
- Data skrivs till den anpassade tabellen i Log Analytics
- Data är tillgängliga för frågor, analyser och aviseringar i Sentinel
CCF-pushartefakter
En CCF Push-anslutningslösning består av fyra huvudkomponenter:
- Definition av anpassad tabell
- Datainsamlingsregel (DCR)
- Anslutningsdefinition (användargränssnitt)
- Konfiguration av push-kopplare
Definition av anpassad tabell
Vad det är: Schemat som definierar strukturen för dina data i Log Analytics.
Viktiga krav:
- Tabellnamnet måste sluta med
_CL(anpassat loggsuffix). - Måste innehålla en
TimeGeneratedkolumn (datetime-typ). - Kolumntyper: sträng, int, lång, verklig, bool, datetime, dynamisk, guid.
- Använd API-version
2025-07-01eller senare. - Mer information finns i Skapa en anpassad tabell i Azure Monitor-loggar.
Ett exempel:
{
"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"
}
]
}
}
}
Datainsamlingsregel (DCR)
Vad det är: Definierar hur Azure Monitor matar in och bearbetar dina data. Mer information finns i Datainsamlingsregler i Azure Monitor.
Vad den gör:
- Anger namnet på indataströmmen (vad din app använder när data skickas)
- Definierar valfria KQL-transformeringar för att forma och berika data
- Dirigerar data till måltabellen
- Länkar till datainsamlingens slutpunkt (DCE)
Viktiga komponenter:
-
streamDeclarations: Definierar strukturen för inkommande data (måste matcha vad din app skickar) -
destinations: Vart data hamnar (din Log Analytics-arbetsyta) -
dataFlows: Transformeringspipelinen från indataström till utdatatabell -
dataCollectionEndpointId: Länkar till DCE för datainmatning
Ett exempel:
{
"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
- Stream-namnet måste börja med
Custom-prefixet. -
transformKqlKan vara helt enkelt"source"för direktströmning eller inkludera KQL-logik för datatransformering. -
outputStreammåste matcha tabellnamnet medCustom-prefixet och_CLsuffixet.
Anslutningsdefinition (användargränssnitt)
Anslutningsdefinitionen styr hur anslutningen visas i Microsoft Sentinel-galleriet för datakontakter. Mer information finns i API-referensen för dataanslutningsdefinitioner.
Anslutningsdefinitionen innehåller:
- Titel, beskrivning och varumärkesprofil för anslutningskomponenten
- Krav och behörigheter som krävs, till exempel åtkomst till arbetsytor och Entra-behörigheter
- Instruktionssteg för distribution
- Användargränssnittskontroller för att visa anslutningsinformation för användare
Viktiga gränssnittselement:
-
DeployPushConnectorButton: Utlöser automatiserad resursdistribution -
CopyableLabel: Visar anslutningsinformation efter distributionen (använderfillWithparameter) -
Markdown: Tillhandahåller formaterade instruktioner och kontext -
IsConnectedQuery: Validerar anslutningens anslutbarhet baserat på senaste data
Exempelstruktur (förkortad för tydlighetens skull):
{
"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
- Den
idiconnectorUiConfigmåste vara unikt och matcha referenser i konfigurationen av datakopplaren. - Använd
IsConnectedQueryför produktionsanslutningar (validerar nyligen använda data) ellerhasDataConnectorsför enklare validering. - Parametrarna
fillWithiCopyableLabelfylls i automatiskt efter distributionen. - Fasta värden, till exempel streamnamn, använder parametern
valuei stället förfillWith.
Konfiguration av push-anslutning
Konfigurationen av push-anslutningsappen är den instans av dataanslutningsappen som länkar anslutningsdefinitionen till distribuerade resurser.
Konfigurationen av push-anslutningen
- Länkar anslutningsdefinitionen (UI) till den distribuerade DCR- och Entra-appen
- Lagrar autentiseringsinformation (app-ID, tjänstens huvudnamns-ID)
- Registrerar DCR-konfiguration (slutpunkt, oföränderligt ID, streamnamn)
- Gör att användargränssnittet kan hämta och visa anslutningsinformation för användare
Viktiga egenskaper:
-
connectorDefinitionName: Måste matchaidi din anslutningsdefinition -
dcrConfig: Innehåller DCR-slutpunkt, regel-ID och streamnamn -
auth: Innehåller Entra-program-ID:t och tjänstens huvudnamns-ID -
kind: Måste vara "Push" för push-kontakter
Exempel:
{
"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
-
connectorDefinitionNamemåste exakt matcha anslutningsdefinitionensid. -
streamNamemåste matcha strömmen som deklarerats i din DCR. - Den här resursen skapas automatiskt under distributionen när användarna väljer knappen DeployPushConnector .
Skapa din första push-anslutning
I det här exemplet skapar du en enkel push-anslutningsapp som skickar säkerhetsaviseringar från ditt program till Sentinel.
Mål: Skicka säkerhetsaviseringar från ditt program till Sentinel i realtid
Ditt program skickar händelsestrukturen:
{
"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"
}
Steg-för-steg-guide för att skapa pushanslutning
Klona Azure-Sentinel-lagringsplatsen
Gör en fork av den officiella Azure-Sentinel-repositoryn och klona den till din lokala dator. Den här lagringsplatsen innehåller paketeringsverktygen och tillhandahåller standardlösningsstrukturen.
Klona lagringsplatsen
git clone https://github.com/<YOUR_FORK>/Azure-Sentinel.gitGå till katalogen Lösningar
cd Azure-Sentinel/Solutions
Lagringsplatsens struktur innehåller:
- Verktyg/Create-Azure-Sentinel-Solution/V3/
- Innehåller createSolutionV3.ps1 paketeringsskript
- Lösningar/ Var du ska skapa anslutningslösningen
Skapa din lösningsmappstruktur Skapa en ny lösningskatalog i mappen Lösningar/efter den vanliga namngivningskonventionen. Skapa lösningskataloger (från Azure-Sentinel/Solutions/)
mkdir ContosoSecurityAlerts cd ContosoSecurityAlerts mkdir Data mkdir "Data Connectors" mkdir "Data Connectors/ContosoSecurityAlerts_ccf"Mappstrukturen ser ut så här:
Azure-Sentinel/
└--lösningar/
└-- ContosoSecurityAlerts/
Data/
└-- dataanslutningar/
└-ContosoSecurityAlerts_ccf/Definiera tabellen
I mappen ContosoSecurityAlerts_ccf skapar du en fil med namnet table.json med din anpassade tabelldefinition:
{ "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" } ] } } }Skapa DCR
I mappen ContosoSecurityAlerts_ccf skapar du en fil med namnet DCR.json som definierar indataströmmen och dirigerar data till tabellen:
{ "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'))]" } }Skapa anslutningsdefinitionen
I mappen ContosoSecurityAlerts_ccf skapar du en fil med namnet connectorDefinition.json som definierar hur användare interagerar med anslutningsappen i Sentinel:
{ "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" } } ] } ] } } }Skapa konfigurationen av dataanslutningsappen
I mappen ContosoSecurityAlerts_ccf skapar du en fil med namnet dataConnector.json som länkar anslutningsdefinitionen till de distribuerade resurserna:
{ "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": [ "$" ] } } }Skapa metadatafiler för lösningen
Solution_ContosoSecurityAlerts.json I mappen Data skapar
Solution_ContosoSecurityAlerts.jsondu med din lösningsinformation:{ "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
Kritiska fältkrav:
-
BasePath: Uppdatera till din faktiska lokala sökväg till Azure-Sentinel-lagringsplatsen -
Metadata: Måste refereraSolutionMetadata.json(skapas i steg 6B) -
Version: Semantisk versionshantering, till exempel3.0.0 -
TemplateSpec: Alltidtrueför Content Hub-lösningar -
Is1Pconnector: Ange tillfalseför partner-/anpassade anslutningar
-
Skapa SolutionMetadata.json i lösningsroten
I mappen ContosoSecurityAlerts skapar du SolutionMetadata.json i lösningens rotkatalog (på samma nivå som datamappen):
{ "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" } }Du behöver SolutionMetadata.json-filen för Content Hub-paketering:
- Paketeringsverktyget förväntar sig den här filen i lösningsroten
- Den innehåller marketplace-metadata för Content Hub-distribution
Skapa ReleaseNotes.md i lösningsroten
Version Ändrad datum (DD–MM-YYYY) Ändringshistorik 3.0.0 DD –MM-YYYY Exempellösning
Checklista för verifiering
Kontrollera följande innan du fortsätter till nästa steg:
- Mappnamnet är utan blanksteg, till exempel
ContosoSecurityAlerts -
Namefältet i Solution_ContosoSecurityAlerts.json matchar mappnamnet exakt -
SolutionMetadata.jsonfinns vid lösningsroten (inte i datamappen) -
BasePathpekar på din faktiska lokala sökväg till Azure-Sentinel lagringsplats -
Metadatafältreferenser "SolutionMetadata.json" -
publisherIdochofferIdmatchar i båda filerna
Verifiera din lösningsstruktur
Kontrollera att mappstrukturen matchar den layout som krävs med alla filer på plats:
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 6Paketera din lösning
Använd createSolutionV3.ps1 paketeringsverktyget för att generera ARM-distributionsmallen.
# 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.ps1Skriptet automatiskt:
- Verifierar din data-/mappstruktur
- Bearbetar anslutningsartefakter
Förväntade utdata:
Paketeringsskriptet visar en misslyckad arm-ttk-validering (Azure Resource Manager Template Toolkit). Detta fel är förväntat och normalt för CCF Push-anslutningskontakter.
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!Paketeringen lyckades om du ser de tre JSON-valideringsmeddelandena som bekräftar giltiga filer. Du kan ignorera
arm-ttk-felet för CCF Push-anslutningar.Mer information finns i dokumentationen omAzure-Sentinel Solutions Tools.
Distribuera lösningspaketet
Distribuera den genererade ARM-mallen (Package/mainTemplate.json) till din Azure-prenumeration.
- I Azure-portalen söker du efter Distribuera en anpassad mall
- Välj Skapa en egen mall i redigeraren
- Välj Läs in fil och välj
Package/mainTemplate.jsonfrån utdatamappen - Välj Spara
- Fyll i distributionsparametrarna:
- Prenumeration: Din Azure-prenumeration
- Resursgrupp: Resursgruppen som innehåller din Sentinel-arbetsyta
- Regionen: Samma region som din Sentinel-arbetsyta
- Arbetsytan: Namnet på Log Analytics-arbetsytan
- Välj Granska + skapa och sedan Skapa
Den här distributionen gör anslutningsappen tillgänglig i galleriet för Microsoft Sentinel-dataanslutningar.
Detaljerade steg finns i [Snabbstart: Skapa och distribuera ARM-mallar med hjälp av Azure-portalen](/azure/azure-resource-manager/templates/quickstart-create-templates-use-the-portal).
Aktivera dataanslutningsappen
När du har distribuerat lösningspaketet aktiverar du anslutningsappen för att etablera resurser och generera autentiseringsuppgifter.
- I Azure-portalen navigerar du till din Microsoft Sentinel-arbetsyta
- Gå till Konfiguration>Datakopplingar
- Sök efter och välj Contosos säkerhetsaviseringar (push)
- Välj Öppna anslutningssida
- Välj knappen Distribuera Contoso Security Alerts-anslutning
- Vänta tills distributionen har slutförts (skapar anpassad tabell, DCR, DCE, Entra-program med autentiseringsuppgifter)
- Kopiera anslutningsinformationen som visas:
- Hyresgästens ID
- Program-ID (klient)
- Klienthemlighet
- Slutpunkts-URI för datainsamling
- Datainsamlingsregel oföränderligt ID
- Stream-namn:
Custom-ContosoSecurityAlerts
Konfigurera ditt program
Uppdatera programkoden med autentiseringsuppgifterna och resursinformationen från steg 10. Koden använder OAuth 2.0-klientens autentiseringsuppgifter för att autentisera med Azure Monitor.
Caution
Skydda dina inloggningsuppgifter: Hårdkoda aldrig inloggningsuppgifter (klient-ID, applikations-ID, klienthemlighet) direkt i programkoden eller komma dem till källkontroll. Använd säkra lagringslösningar för autentiseringsuppgifter, till exempel:
- Azure Key Vault för produktionsprogram
- Miljövariabler eller konfigurationsfiler (undantagna från källkontroll)
- Hanterade identiteter där så är tillämpligt
- Hanteringsverktyg för hemligheter som krypterar autentiseringsuppgifter i vila
Python Exempelprogramkod:
I följande exempel används platshållarvärden som <Ditt Tenant-ID>. Ersätt dessa värden med säkra referenser till dina faktiska autentiseringsuppgifter.
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!")Fråga efter dina data
När du har skickat aviseringar frågar du i Sentinel. Tillåt 5–10 minuter för första inmatningen.
// 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
Relaterat innehåll
Nu när du förstår CCF Push-anslutningar, följ dessa steg:
- Utforma dataschemat – Identifiera de händelser som du vill skicka och deras fält.
- Skapa anslutningsartefakter – Skapa de fyra JSON-filerna (tabell, DCR, anslutningsdefinition, dataanslutning).
- Organisera lösningsstrukturen – Konfigurera data- och dataanslutningsappar/mappar med rätt namngivning.
-
Paketera din lösning – Använd
createSolutionV3.ps1för att generera distributionsmallar. - Distribuera och testa – Distribuera till din Sentinel-arbetsyta och verifiera dataflödet.
- Integrera med ditt program – Lägg till kod för att skicka händelser i realtid.
- Skapa aviseringar och arbetsböcker – Använd dina data för säkerhetsövervakning.
Ytterligare resurser
CCF-dokumentation
- Skapa en kodlös anslutare (CCF Pull) – Pollningsbaserade anslutare.
- API-referens för dataanslutningsdefinitioner – konfigurationsguide för användargränssnittet.
- Referens för anslutningsregler för datakopplare – Anslutningsregler för polllningskopplare.
Azure Monitor och datainsamling
- Azure Monitor Logs Ingestion API – Core API för att skicka data.
- Regler för datainsamling i Azure Monitor – Förstå dcrs.
- Struktur för en datainsamlingsregel – DCR-strukturinformation.
- Slutpunkter för datainsamling i Azure Monitor – DCE-konfiguration.
- Självstudie: Skicka data till Azure Monitor-loggar med API för logginmatning – stegvis självstudie.
- Skapa en anpassad tabell – Guide för att skapa anpassad tabell.
Autentisering och säkerhet
- OAuth 2.0-flöde för klientautentiseringsuppgifter – så här fungerar app-till-tjänst-autentisering.
- Åtkomsttoken för Microsoft identity Platform – Förstå OAuth-token.
- Registrera ett program i Microsoft Entra-ID – Så här registrerar du ett program i Microsoft Entra-ID.
- Metodtips för registrering av Azure AD-program – Entra-appsäkerhet.
- Tilldela Azure-roller med hjälp av ARM-mallar (Azure Resource Manager) – Tilldela roller med hjälp av mallar.
- Säkerhetsrekommendationer för ARM-mallar – Skydda distributionsmallar.
- Tjänstbegränsningar för Azure Monitor – Hastighetsbegränsningar och kvoter.
Microsoft Sentinel
- Om Microsoft Sentinel-lösningar – Paketera anslutningar som lösningar.
- Övervaka hälsotillståndet för dina dataanslutningar – Hälsoövervakning.
- ARM-mallreferens för dataanslutningar – Fullständig API-referens.
Få hjälp
- För ISV-partner som skapar integreringar kontaktar du: azuresentinelpartner@microsoft.com
- För tekniska frågor använder du Microsoft Q&A med taggen "azure-sentinel".