Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Ten przewodnik ułatwia zrozumienie, tworzenie i wdrażanie łączników bezkodowych opartych na wypychaniu dla usługi Microsoft Sentinel przy użyciu platformy Codeless Connector Framework (CCF) Push (wersja zapoznawcza).
Co to jest CCF push?
Łączniki wypychania CCF umożliwiają aplikacjom wysyłanie zdarzeń bezpieczeństwa bezpośrednio do usługi Microsoft Sentinel w czasie rzeczywistym. W przeciwieństwie do tradycyjnych łączników opartych na sondowaniu, które okresowo pobierają dane z interfejsów API, łączniki wypychania umożliwiają wypychanie danych do usługi Sentinel w miarę występowania zdarzeń w systemie.
Dostarczanie CCF zapewnia kilka kluczowych korzyści:
- Przepływ danych kontrolowanych przez aplikację: Aplikacja kontroluje czas i sposób wysyłania danych, umożliwiając inteligentne strategie przetwarzania wsadowego i zoptymalizowane użycie sieci.
- Pozyskiwanie w czasie rzeczywistym: Wysyłaj dane natychmiast, w miarę jak zdarzenia się odbywają, bez oczekiwania na okresy odpytywania.
- Uproszczona architektura: Nie trzeba utrzymywać punktów końcowych interfejsu API dla usługi Sentinel do sondowania.
- Aprowizacja oparta na szablonach: Wdrożenie tworzy szablony ARM dla zasad zbierania danych (DCRs), tabel niestandardowych, rejestracji aplikacji Entra i sekretów klienta — otrzymujesz szczegóły połączenia potrzebne do skonfigurowania w aplikacji wysyłającej.
- Bezpieczne uwierzytelnianie: Używa aplikacji Firmy Microsoft Entra z uwierzytelnianiem OAuth 2.0 do bezpiecznego przesyłania danych.
Wymagania wstępne
- Przed rozpoczęciem musisz mieć dostęp do repozytorium Azure-Sentinel GitHub w celu korzystania z narzędzi do tworzenia pakietów.
- Uprawnienia firmy Microsoft Entra:
- Uprawnienie do tworzenia rejestracji aplikacji w usłudze Microsoft Entra ID. Zwykle wymaga roli Deweloper aplikacji Entra ID lub wyższej.
- Uprawnienie do tworzenia aplikacji z tajnymi danymi. Jeśli nie przyznasz tego uprawnienia, łącznik nie będzie działał ze względów bezpieczeństwa.
- Wydawca musi mieć odpowiednią rolę, aby pobierać tokeny z aplikacji Microsoft Entra. Te żetony są wymagane do uwierzytelniania żądań do punktu zbierania danych (DCE), który jest punktem końcowym, gdzie łącznik ostatecznie przekazuje swoje dane. Jeśli dostawca nie może pobrać tokenów, nie można wysłać danych do DCE.
- Uprawnienia platformy Microsoft Azure:
- Uprawnienie do przypisywania roli Wydawcy metryk monitorowania w regule zbierania danych (DCR). Zwykle wymaga roli Właściciel platformy Azure RBAC lub Administrator dostępu użytkowników.
Jak działa wypychanie CCF
Model wypychania a model ściągania
Zrozumienie różnicy między modelami pozyskiwania danych oparciem na popychaniu lub ściąganiu pomaga wybrać odpowiedni typ łącznika dla danego scenariusza.
Łączniki ściągania CCF — oparte na sondowaniu:
W modelu ściągania usługa Microsoft Sentinel okresowo sonduje interfejs API w celu pobrania danych:
- Usługa Microsoft Sentinel inicjuje połączenia z interfejsem API źródła danych zgodnie ze skonfigurowanym harmonogramem.
- Dane docierają w regularnych odstępach czasowych odpytywania, takich jak co pięć minut.
- Musisz zachować publicznie dostępny punkt końcowy interfejsu API.
- Infrastruktura sondowania usługi Sentinel zarządza procesem zbierania danych.
Złącza push CCF — sterowane zdarzeniami:
W modelu push aplikacja wysyła dane bezpośrednio do usługi Microsoft Sentinel:
- Aplikacja inicjuje przesyłanie danych w przypadku wystąpienia zdarzeń.
- Dane docierają niemal w czasie rzeczywistym w miarę generowania zdarzeń.
- Nie musisz utrzymywać punktu końcowego interfejsu API.
- Aplikacja kontroluje przetwarzanie wsadowe, harmonogramowanie i optymalizację zarządzania przepływem danych.
Przepływ danych wypychanych
Przepływ danych wypychanych CCF składa się z pięciu głównych kroków:
Ty wdrażasz łącznik w usłudze Microsoft Sentinel.
Platforma Azure automatycznie tworzy następujące zasoby:
- Aplikacja Microsoft Entra z danymi uwierzytelniającymi
- Reguła zbierania danych (DCR) — definiuje sposób przetwarzania danych
- Punkt końcowy zbierania danych (DCE) — adres URL, pod którym są wysyłane dane
- Niestandardowa tabela dzienników — miejsce przechowywania danych
- Przypisania ról — uprawnienia dla aplikacji Entra
Zostaną wyświetlone następujące szczegóły połączenia:
- Identyfikator najemcy
- Identyfikator aplikacji (klienta)
- Tajemnica klienta
- Identyfikator URI DCE (adres URL punktu końcowego)
- Identyfikator niezmienny DCR
- Nazwa strumienia
Aplikacja wysyła następujące dane:
- Pobiera token OAuth 2.0 przy użyciu poświadczeń aplikacji Entra wygenerowanych przez program CCF. Aby uzyskać więcej informacji, zobacz Przepływ poświadczeń klienta OAuth 2.0
- Formatuje zdarzenia w formacie JSON zgodnym ze schematem tabeli
- Dane wysyłane są przez metodę POST do punktu końcowego DCE
Platforma Azure przetwarza i przechowuje dane:
- DCRs przekształcają dane (opcjonalne przekształcenia KQL)
- Dane są zapisywane do tabeli niestandardowej w usłudze Log Analytics
- Dane są dostępne dla zapytań, analiz i alertów w usłudze Sentinel
Artefakty wypychania CCF
Rozwiązanie łącznika Push CCF składa się z czterech głównych komponentów.
- Definicja tabeli niestandardowej
- Reguła zbierania danych (DCR)
- Definicja łącznika (UI)
- Konfiguracja łącznika wypychania
Definicja tabeli niestandardowej
Co to jest: Schemat definiujący strukturę danych w usłudze Log Analytics.
Podstawowe wymagania:
- Nazwa tabeli musi kończyć się na
_CL(niestandardowy sufiks dziennika). - Musi zawierać kolumnę
TimeGenerated(typ daty/godziny). - Typy kolumn: string, int, long, real, bool, datetime, dynamic, guid.
- Użyj wersji
2025-07-01interfejsu API lub nowszej. - Aby uzyskać więcej informacji, zobacz Tworzenie tabeli niestandardowej w dziennikach usługi Azure Monitor.
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"
}
]
}
}
}
Reguła zbierania danych (DCR)
Co to jest: Definiuje sposób pozyskiwania i przetwarzania danych przez usługę Azure Monitor. Aby uzyskać więcej informacji, zobacz Reguły zbierania danych w usłudze Azure Monitor.
Co to robi:
- Określa nazwę strumienia wejściowego (której aplikacja używa podczas wysyłania danych)
- Definiuje opcjonalne przekształcenia KQL w celu kształtowania i wzbogacania danych
- Kieruje dane do tabeli docelowej
- Linki do punktu końcowego zbierania danych (DCE)
Kluczowe składniki:
-
streamDeclarations: definiuje strukturę danych przychodzących (musi być zgodna z tym, co wysyła aplikacja) -
destinations: Gdzie dane przechodzą (obszar roboczy usługi Log Analytics) -
dataFlows: Potok przetwarzania od strumienia wejściowego do tabeli wyjściowej -
dataCollectionEndpointId: Łącza do DCE dla przetwarzania danych
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
- Nazwa strumienia musi zaczynać się od
Custom-prefiksu. - Może to być po prostu przekazywanie
transformKqldo"source", lub zawierać logikę KQL w celu przekształcania danych. -
outputStreammusi być zgodna z nazwą tabeli z prefiksemCustom-i sufiksem_CL.
Definicja łącznika (UI)
Definicja łącznika kontroluje sposób wyświetlania łącznika w galerii łączników danych usługi Microsoft Sentinel. Aby uzyskać więcej informacji, zobacz API definicji konektora danych.
Definicja łącznika obejmuje:
- Tytuł, opis i znakowanie łącznika
- Wymagane wymagania wstępne i uprawnienia, takie jak dostęp do obszaru roboczego i uprawnienia entra
- Instrukcje dotyczące wdrażania
- Kontrolki interfejsu użytkownika służące do wyświetlania szczegółów połączenia z użytkownikami
Kluczowe elementy interfejsu użytkownika:
-
DeployPushConnectorButton: Wyzwala automatyczne wdrażanie zasobów -
CopyableLabel: Wyświetla szczegóły połączenia po wdrożeniu (używafillWithparametru) -
Markdown: Zawiera sformatowane instrukcje i kontekst -
IsConnectedQuery: Weryfikuje łączność łącznika na podstawie ostatnich danych
Przykładowa struktura (skrócona dla jasności):
{
"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
- Element
idwconnectorUiConfigmusi być unikatowy i pasować do odwołań w konfiguracji łącznika danych. - Użyj
IsConnectedQuerydla łączników produkcyjnych (weryfikuje ostatnie dane) lubhasDataConnectorsjako prostszej formy weryfikacji. - Parametry
fillWithw plikuCopyableLabelsą wypełniane automatycznie po wdrożeniu. - Stałe wartości, takie jak nazwa strumienia, używają parametru
valuezamiastfillWith.
Konfiguracja złącza push
Konfiguracja łącznika wypychającego to instancja łącznika danych, która łączy definicję łącznika z wdrożonymi zasobami.
Konfiguracja łącznika wypychania
- Łączy definicję łącznika (UI) z wdrożonym kontrolerem domeny i aplikacją Entra
- Przechowuje szczegóły uwierzytelniania (identyfikator aplikacji, identyfikator jednostki usługi)
- Rejestruje konfigurację kontrolera domeny (punkt końcowy, niezmienny identyfikator, nazwę strumienia)
- Umożliwia interfejsowi użytkownika pobieranie i wyświetlanie szczegółów połączenia dla użytkowników
Właściwości klucza:
-
connectorDefinitionName: Musi być zgodny z definicją łącznikaid -
dcrConfig: zawiera punkt końcowy dcR, identyfikator reguły i nazwę strumienia -
auth: zawiera identyfikator aplikacji Entra i identyfikator jednostki usługi -
kind: Musi mieć wartość "Push" dla łączników wypychania
Przykład:
{
"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
- Wartość
connectorDefinitionNamemusi być dokładnie zgodna z definicją łącznikaid. - Element
streamNamemusi być zgodny ze strumieniem zadeklarowanym w twoim DCR. - Ten zasób jest tworzony automatycznie podczas wdrażania, gdy użytkownicy wybiorą przycisk DeployPushConnector .
Tworzenie pierwszego łącznika wypychania
W tym przykładzie utworzysz prosty łącznik wypychania, który wysyła alerty zabezpieczeń z aplikacji do usługi Sentinel.
Celem: Wysyłanie alertów zabezpieczeń z aplikacji do usługi Sentinel w czasie rzeczywistym
Aplikacja wysyła strukturę zdarzeń:
{
"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"
}
Przewodnik krok po kroku dotyczący tworzenia łącznika push
Klonowanie repozytorium Azure-Sentinel
Następnie sklonuj oficjalne repozytorium Azure-Sentinel na komputer lokalny. To repozytorium zawiera narzędzia do tworzenia pakietów i zapewnia standardową strukturę rozwiązania.
Klonowanie repozytorium
git clone https://github.com/<YOUR_FORK>/Azure-Sentinel.gitPrzejdź do katalogu Solutions
cd Azure-Sentinel/Solutions
Struktura repozytorium obejmuje:
- Narzędzia/Create-Azure-Sentinel-Solution/V3/
- Zawiera skrypt tworzenia pakietów createSolutionV3.ps1
- Rozwiązania/ Gdzie utworzysz rozwiązanie łącznika
Utwórz strukturę folderu rozwiązania Utwórz nowy katalog rozwiązania w folderze Solutions/zgodnie ze standardową konwencją nazewnictwa. Tworzenie katalogów rozwiązań (z usługi Azure-Sentinel/Rozwiązań/)
mkdir ContosoSecurityAlerts cd ContosoSecurityAlerts mkdir Data mkdir "Data Connectors" mkdir "Data Connectors/ContosoSecurityAlerts_ccf"Struktura folderów wygląda następująco:
Azure-Sentinel/
└—rozwiązania/
└-contosoSecurityAlerts/
├;Dane/
└-łączniki danych/
└-ContosoSecurityAlerts_ccf/Definiowanie tabeli
W folderze ContosoSecurityAlerts_ccf utwórz plik o nazwie table.json przy użyciu niestandardowej definicji tabeli:
{ "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" } ] } } }Utwórz DCR
W folderze ContosoSecurityAlerts_ccf utwórz plik o nazwie DCR.json, który definiuje strumień wejściowy i kieruje dane do tabeli:
{ "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'))]" } }Tworzenie definicji łącznika
W folderze ContosoSecurityAlerts_ccf utwórz plik o nazwie connectorDefinition.json, który definiuje sposób interakcji użytkowników z łącznikiem w usłudze 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" } } ] } ] } } }Tworzenie konfiguracji łącznika danych
W folderze ContosoSecurityAlerts_ccf utwórz plik o nazwie dataConnector.json, który łączy definicję łącznika z wdrożonymi zasobami:
{ "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": [ "$" ] } } }Tworzenie plików metadanych rozwiązania
Solution_ContosoSecurityAlerts.json Utwórz w folderze Dane plik
z szczegółami rozwiązania: { "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
Wymagania dotyczące pola krytycznego:
-
BasePath: Zaktualizuj rzeczywistą lokalną ścieżkę do repozytorium Azure-Sentinel -
Metadata: Musi odnosić się doSolutionMetadata.json(utworzony w kroku 6B) -
Version: Semantyczne przechowywanie wersji, na przykład3.0.0 -
TemplateSpec: Zawszetruew przypadku rozwiązań centrum zawartości -
Is1Pconnector: ustaw wartośćfalsedla łączników partnerskich/niestandardowych
-
Utwórz plik SolutionMetadata.json w katalogu głównym rozwiązania
W folderze ContosoSecurityAlerts utwórz SolutionMetadata.json w katalogu głównym rozwiązania (na tym samym poziomie co folder danych):
{ "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" } }Potrzebny jest plik SolutionMetadata.json do tworzenia pakietów centrum zawartości:
- Narzędzie do tworzenia pakietów oczekuje tego pliku w katalogu głównym rozwiązania
- Zawiera metadane rynku dla dystrybucji Centrum Treści
Utwórz ReleaseNotes.md w katalogu głównym rozwiązania
wersja Data modyfikacji (DD-MM-YYYY) Historia zmian 3.0.0 DD —MM-YYYY Przykładowe rozwiązanie
Lista kontrolna sprawdzania poprawności
Przed przejściem do następnego kroku sprawdź:
- Nazwa folderu nie ma spacji, na przykład
ContosoSecurityAlerts -
Namepole w Solution_ContosoSecurityAlerts.json dokładnie pasuje do nazwy folderu -
SolutionMetadata.jsonistnieje w katalogu głównym rozwiązania (nie w folderze danych) -
BasePathwskazuje na rzeczywistą ścieżkę lokalnego repozytorium Azure-Sentinel -
Metadataodwołania do pól "SolutionMetadata.json" -
publisherIdiofferIddopasowane między obydwoma plikami
Weryfikowanie struktury rozwiązania
Upewnij się, że struktura folderów jest zgodna z wymaganym układem ze wszystkimi plikami:
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 6Spakuj rozwiązanie
Użyj narzędzia do tworzenia pakietów createSolutionV3.ps1, aby wygenerować szablon wdrożenia usługi ARM.
# 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.ps1Skrypt automatycznie:
- Weryfikuje strukturę danych/folderów
- Przetwarza artefakty łącznika
Oczekiwane dane wyjściowe:
Skrypt pakietowania pokazuje nieudaną walidację zestawu narzędzi arm-ttk (Azure Resource Manager Template Toolkit). Ten błąd jest normalnym i spodziewanym zjawiskiem dla konektorów typu Push CCF.
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!Opakowanie zakończyło się pomyślnie, jeśli zostaną wyświetlone trzy komunikaty weryfikacji JSON potwierdzające prawidłowe pliki. Możesz zignorować błąd
arm-ttkłączy Push CCF.Aby uzyskać więcej informacji, zobacz dokumentacjęAzure-Sentinel Solutions Tools.
Wdrażanie pakietu rozwiązania
Wdróż wygenerowany szablon usługi ARM (pakiet/mainTemplate.json) w subskrypcji platformy Azure.
- W witrynie Azure Portal wyszukaj pozycję Deploy a custom template (Wdrażanie szablonu niestandardowego)
- Wybierz pozycję Utwórz własny szablon w edytorze
- Wybierz pozycję Załaduj plik i wybierz
Package/mainTemplate.jsonz folderu wyjściowego - Wybierz Zapisz
- Wypełnij parametry wdrożenia:
- Subskrypcja: Twoja subskrypcja platformy Azure
- Grupa zasobów: Grupa zasobów zawierająca obszar roboczy usługi Sentinel
- Region: Ten sam region co obszar roboczy usługi Sentinel
- Obszaru roboczego: Nazwa obszaru roboczego usługi Log Analytics
- Wybierz Przejrzyj i utwórz, a następnie Utwórz
To wdrożenie udostępnia łącznik w galerii łączników danych usługi Microsoft Sentinel.
Aby uzyskać szczegółowe instrukcje, zobacz [Szybki start: tworzenie i wdrażanie szablonów usługi ARM przy użyciu witryny Azure Portal](/azure/azure-resource-manager/templates/quickstart-create-templates-use-the-portal).
Włączanie łącznika danych
Po wdrożeniu pakietu rozwiązania włącz łącznik w celu aprowizowania zasobów i generowania poświadczeń.
- W witrynie Azure Portal przejdź do obszaru roboczego usługi Microsoft Sentinel
- Przejdź do Konfiguracji>Łączników danych
- Wyszukaj i wybierz pozycję Alerty zabezpieczeń firmy Contoso (Push)
- Wybierz Otwórz stronę łącznika
- Wybierz przycisk Wdróż łącznik Alerty zabezpieczeń firmy Contoso
- Poczekaj na zakończenie wdrażania (tworzy tabelę niestandardową, DCR, DCE, aplikację Entra z poświadczeniami)
- Skopiuj wyświetlone szczegóły połączenia:
- Identyfikator najemcy
- Identyfikator aplikacji (klienta)
- Tajemnica klienta
- Identyfikator URI punktu końcowego zbierania danych
- Niezmienny identyfikator reguły zbierania danych
- Nazwa strumienia:
Custom-ContosoSecurityAlerts
Konfigurowanie aplikacji
Zaktualizuj kod aplikacji przy użyciu poświadczeń i szczegółów zasobu z kroku 10. Kod używa przepływu poświadczeń klienta OAuth 2.0 do uwierzytelniania za pomocą usługi Azure Monitor.
Caution
Ochrona Poświadczeń: Nigdy nie koduj poświadczeń (identyfikator dzierżawy, identyfikator aplikacji, klucz tajny klienta) bezpośrednio w kodzie aplikacji ani nie zatwierdzaj ich do systemu kontroli wersji. Użyj rozwiązań bezpiecznego magazynu poświadczeń, takich jak:
- Usługa Azure Key Vault dla aplikacji produkcyjnych
- Zmienne środowiskowe lub pliki konfiguracji (wykluczone z kontroli źródła)
- Tożsamości zarządzane tam, gdzie ma to zastosowanie
- Narzędzia do zarządzania tajnymi danymi, które szyfrują poświadczenia w stanie spoczynku
Przykładowy kod aplikacji w języku Python:
W poniższym przykładzie użyto wartości zastępczych, takich jak <Your-Tenant-ID>. Zastąp te wartości bezpiecznymi odwołaniami do rzeczywistych poświadczeń.
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!")Zapytaj dane
Po wysłaniu alertów wykonaj zapytanie w usłudze Sentinel. Poczekaj 5–10 minut na pierwsze wczytywanie.
// 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
Treści powiązane
Teraz, gdy znasz łącza CCF typu Push, wykonaj następujące kroki:
- Projektowanie schematu danych — zidentyfikuj zdarzenia, które chcesz wysłać, i ich pola.
- Tworzenie artefaktów łącznika — zbuduj cztery pliki JSON (tabela, DCR, definicja łącznika, łącznik danych).
- Organizowanie struktury rozwiązań — konfigurowanie danych/ i łączników danych/ folderów przy użyciu odpowiedniego nazewnictwa.
-
Spakuj swoje rozwiązanie — użyj
createSolutionV3.ps1do generowania szablonów wdrażania. - Wdrażanie i testowanie — wdróż w obszarze roboczym usługi Sentinel i zweryfikuj przepływ danych.
- Integracja z aplikacją — dodaj kod do wysyłania zdarzeń w czasie rzeczywistym.
- Tworzenie alertów i skoroszytów — użyj danych do monitorowania zabezpieczeń.
Dodatkowe zasoby
Dokumentacja programu CCF
- Utwórz łącznik bez kodu (CCF Pull) — łączniki oparte na sondowaniu.
- Dokumentacja API definicji lącznika danych – przewodnik konfiguracji UI.
- Odniesienie do reguł połączeń łącznika danych — reguły połączeń dla łączników ankietowania.
Usługa Azure Monitor i zbieranie danych
- API do przyjmowania logów usługi Azure Monitor — podstawowy interfejs API do wysyłania danych.
- Reguły zbierania danych w usłudze Azure Monitor — zrozumienie DCR.
- Struktura reguły zbierania danych — szczegóły struktury DCR.
- Punkty końcowe zbierania danych w usłudze Azure Monitor — konfiguracja DCE.
- Samouczek: wysyłanie danych do dzienników usługi Azure Monitor przy użyciu interfejsu API pozyskiwania dzienników — samouczek krok po kroku.
- Tworzenie tabeli niestandardowej — przewodnik tworzenia tabel niestandardowych.
Uwierzytelnianie i zabezpieczenia
- Przepływ poświadczeń klienta OAuth 2.0 — jak działa uwierzytelnianie aplikacji do usługi.
- Tokeny dostępu platformy tożsamości firmy Microsoft — informacje o tokenach OAuth.
- Rejestrowanie aplikacji w usłudze Microsoft Entra ID — jak zarejestrować aplikację w identyfikatorze Entra firmy Microsoft.
- Najlepsze rozwiązania dotyczące rejestracji aplikacji usługi Azure AD — Entra App Security.
- Przypisywanie ról platformy Azure przy użyciu szablonów usługi Azure Resource Manager (ARM) — przypisywanie ról przy użyciu szablonów.
- Zalecenia dotyczące zabezpieczeń szablonu ARM — zabezpieczanie szablonu wdrożeniowego.
- Limity usługi Azure Monitor — ograniczenia prędkości i limity przydziału.
Microsoft Sentinel
- Informacje o rozwiązaniach usługi Microsoft Sentinel — tworzenie pakietów łączników jako rozwiązań.
- Monitorowanie kondycji łączników danych — monitorowanie kondycji.
- Odniesienie do szablonu ARM dla łączników danych — kompletne odniesienie API.
Uzyskaj pomoc
- W przypadku partnerów niezależnych dostawców oprogramowania tworzących integracje skontaktuj się z: azuresentinelpartner@microsoft.com
- W przypadku pytań technicznych użyj Microsoft Q&A z tagiem 'azure-sentinel'.