Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Das Codeless Connector Framework (CCF) bietet Partnern, fortgeschrittenen Benutzern und Entwicklern die Möglichkeit, benutzerdefinierte Connectors zum Erfassen von Daten in Microsoft Sentinel zu erstellen.
Connectors, die mit dem CCF erstellt wurden, sind vollständig SaaS und keine Anforderungen für Dienstinstallationen. Sie umfassen auch die Integritätsüberwachung und vollständige Unterstützung von Microsoft Sentinel.
Führen Sie die folgenden Schritte aus, um Ihren CCF-Connector zu erstellen und Ihre Datenquelle mit Microsoft Sentinel
- Erstellen des Datenconnectors
- Erstellen der ARM-Vorlage
- Bereitstellen des Connectors
- Verbinden Microsoft Sentinel mit Ihrer Datenquelle und Starten der Erfassung von Daten
In diesem Artikel erfahren Sie, wie Sie die einzelnen Schritte ausführen, und es wird ein Beispiel für einen Codelosen Connector bereitgestellt, der auf diesem Weg erstellt werden kann.
Wenn Sie Softwareentwicklungspartner sind und Unterstützung beim Erstellen eines CCF-Datenconnectors benötigen, wenden Sie sich an Microsoft Sentinel Partner unterAzureSentinelPartner@microsoft.com, um Unterstützung zu erhalten.
Wie unterscheidet sich diese CCF von der vorherigen Version?
Die erste Version des CCF wurde im Januar 2022 angekündigt . Seitdem haben wir die Plattform verbessert, und das Legacyrelease wird nicht mehr empfohlen. Diese neue Version des CCF weist die folgenden wichtigen Verbesserungen auf:
Bessere Unterstützung für verschiedene Authentifizierungs- und Paginierungstypen.
Unterstützt Standarddatensammlungsregeln (DCRs).
Die Teile der Benutzeroberfläche und der Verbindungskonfiguration des codelosen Connectors sind jetzt getrennt. Dies ermöglicht die Erstellung von Connectors mit mehreren Verbindungen, was zuvor nicht möglich war.
Voraussetzungen
Machen Sie sich vor dem Erstellen eines Connectors mit Ihrer Datenquelle vertraut und verstehen, wie Microsoft Sentinel eine Verbindung herstellen muss.
Datensammlungsendpunkt (Data Collection Endpoint, DCE)
Ein DCE ist eine Anforderung für einen DCR. Pro DCR-Bereitstellung des Log Analytics-Arbeitsbereichs wird nur eine DCE erstellt. Jede DCR, die für einen Microsoft Sentinel Arbeitsbereich bereitgestellt wird, verwendet dieselbe DCE. Weitere Informationen dazu, wie Sie einen erstellen oder einen neuen benötigen, finden Sie unter Datensammlungsendpunkte in Azure Monitor.
Schema der Ausgabetabelle(n).
Es ist wichtig, die Form Ihres Datenstroms und die Felder zu verstehen, die Sie in die Ausgabetabelle aufnehmen möchten. Verweisen Sie auf die Dokumentation Ihrer Datenquelle, oder analysieren Sie ausreichende Ausgabebeispiele.
Untersuchen Sie die folgenden Komponenten, und überprüfen Sie ihre Unterstützung in der Referenz zur Datenconnector-API:
HTTP-Anforderungs- und Antwortstruktur an die Datenquelle
Für die Datenquelle erforderliche Authentifizierung.
Wenn Ihre Datenquelle beispielsweise ein token erfordert, das mit einem Zertifikat signiert ist, gibt die Datenconnector-API-Referenz an, dass die Zertifikatauthentifizierung nicht unterstützt wird.Paginierungsoptionen für die Datenquelle
Testen von APIs
Es wird empfohlen, Ihre Komponenten mit einem API-Testtool wie einem der folgenden Komponenten zu testen:
- Visual Studio Code mit einer Erweiterung aus Visual Studio Marketplace
- PowerShell Invoke-RestMethod
- Microsoft Edge – Netzwerkkonsolentool
- Bruno
- Curl
Achtung
Für Szenarien, in denen Sie über vertrauliche Daten wie Anmeldeinformationen, Geheimnisse, Zugriffstoken, API-Schlüssel und andere ähnliche Informationen verfügen, stellen Sie sicher, dass Sie ein Tool verwenden, das Ihre Daten mit den erforderlichen Sicherheitsfeatures schützt, offline oder lokal arbeitet, Ihre Daten nicht mit der Cloud synchronisiert und keine Anmeldung bei einem Onlinekonto erfordert. Auf diese Weise verringern Sie das Risiko, vertrauliche Daten für die Öffentlichkeit verfügbar zu machen.
Erstellen des Datenconnectors
Tipp
Wenn Sie ein unabhängiger Softwarehersteller (Independent Software Vendor, ISV) sind und Unterstützung beim Erstellen einer Microsoft Sentinel-Integration mithilfe des Microsoft Sentinel Codeless Connector Framework benötigen, kann das Microsoft App Assure-Team möglicherweise helfen. Um das App Assure-Team einzubinden, senden Sie eine E-Mail an azuresentinelpartner@microsoft.com.
Zum Erstellen des CCF-Datenconnectors sind vier Komponenten erforderlich.
- Definition der Ausgabetabelle
- Datensammlungsregel (Data Collection Rule, DCR)
- Benutzeroberfläche des Datenconnectors
- Verbindungsregeln für Datenconnector
Jede Komponente verfügt über einen Abschnitt, in dem der Zu erstellende und zu überprüfende Prozess beschrieben wird. Verwenden Sie den JSON-Code jeder Komponente für die endgültige Paketerstellung der ARM-Vorlage.
Definition der Ausgabetabelle
Tipp
Überspringen Sie diesen Schritt, wenn Ihre Daten nur in Log Analytics-Standardtabellen erfasst werden. Beispiele für Standardtabellen sind CommonSecurityLog und ASimDnsActivityLogs. Weitere Informationen zur vollständigen Liste der unterstützten Standarddatentypen finden Sie unter Unterstützung der Datentransformation für benutzerdefinierte Datenconnectors.
Wenn Ihre Datenquelle nicht dem Schema einer Standardtabelle entspricht, haben Sie zwei Optionen:
- Erstellen einer benutzerdefinierten Tabelle für alle Daten
- Erstellen einer benutzerdefinierten Tabelle für einige Daten und Aufteilen konformer Daten in eine Standardtabelle
Verwenden Sie die Log Analytics-Benutzeroberfläche für eine einfache Methode, um eine benutzerdefinierte Tabelle zusammen mit einem DCR zu erstellen. Wenn Sie die benutzerdefinierte Tabelle mithilfe der Tabellen-API oder einer anderen programmgesteuerten Methode erstellen, fügen Sie das _CL Suffix dem Tabellennamen manuell hinzu. Weitere Informationen finden Sie unter Erstellen einer benutzerdefinierten Tabelle.
Weitere Informationen zum Aufteilen Ihrer Daten in mehrere Tabellen finden Sie in den Beispieldaten und in der für diese Daten erstellten benutzerdefinierten Beispieltabelle .
Datensammlungsregel
Datensammlungsregeln (DATA Collection Rules, DCRs) definieren den Datensammlungsprozess in Azure Monitor. DCRs geben an, welche Daten gesammelt werden sollen, wie diese Daten transformiert und wohin diese Daten gesendet werden sollen.
- Pro Datenconnector wird nur ein DCR bereitgestellt.
- Ein DCR muss über eine entsprechende DCE in derselben Region verfügen.
- Wenn der CCF-Datenconnector bereitgestellt wird, wird der DCR erstellt, wenn er noch nicht vorhanden ist.
Die neuesten Informationen zu DCRs finden Sie in diesen Artikeln:
Ein Tutorial zur Veranschaulichung der Erstellung einer DCE, einschließlich der Verwendung von Beispieldaten zum Erstellen der benutzerdefinierten Tabelle und dcr, finden Sie unter Tutorial: Senden von Daten an Azure Überwachen von Protokollen mit protokollerfassungs-API (Azure-Portal)). Verwenden Sie den Prozess in diesem Tutorial, um zu überprüfen, ob Die Daten mit Ihrem DCR ordnungsgemäß in Ihrer Tabelle erfasst werden.
Informationen zum Erstellen einer komplexen DCR mit mehreren Datenflüssen finden Sie im Abschnitt DCR-Beispiel.
Benutzeroberfläche des Datenconnectors
Diese Komponente rendert die Benutzeroberfläche für den Datenconnector im Microsoft Sentinel Datenconnectorkatalog. Jeder Datenconnector kann nur eine Ui-Definition aufweisen.
Erstellen Sie die Benutzeroberfläche des Datenconnectors mit der Datenconnectordefinitions-API. Verwenden Sie die Referenz zu Datenconnectordefinitionen als Ergänzung, um die API-Elemente ausführlicher zu erläutern.
Hinweise:
- Die
kind-Eigenschaft für den API-Abrufconnector sollte immer seinCustomizable. - Da dies ein Typ von API-Abrufconnector ist, legen Sie den
connectivityCriteriaTyp auf fest.hasDataConnectors - Das Beispiel
instructionStepsenthält eine Schaltfläche vom TypConnectionToggleButton. Diese Schaltfläche hilft beim Auslösen der Bereitstellung von Datenconnectorregeln basierend auf den angegebenen Verbindungsparametern.
Verwenden Sie ein API-Testtool , um die Datenconnectordefinitions-API aufzurufen, um die Datenconnector-Benutzeroberfläche zu erstellen, um sie im Datenconnectorkatalog zu überprüfen.
Ein Beispiel finden Sie im Abschnitt Referenz zu Datenconnectordefinitionen.
Datenverbindungsregeln
Es gibt derzeit drei Arten von Datenverbindungsregeln zum Definieren Ihres CCF-Datenconnectors.
-
RestApiPollermit kind können Sie Paging, Autorisierung und erwartete Anforderungs-/Antwortnutzlasten für Ihre Datenquelle anpassen. Weitere Informationen finden Sie unter Referenz zu Den RestApiPoller-Datenconnector-Verbindungsregeln. -
GCPMit kind können Sie Ihre Entwicklungszeit verkürzen, indem Sie automatisch Paging und erwartete Antwortnutzlasten für Ihre Google Cloud Platform (GCP)-Datenquelle konfigurieren. Weitere Informationen finden Sie in der Referenz zu Den Verbindungsregeln für den GCP-Datenconnector. -
StorageAccountBlobContainermit kind können Sie die Erfassung aus einer Azure Storage-Blob-Datenquelle ausführen. Weitere Informationen finden Sie unter Azure Api-Referenz für Storage-Blobconnectors.
Verwenden Sie ein API-Testtool , um die Datenconnector-API aufzurufen, um den Datenconnector zu erstellen, der die Verbindungsregeln und die vorherigen Komponenten kombiniert. Vergewissern Sie sich, dass der Connector jetzt über die Benutzeroberfläche verbunden ist.
Schützen vertraulicher Eingaben
Unabhängig davon, welche Authentifizierung von Ihrem CCF-Datenconnector verwendet wird, führen Sie diese Schritte aus, um sicherzustellen, dass vertrauliche Informationen geschützt sind. Das Ziel besteht darin, Anmeldeinformationen aus der ARM-Vorlage an den CCF zu übergeben, ohne lesbare vertrauliche Objekte im Bereitstellungsverlauf zu hinterlassen.
Bezeichnung erstellen
Die Datenconnectordefinition erstellt ein Benutzeroberflächenelement, um zur Eingabe von Sicherheitsanmeldeinformationen aufzufordern. Wenn ihr Datenconnector beispielsweise mit OAuth bei einer Protokollquelle authentifiziert wird, enthält der Abschnitt zur Datenconnectordefinition den OAuthForm Typ in den Anweisungen. Dadurch wird die ARM-Vorlage eingerichtet, um zur Eingabe der Anmeldeinformationen aufzufordern.
"instructions": [
{
"type": "OAuthForm",
"parameters": {
"UsernameLabel": "Username",
"PasswordLabel": "Password",
"connectButtonLabel": "Connect",
"disconnectButtonLabel": "Disconnect"
}
}
],
Vertrauliche Eingaben speichern
Ein Abschnitt der ARM-Bereitstellungsvorlage bietet dem Administrator, der den Datenconnector bereitstellt, einen Ort, an dem das Kennwort eingegeben werden kann. Verwenden Sie securestring , um die vertraulichen Informationen in einem Objekt zu schützen, das nach der Bereitstellung nicht mehr lesbar ist. Weitere Informationen finden Sie unter Sicherheitsempfehlungen für Parameter.
"mainTemplate": {
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "[variables('dataConnectorCCPVersion')]",
"parameters": {
"Username": {
"type": "securestring",
"minLength": 1,
"metadata": {
"description": "Enter the username to connect to your data source."
},
"Password": {
"type": "securestring",
"minLength": 1,
"metadata": {
"description": "Enter the API key, client secret or password required to connect."
}
},
// more deployment template information
}
}
Verwenden der securestring-Objekte
Schließlich verwendet der CCF die Anmeldeinformationsobjekte im Datenconnectorabschnitt.
"auth": {
"type": "OAuth2",
"ClientSecret": "[[parameters('Password')]",
"ClientId": "[[parameters('Username')]",
"GrantType": "client_credentials",
"TokenEndpoint": "https://api.contoso.com/oauth/token",
"TokenEndpointHeaders": {
"Content-Type": "application/x-www-form-urlencoded"
},
"TokenEndpointQueryParameters": {
"grant_type": "client_credentials"
}
},
Hinweis
Die seltsame Syntax für das Anmeldeinformationsobjekt "ClientSecret": "[[parameters('Password')]", ist kein Tippfehler!
Um die Bereitstellungsvorlage zu erstellen, die auch Parameter verwendet, müssen Sie die Parameter in diesem Abschnitt mit einem zusätzlichen Start versehen[. Dadurch können die Parameter einen Wert basierend auf der Benutzerinteraktion mit dem Connector zuweisen.
Weitere Informationen finden Sie unter Escapezeichen für Vorlagenausdrücke.
Erstellen der Bereitstellungsvorlage
Packen Sie manuell eine ARM-Vorlage (Azure Resource Management) mithilfe der Beispielvorlagencodebeispiele als Leitfaden. Diese Codebeispiele sind durch ARM-Vorlagenabschnitte unterteilt, die Sie zusammenfügen müssen.
Wenn Sie einen GCP-CCF-Datenconnector (Google Cloud Platform) erstellen, packen Sie die Bereitstellungsvorlage mithilfe der GCP CCF-Beispielvorlage. Informationen zum Ausfüllen der GCP-CCF-Vorlage finden Sie unter Referenz zu GCP-Datenconnector-Verbindungsregeln.
Zusätzlich zu den Beispielvorlagen verwenden veröffentlichte Lösungen, die im Microsoft Sentinel Content Hub verfügbar sind, den CCF für ihre Datenconnectors. Sehen Sie sich die folgenden Lösungen als weitere Beispiele für das Zusammenfügen der Komponenten in einer ARM-Vorlage an.
RestApiPoller Beispiele für DEN CCF-Datenconnector
- Ermes Browser Security
- Palo Alto Prisma Cloud CWPP
- Sophos Endpoint Protection
- Workday
- Atlassian Jira
- Okta Single Sign-On
GCP Beispiele für DEN CCF-Datenconnector
Bereitstellen des Connectors
Stellen Sie Ihren codelosen Connector als benutzerdefinierte Vorlage bereit.
Tipp
Löschen Sie Ressourcen, die Sie in den vorherigen Schritten erstellt haben. Die DCR-Tabelle und die benutzerdefinierte Tabelle werden mit der Bereitstellung erstellt. Wenn Sie diese Ressourcen vor der Bereitstellung nicht entfernen, ist es schwieriger, Ihre Vorlage zu überprüfen.
- Kopieren Sie den Inhalt der ARM-Bereitstellungsvorlage.
- Befolgen Sie die Anweisungen zum Bearbeiten und Bereitstellen der Vorlage aus dem Artikel Schnellstart: Erstellen und Bereitstellen von ARM-Vorlagen mithilfe der Azure-Portal.
Verwalten der Netzwerkisolation für die Protokollierungsquelle
Wenn Ihre Protokollierungsquelle eine Netzwerkisolation erfordert, konfigurieren Sie eine Positivliste öffentlicher IP-Adressen, die von der CCF verwendet werden.
Azure virtuellen Netzwerken verwenden Diensttags, um Netzwerkzugriffssteuerungen zu definieren. Für die CCF ist dieses Diensttag Scuba.
Informationen zum aktuellen IP-Adressbereich, der dem Diensttag Scuba zugeordnet ist, finden Sie unter Verwenden der Diensttag-Ermittlungs-API.
Überprüfen des codelosen Connectors
Zeigen Sie Ihren codelosen Connector im Datenconnectorkatalog an. Öffnen Sie den Datenconnector, und schließen Sie alle Authentifizierungsparameter ab, die für die Verbindung erforderlich sind. Nachdem die Verbindung erfolgreich hergestellt wurde, werden die DCR- und benutzerdefinierten Tabellen erstellt. Zeigen Sie die DCR-Ressource in Ihrer Ressourcengruppe und alle benutzerdefinierten Tabellen aus dem Logs Analytics-Arbeitsbereich an.
Hinweis
Es kann bis zu 30 Minuten dauern, bis die Datenerfassung beginnt.
Beispiel
Jeder Schritt beim Erstellen des codelosen Connectors wird in den folgenden Beispielabschnitten dargestellt.
- Beispieldaten
- Benutzerdefinierte Beispieltabelle
- Beispiel für eine Datensammlungsregel
- Beispieldefinition der Benutzeroberfläche des Datenconnectors
- Beispiel für Datenverbindungsregeln
- Verwenden von Beispieldaten mit Einer Beispielvorlage
Um eine komplexe Datenquelle mit Erfassung in mehr als einer Tabelle zu veranschaulichen, enthält dieses Beispiel ein Ausgabetabellenschema und eine DCR mit mehreren Ausgabedatenströmen. Im DCR-Beispiel werden diese zusammen mit den KQL-Transformationen zusammengefasst. Die Beispiele für die Definition der Benutzeroberfläche des Datenconnectors und die Verbindungsregeln werden aus derselben Beispieldatenquelle fortgesetzt. Schließlich verwendet die Lösungsvorlage alle diese Beispielkomponenten, um zu zeigen, wie der BEISPIEL-CCF-Datenconnector erstellt wird.
Beispieldaten
Eine Datenquelle gibt beim Herstellen einer Verbindung mit ihrem Endpunkt den folgenden JSON-Code zurück.
[
{
"ts": "3/6/2023 8:15:15 AM",
"eventType": "Alert",
"deviceMac": "bc:27:c6:21:1c:70",
"clientMac": "",
"srcIp": "10.12.11.106",
"destIp": "121.93.178.13",
"protocol": "tcp/ip",
"priority": "0",
"message": "This is an alert message"
},
{
"ts": "3/6/2023 8:14:54 AM",
"eventType": "File",
"srcIp": "178.175.128.249",
"destIp": "234.113.125.105",
"fileType": "MS_EXE",
"fileSizeBytes": 193688,
"disposition": "Malicious"
}
]
Diese Antwort enthält eventTypeWarnung und Datei. Die Dateiereignisse sollen in der normalisierten Standardtabelle AsimFileEventLogs erfasst werden, während die Warnungsereignisse in einer benutzerdefinierten Tabelle erfasst werden sollen.
Benutzerdefinierte Beispieltabelle
Weitere Informationen zur Struktur dieser Tabelle finden Sie unter Tabellen-API. Benutzerdefinierte Protokolltabellennamen sollten ein _CL Suffix aufweisen.
{
"properties": {
"schema": {
"name": "ExampleConnectorAlerts_CL",
"columns": [
{
"name": "TimeGenerated",
"type": "datetime"
},
{
"name": "SourceIP",
"type": "string"
},
{
"name": "DestIP",
"type": "string"
},
{
"name": "Message",
"type": "string"
},
{
"name": "Priority",
"type": "int"
}
]
}
}
}
Beispiel für eine Datensammlungsregel
Der folgende DCR definiert einen einzelnen Stream Custom-ExampleConnectorInput mithilfe der Beispieldatenquelle und transformiert die Ausgabe in zwei Tabellen.
- Der erste Dataflow leitet die
eventType= Warnung an die benutzerdefinierteExampleConnectorAlerts_CLTabelle weiter. - Der zweite Dataflow leitet
eventType= File an die normalisierte Standardtabelle weiterASimFileEventLogs.
Weitere Informationen zur Struktur dieses Beispiels finden Sie unter Struktur einer Datensammlungsregel.
Um diese DCR in einer Testumgebung zu erstellen, befolgen Sie die Datensammlungsregeln-API. Elemente des Beispiels in {{double curly braces}} geben Variablen an, die Werte für die einfache Verwendung mit einem API-Testtool erfordern. Wenn Sie diese Ressource in der ARM-Vorlage erstellen, werden die hier ausgedrückten Variablen gegen Parameter ausgetauscht.
{
"location": "{{location}}",
"properties": {
"dataCollectionEndpointId": "/subscriptions/{{subscriptionId}}/resourceGroups/{{resourceGroupName}}/providers/Microsoft.Insights/dataCollectionEndpoints/{{dataCollectionEndpointName}}",
"streamDeclarations": {
"Custom-ExampleConnectorInput": {
"columns": [
{
"name": "ts",
"type": "datetime"
},
{
"name": "eventType",
"type": "string"
},
{
"name": "deviceMac",
"type": "string"
},
{
"name": "clientMac",
"type": "string"
},
{
"name": "srcIp",
"type": "string"
},
{
"name": "destIp",
"type": "string"
},
{
"name": "protocol",
"type": "string"
},
{
"name": "priority",
"type": "string"
},
{
"name": "message",
"type": "string"
},
{
"name": "fileType",
"type": "string"
},
{
"name": "fileSizeBytes",
"type": "int"
},
{
"name": "disposition",
"type": "string"
}
]
}
},
"destinations": {
"logAnalytics": [
{
"workspaceResourceId": "/subscriptions/{{subscriptionId}}/resourcegroups/{{resourceGroupName}}/providers/microsoft.operationalinsights/workspaces/{{workspaceName}}",
"name": "{{uniqueFriendlyDestinationName}}"
}
]
},
"dataFlows": [
{
"streams": [
"Custom-ExampleConnectorInput"
],
"destinations": [
"{{uniqueFriendlyDestinationName}}"
],
"transformKql": "source | where eventType == \"Alert\" | project TimeGenerated = ts, SourceIP = srcIp, DestIP = destIp, Message = message, Priority = priority \n",
"outputStream": "Custom-ExampleConnectorAlerts_CL"
},
{
"streams": [
"Custom-ExampleConnectorInput"
],
"destinations": [
"{{uniqueFriendlyDestinationName}}"
],
"transformKql": "source | where eventType == \"File\" | project-rename TimeGenerated = ts, EventOriginalType = eventType, SrcIpAddr = srcIp, DstIpAddr = destIp, FileContentType = fileType, FileSize = fileSizeBytes, EventOriginalSeverity = disposition \n",
"outputStream": "Microsoft-ASimFileEventLogs"
}
]
}
}
Beispieldefinition der Benutzeroberfläche des Datenconnectors
Dieses Beispiel befindet sich in der Referenz zu Datenconnectordefinitionen.
Beispiel für Verbindungsregeln für Datenconnectors
Dieses Beispiel befindet sich in der Referenz zu Datenconnectors.
ARM-Beispielvorlage
Erstellen Sie die ARM-Bereitstellungsvorlage mit der folgenden Struktur, die die vier Abschnitte der JSON-Komponenten enthält, die zum Erstellen des CCF-Datenconnectors erforderlich sind:
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {},
"variables": {},
"resources": [],
}
Fügen Sie die Abschnitte mit einem JSON-fähigen Editor wie Visual Code zusammen, um Syntaxfehler wie Kommas und schließende Klammern und Klammern zu minimieren.
Um den Vorlagenerstellungsprozess zu steuern, werden Kommentare in den Metadatendescription oder inline mit // der Kommentarnotation angezeigt. Weitere Informationen finden Sie unter Bewährte Methoden für ARM-Vorlagen – Kommentare.
Erwägen Sie die Verwendung des ARM-Vorlagentesttoolkits (arm-ttk), um die von Ihnen erstellten Vorlage zu überprüfen. Weitere Informationen finden Sie unter arm-ttk.
ARM-Beispielvorlage – Parameter
Weitere Informationen finden Sie unter Parameter in ARM-Vorlagen.
Warnung
Wird securestring für alle Kennwörter und Geheimnisse in Objekten verwendet, die nach der Ressourcenbereitstellung lesbar sind.
Weitere Informationen finden Sie unter Schützen vertraulicher Eingaben und Sicherheitsempfehlungen für Parameter.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"location": {
"type": "string",
"minLength": 1,
"defaultValue": "[resourceGroup().location]",
"metadata": {
"description": "Not used, but needed to pass the arm-ttk test, 'Location-Should-Not-Be-Hardcoded'. Instead the `workspace-location` derived from the log analytics workspace is used."
}
},
"workspace-location": {
"type": "string",
"defaultValue": "",
"metadata": {
"description": "[concat('Region to deploy solution resources -- separate from location selection',parameters('location'))]"
}
},
"subscription": {
"defaultValue": "[last(split(subscription().id, '/'))]",
"type": "string",
"metadata": {
"description": "subscription id where Microsoft Sentinel is configured"
}
},
"resourceGroupName": {
"defaultValue": "[resourceGroup().name]",
"type": "string",
"metadata": {
"description": "resource group name where Microsoft Sentinel is configured"
}
},
"workspace": {
"defaultValue": "",
"type": "string",
"metadata": {
"description": "the log analytics workspace enabled for Microsoft Sentinel"
}
}
},
// Next is the variables section here
}
ARM-Beispielvorlage – Variablen
Diese empfohlenen Variablen vereinfachen die Vorlage. Verwenden Sie mehr oder weniger nach Bedarf. Weitere Informationen finden Sie unter Variablen in ARM-Vorlagen.
"variables": {
"workspaceResourceId": "[resourceId('microsoft.OperationalInsights/Workspaces', parameters('workspace'))]",
"_solutionName": "Solution name", // Enter your solution name
"_solutionVersion": "3.0.0", // must be 3.0.0 or above
"_solutionAuthor": "Contoso", // Enter the name of the author
"_packageIcon": "<img src=\"{LogoLink}\" width=\"75px\" height=\"75px\">", // Enter the http link for the logo. NOTE: This field is only recommended for Azure Global Cloud.
"_solutionId": "azuresentinel.azure-sentinel-solution-azuresentinel.azure-sentinel-MySolution", // Enter a name for your solution with this format but exchange the 'MySolution' portion
"dataConnectorVersionConnectorDefinition": "1.0.0",
"dataConnectorVersionConnections": "1.0.0",
"_solutionTier": "Community", // This designates the appropriate support - all custom data connectors are "Community"
"_dataConnectorContentIdConnectorDefinition": "MySolutionTemplateConnectorDefinition", // Enter a name for the connector
"dataConnectorTemplateNameConnectorDefinition": "[concat(parameters('workspace'),'-dc-',uniquestring(variables('_dataConnectorContentIdConnectorDefinition')))]",
"_dataConnectorContentIdConnections": "MySolutionTemplateConnections", // Enter a name for the connections this connector makes
"dataConnectorTemplateNameConnections": "[concat(parameters('workspace'),'-dc-',uniquestring(variables('_dataConnectorContentIdConnections')))]",
"_logAnalyticsTableId1": "ExampleConnectorAlerts_CL" // Enter the custom table name - not needed if you are ingesting data into standard tables
// Enter more variables as needed "":""
},
// Next is the resources sections here
ARM-Beispielvorlage – Ressourcen
Dieser Vorlagenleitfaden enthält 5 ARM-Bereitstellungsressourcen, die die 4 Komponenten des CCF-Datenconnectors enthalten.
-
contentTemplates (eine übergeordnete Ressource)
- Metadaten
- dataCollectionRules: Weitere Informationen finden Sie unter Datensammlungsregel.
- tables: Weitere Informationen finden Sie unter Ausgabetabellendefinition.
- dataConnectorDefinitions : Weitere Informationen finden Sie unter Benutzeroberfläche des Datenconnectors.
- metadata
-
contentTemplates
- Metadaten
- RestApiPoller : Weitere Informationen finden Sie unter Datenverbindungsregeln.
- contentPackages
"resources": [
// resource section 1 - contentTemplates
{
"type": "Microsoft.OperationalInsights/workspaces/providers/contentTemplates",
"apiVersion": "2023-04-01-preview",
"name": "[concat(parameters('workspace'),'/Microsoft.SecurityInsights/', variables('dataConnectorTemplateNameConnectorDefinition'), variables('dataConnectorVersionConnectorDefinition'))]",
"location": "[parameters('workspace-location')]",
"dependsOn": [
"[extensionResourceId(resourceId('Microsoft.OperationalInsights/workspaces', parameters('workspace')), 'Microsoft.SecurityInsights/contentPackages', variables('_solutionId'))]"
],
"properties": {
"contentId": "[variables('_dataConnectorContentIdConnectorDefinition')]",
"displayName": "[concat(variables('_solutionName'), variables('dataConnectorTemplateNameConnectorDefinition'))]",
"contentKind": "DataConnector",
"mainTemplate": {
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "[variables('dataConnectorVersionConnectorDefinition')]",
"parameters": {},
"variables": {},
"resources": [
{
"name": "[concat(parameters('workspace'),'/Microsoft.SecurityInsights/',concat('DataConnector-', variables('_dataConnectorContentIdConnectorDefinition')))]",
"apiVersion": "2022-01-01-preview",
"type": "Microsoft.OperationalInsights/workspaces/providers/metadata",
"properties": {
"parentId": "[extensionResourceId(resourceId('Microsoft.OperationalInsights/workspaces', parameters('workspace')), 'Microsoft.SecurityInsights/dataConnectorDefinitions', variables('_dataConnectorContentIdConnectorDefinition'))]",
"contentId": "[variables('_dataConnectorContentIdConnectorDefinition')]",
"kind": "DataConnector",
"version": "[variables('dataConnectorVersionConnectorDefinition')]",
"source": {
"sourceId": "[variables('_solutionId')]",
"name": "[variables('_solutionName')]",
"kind": "Solution"
},
"author": {
"name": "[variables('_solutionAuthor')]"
},
"support": {
"name": "[variables('_solutionAuthor')]",
"tier": "[variables('_solutionTier')]"
},
"dependencies": {
"criteria": [
{
"version": "[variables('dataConnectorVersionConnections')]",
"contentId": "[variables('_dataConnectorContentIdConnections')]",
"kind": "ResourcesDataConnector"
}
]
}
}
},
{
"name": "MyDCRV1", // Enter your DCR name
"apiVersion": "2021-09-01-preview",
"type": "Microsoft.Insights/dataCollectionRules",
"location": "[parameters('workspace-location')]",
"kind": null,
"properties":
{
// Enter your DCR properties here.
// Consider using these variables:
// "dataCollectionEndpointId": "[concat('/subscriptions/',parameters('subscription'),'/resourceGroups/',parameters('resourceGroupName'),'/providers/Microsoft.Insights/dataCollectionEndpoints/',parameters('workspace'))]",
// "workspaceResourceId": "[variables('workspaceResourceId')]",
}
},
{
"name": "[variables('_logAnalyticsTableId1')]",
"apiVersion": "2022-10-01",
"type": "Microsoft.OperationalInsights/workspaces/tables",
"location": "[parameters('workspace-location')]",
"kind": null,
"properties":
{
// Enter your log analytics table schema here.
// Consider using this variable for the name property:
// "name": "[variables('_logAnalyticsTableId1')]",
}
}
// Enter more tables if needed.
]
},
"packageKind": "Solution",
"packageVersion": "[variables('_solutionVersion')]",
"packageName": "[variables('_solutionName')]",
"contentProductId": "[concat(substring(variables('_solutionId'), 0, 50),'-','dc','-', uniqueString(concat(variables('_solutionId'),'-','DataConnector','-',variables('_dataConnectorContentIdConnectorDefinition'),'-', variables('dataConnectorVersionConnectorDefinition'))))]",
"packageId": "[variables('_solutionId')]",
"contentSchemaVersion": "3.0.0",
"version": "[variables('_solutionVersion')]"
}
},
// resource 2 section here
// resource section 2 - dataConnectorDefinitions
{
"name": "[concat(parameters('workspace'),'/Microsoft.SecurityInsights/',variables('_dataConnectorContentIdConnectorDefinition'))]",
"apiVersion": "2022-09-01-preview",
"type": "Microsoft.OperationalInsights/workspaces/providers/dataConnectorDefinitions",
"location": "[parameters('workspace-location')]",
"kind": "Customizable",
"properties":
{
//Enter your data connector definition properties here
//"connectorUiConfig": {
// "graphQueriesTableName": "[variables('_logAnalyticsTableId1')]",
//},
}
},
// resource 3 section here
// resource section 3 - metadata
{
"name": "[concat(parameters('workspace'),'/Microsoft.SecurityInsights/',concat('DataConnector-', variables('_dataConnectorContentIdConnectorDefinition')))]",
"apiVersion": "2022-01-01-preview",
"type": "Microsoft.OperationalInsights/workspaces/providers/metadata",
"properties": {
"parentId": "[extensionResourceId(resourceId('Microsoft.OperationalInsights/workspaces', parameters('workspace')), 'Microsoft.SecurityInsights/dataConnectorDefinitions', variables('_dataConnectorContentIdConnectorDefinition'))]",
"contentId": "[variables('_dataConnectorContentIdConnectorDefinition')]",
"kind": "DataConnector",
"version": "[variables('dataConnectorVersionConnectorDefinition')]",
"source": {
"sourceId": "[variables('_solutionId')]",
"name": "[variables('_solutionName')]",
"kind": "Solution"
},
"author": {
"name": "[variables('_solutionAuthor')]"
},
"support": {
"name": "[variables('_solutionAuthor')]",
"tier": "[variables('_solutionTier')]"
},
"dependencies": {
"criteria": [
{
"version": "[variables('dataConnectorVersionConnections')]",
"contentId": "[variables('_dataConnectorContentIdConnections')]",
"kind": "ResourcesDataConnector"
}
]
}
}
},
// resource 4 section here
// resource section 4 - contentTemplates
{
"type": "Microsoft.OperationalInsights/workspaces/providers/contentTemplates",
"apiVersion": "2023-04-01-preview",
"name": "[concat(parameters('workspace'),'/Microsoft.SecurityInsights/', variables('dataConnectorTemplateNameConnections'), variables('dataConnectorVersionConnections'))]",
"location": "[parameters('workspace-location')]",
"dependsOn": [
"[extensionResourceId(resourceId('Microsoft.OperationalInsights/workspaces', parameters('workspace')), 'Microsoft.SecurityInsights/contentPackages', variables('_solutionId'))]"
],
"properties": {
"contentId": "[variables('_dataConnectorContentIdConnections')]",
"displayName": "[concat(variables('_solutionName'), variables('dataConnectorTemplateNameConnections'))]",
"contentKind": "ResourcesDataConnector",
"mainTemplate": {
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "[variables('dataConnectorVersionConnections')]",
"parameters":
// These parameters are used by the data connector primarily as properties for the administrator to enter in the UI when configuring the connector
{
"connectorDefinitionName": {
"defaultValue": "connectorDefinitionName",
"type": "string",
"minLength": 1
},
"workspace": {
"defaultValue": "[parameters('workspace')]",
"type": "string"
},
"dcrConfig": {
"defaultValue": {
"dataCollectionEndpoint": "data collection Endpoint",
"dataCollectionRuleImmutableId": "data collection rule immutableId"
},
"type": "object"
}
// Enter additional parameters, for example:
//"domainname": {
// "defaultValue": "domain name",
// "type": "string",
// "minLength": 1
//},
//"apikey": {
// "defaultValue": "",
// "type": "securestring",
// "minLength": 1
//}
},
"variables": {
"_dataConnectorContentIdConnections": "[variables('_dataConnectorContentIdConnections')]"
},
"resources": [
{
"name": "[concat(parameters('workspace'),'/Microsoft.SecurityInsights/',concat('DataConnector-', variables('_dataConnectorContentIdConnections')))]",
"apiVersion": "2022-01-01-preview",
"type": "Microsoft.OperationalInsights/workspaces/providers/metadata",
"properties": {
"parentId": "[extensionResourceId(resourceId('Microsoft.OperationalInsights/workspaces', parameters('workspace')), 'Microsoft.SecurityInsights/dataConnectors', variables('_dataConnectorContentIdConnections'))]",
"contentId": "[variables('_dataConnectorContentIdConnections')]",
"kind": "ResourcesDataConnector",
"version": "[variables('dataConnectorVersionConnections')]",
"source": {
"sourceId": "[variables('_solutionId')]",
"name": "[variables('_solutionName')]",
"kind": "Solution"
},
"author": {
"name": "[variables('_solutionAuthor')]"
},
"support": {
"name": "[variables('_solutionAuthor')]",
"tier": "[variables('_solutionTier')]"
}
}
},
{
"name": "[concat(parameters('workspace'),'/Microsoft.SecurityInsights/', 'MyDataConnector')]", // Replace the last part of the name with your data connector name
// To create several connections using this template, make the name dynamic. For example, use the 'concat' function to add the connector name with a GUID using the 'guid' function.
"apiVersion": "2022-12-01-preview",
"type": "Microsoft.OperationalInsights/workspaces/providers/dataConnectors",
"location": "[parameters('workspace-location')]",
"kind": "RestApiPoller",
"properties":
{
// Enter your data connector properties here. If you want to use UI parameters remember to escape the parameter like this: "[[parameters('paramName')]"
// Use parameters as needed. For example:
// "dataType": "My product security event API",
// "response": {
// "eventsJsonPaths": [
// "$"
// ],
// "format": "json"
// },
// "paging": {
// "pagingType": "LinkHeader"
// },
// "connectorDefinitionName": "[[parameters('connectorDefinitionName')]",
// "auth": {
// "apiKeyName": "Authorization",
// "ApiKey": "[[parameters('apikey')]",
// "apiKeyIdentifier": "SSWS",
// "type": "APIKey"
//} ,
// "request": {
// "apiEndpoint": "[[concat('https://',parameters('domainname'),'/api/v1/logs')]",
// "rateLimitQPS": 10,
// "queryWindowInMin": 5,
// "httpMethod": "GET",
// "retryCount": 3,
// "timeoutInSeconds": 60,
// "headers": {
// "Accept": "application/json",
// "User-Agent": "My-Data-Source"
// },
// "startTimeAttributeName": "since",
// "endTimeAttributeName": "until"
// },
// "dcrConfig": {
// "dataCollectionEndpoint": "[[parameters('dcrConfig').dataCollectionEndpoint]",
// "dataCollectionRuleImmutableId": "[[parameters('dcrConfig').dataCollectionRuleImmutableId]",
// "streamName": "Custom-ExampleConnectorAlerts_CL" //This input stream should be the same as the inputStream property configured for the DataCollectionRule
// },
// "isActive": true
}
}
]
},
"packageKind": "Solution",
"packageVersion": "[variables('_solutionVersion')]",
"packageName": "[variables('_solutionName')]",
"contentProductId": "[concat(substring(variables('_solutionId'), 0, 50),'-','rdc','-', uniqueString(concat(variables('_solutionId'),'-','ResourcesDataConnector','-',variables('_dataConnectorContentIdConnections'),'-', variables('dataConnectorVersionConnections'))))]",
"packageId": "[variables('_solutionId')]",
"contentSchemaVersion": "3.0.0",
"version": "[variables('_solutionVersion')]"
}
},
// resource 5 section here
// resource section 5 - contentPackages
{
"type": "Microsoft.OperationalInsights/workspaces/providers/contentPackages",
"name": "[concat(parameters('workspace'),'/Microsoft.SecurityInsights/', variables('_solutionId'))]",
"location": "[parameters('workspace-location')]",
"apiVersion": "2023-04-01-preview",
"properties": {
"version": "[variables('_solutionVersion')]",
"kind": "Solution",
"contentSchemaVersion": "3.0.0",
"contentId": "[variables('_solutionId')]",
"source": {
"kind": "Solution",
"name": "[variables('_solutionName')]",
"sourceId": "[variables('_solutionId')]"
},
"author": {
"name": "[variables('_solutionAuthor')]"
},
"support": {
"name": "[variables('_solutionAuthor')]"
},
"dependencies": {
"operator": "AND",
"criteria": [
{
"kind": "DataConnector",
"contentId": "[variables('dataConnectorVersionConnectorDefinition')]",
"version": "[variables('_dataConnectorContentIdConnectorDefinition')]"
}
]
},
"firstPublishDate": "2023-12-05",
"providers": [
"[variables('_solutionAuthor')]"
],
"contentKind": "Solution",
"packageId": "[variables('_solutionId')]",
"contentProductId": "[concat(substring(variables('_solutionId'), 0, 50),'-','sl','-', uniqueString(concat(variables('_solutionId'),'-','Solution','-',variables('_solutionId'),'-', variables('_solutionVersion'))))]",
"displayName": "[variables('_solutionName')]",
"publisherDisplayName": "[variables('_solutionId')]",
"descriptionHtml": "test",
"icon": "[variables('_packageIcon')]"
}
}
// that's the end!
]
}
Verwandte Inhalte
Weitere Informationen finden Sie unter