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 zur Datenerfassung in Microsoft Sentinel zu entwickeln.
Connectors, die mit dem CCF erstellt wurden, sind vollständig SaaS, ohne Anforderungen für Dienstinstallationen. Sie umfassen auch die Zustandsüberwachung und umfassende Unterstützung durch Microsoft Sentinel.
Führen Sie die folgenden Schritte aus, um Ihren CCF-Connector zu erstellen und Ihre Datenquelle mit Microsoft Sentinel zu verbinden.
- Erstellen des Datenconnectors
- Erstellen der ARM-Vorlage
- Bereitstellen des Connectors
- Verbinden Sie Microsoft Sentinel mit Ihrer Datenquelle und beginnen Sie mit der Datenerfassung.
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 ein Softwareentwicklungspartner sind und Unterstützung beim Erstellen eines CCF-Datenconnectors benötigen, wenden Sie sich an das Microsoft Sentinel-Partnerteam, um AzureSentinelPartner@microsoft.com Unterstützung zu erhalten.
Wie unterscheidet sich dieser CCF von der vorherigen Version?
Die erste Version des CCF wurde im Januar 2022 angekündigt . Seitdem haben wir die Plattform weiterentwickelt, und die Legacy-Version wird nicht mehr empfohlen. Diese neue Version der CCF hat die folgenden wichtigsten Verbesserungen:
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
Bevor Sie einen Konnektor erstellen, sollten Sie Ihre Datenquelle verstehen und wissen, wie Microsoft Sentinel eine Verbindung mit ihr herstellen muss.
Datensammlungsendpunkt (Data Collection Endpoint, DCE)
Ein DCE ist eine Anforderung für einen DCR. Je DCR-Bereitstellung eines 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 ist eine Authentifizierung erforderlich.
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 von Visual Studio Marketplace
- PowerShell Invoke-RestMethod
- Microsoft Edge – Netzwerkkonsolentool
- Bruno
- curl
Caution
Für Szenarien, in denen Sie vertrauliche Daten haben, z. B. Anmeldeinformationen, Geheime Schlüssel, Zugriffstoken, API-Schlüssel und andere ähnliche Informationen, stellen Sie sicher, dass Sie ein Tool verwenden, das Ihre Daten mit den erforderlichen Sicherheitsfeatures schützt, offline oder lokal funktioniert, Ihre Daten nicht mit der Cloud synchronisiert und nicht erfordert, dass Sie sich bei einem Onlinekonto anmelden. Auf diese Weise reduzieren Sie das Risiko, vertrauliche Daten der Öffentlichkeit offen zu stellen.
Erstellen des Datenconnectors
Tipp
Wenn Sie ein unabhängiger Softwareanbieter (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 zu kontaktieren, 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 Datenkonnektors
- Regeln für die Verbindung von Datenkonnektoren
Jede Komponente verfügt über einen Abschnitt, in dem der Zu erstellende und zu überprüfende Prozess beschrieben wird. Verwenden Sie das JSON aus jeder Komponente für die abschließende Paketierung 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 für die Datentransformation für benutzerdefinierte Datenkonnektoren.
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 die DCR erstellt, falls sie noch nicht vorhanden ist.
Die neuesten Informationen zu DCRs finden Sie in diesen Artikeln:
Ein Tutorial zur Erstellung einer DCE, einschließlich der Verwendung von Beispieldaten zum Erstellen der benutzerdefinierten Tabelle und der DCR, finden Sie unter Tutorial: Senden von Daten an Azure Monitor-Protokolle mit der Logs-Erfassungs-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 Datenkonnektors
Diese Komponente stellt die Benutzeroberfläche für den Datenkonnektor im Datenkonnektorkatalog von Microsoft Sentinel dar. Jeder Datenconnector kann nur eine Ui-Definition aufweisen.
Erstellen Sie die Benutzeroberfläche für den Datenconnector mit der API „Data Connector Definition“. Verwenden Sie die Referenz für Datenkonnektordefinitionen als Ergänzung, die die API-Elemente ausführlicher erläutert.
Hinweise:
- Die
kind-Eigenschaft für den Connector für API-Abfragen sollte immerCustomizablesein. - Da es sich um eine Art von API-Polling-Connector handelt, setzen Sie den
connectivityCriteria-Typ aufhasDataConnectors - 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 hierzu finden Sie im Beispielabschnitt zur Referenz für Datenconnectordefinitionen.
Datenverbindungsregeln
Zurzeit sind drei Arten von Datenverbindungsregeln zum Definieren des CCF-Datenkonnektors möglich.
-
RestApiPollermit kind können Sie Paging, Autorisierung und erwartete Anforderungs-/Antwortnutzlasten für Ihre Datenquelle anpassen. Weitere Informationen finden Sie unter Referenz zu den Verbindungsregeln des RestApiPoller-Datenconnectors. -
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 unter Referenz der Verbindungsregeln für den GCP-Datenkonnektor. -
StorageAccountBlobContainerDer Typ ermöglicht es Ihnen, Daten aus einer Azure Storage Blob-Datenquelle zu importieren. Weitere Informationen finden Sie in der API-Referenz zu Azure Storage Blob Connectors.
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.
Vertrauliche Eingaben schützen
Unabhängig davon, welche Authentifizierung von Ihrem CCF-Datenconnector verwendet wird, führen Sie diese Schritte aus, um sicherzustellen, dass vertrauliche Informationen sicher bleiben. Ziel ist es, Anmeldeinformationen von der ARM-Vorlage an das CCF weiterzugeben, ohne lesbare vertrauliche Objekte in Ihrem Bereitstellungsverlauf zu hinterlassen.
Label erstellen
Die Definition des Datenconnectors erstellt ein Benutzeroberflächenelement, das zur Eingabe von Sicherheitsanmeldeinformationen auffordert. Wenn sich Ihr Datenconnector beispielsweise mit OAuth gegenüber einer Protokollquelle authentifiziert, enthält der Definitionsabschnitt Ihres Datenconnectors in den Anweisungen den OAuthForm-Typ. Dies konfiguriert die ARM-Vorlage so, dass sie zur Eingabe der Anmeldeinformationen auffordert.
"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
Die Anmeldeinformationen werden vom CCF im Datenconnectorbereich verwendet.
"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"
}
},
Note
Die seltsame Syntax für das Anmeldeinformationsobjekt "ClientSecret": "[[parameters('Password')]", ist kein Tippfehler!
Um die Bereitstellungsvorlage zu erstellen, die ebenfalls Parameter verwendet, müssen Sie die Parameter in diesem Abschnitt mit einem zusätzlichen einleitenden[ maskieren. 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 Sie die Bereitstellungsvorlage
Paketieren Sie eine Azure Resource Management (ARM)-Vorlage manuell und verwenden Sie dabei die Beispielcode für Vorlagen als Leitfaden. Diese Codebeispiele sind durch ARM-Vorlagenabschnitte unterteilt, die Sie zusammenfügen müssen.
Wenn Sie einen Datenkonnektor für die Google Cloud Platform (GCP) in CCF erstellen, verpacken Sie die Bereitstellungsvorlage mithilfe der Beispielvorlage für GCP CCF. Informationen zum Ausfüllen der GCP CCF-Vorlage finden Sie in der Referenz zu GCP-Datenkonnektorverbindungsregeln.
Zusätzlich zu den Beispielvorlagen verwenden bereitgestellte Lösungen, die im Microsoft Sentinel-Inhaltshub verfügbar sind, die CCF für ihre Daten-Connectors. 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 CCF-Datenkonnektor
- Ermes Browser Security
- Palo Alto Prisma Cloud CWPP
- Sophos Endpoint Protection
- Arbeitstag
- Atlassian Jira
- Okta Single Sign-On
GCP Beispiele für CCF-Datenkonnektor
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 und die benutzerdefinierte Tabelle werden bei 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.
Netzwerkisolation für die Protokollierungsquelle beibehalten
Wenn Ihre Protokollierungsquelle eine Netzwerkisolation erfordert, konfigurieren Sie eine Zulassungsliste mit öffentlichen IP-Adressen, die von der CCF verwendet werden.
Virtuelle Azure-Netzwerke verwenden Diensttags, um die Netzwerkzugriffssteuerung zu definieren. Für das 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 Sie den codefreien Connector
Zeigen Sie Ihren codelosen Connector im Datenconnectorkatalog an. Öffnen Sie den Datenkonnektor und geben Sie alle Authentifizierungsparameter ein, die zum Herstellen der 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.
Note
Es kann bis zu 30 Minuten dauern, bis Daten eingehen.
Example
Jeder Schritt beim Erstellen des codelosen Connectors wird in den folgenden Beispielabschnitten dargestellt.
- Beispieldaten
- Benutzerdefinierte Beispieltabelle
- Beispiel für eine Datensammlungsregel
- Beispiel für eine UI-Definition eines Datenkonnektors
- Beispiel für Datenverbindungsregeln
- Beispieldaten mit Beispielvorlage verwenden
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 seinen KQL-Transformationen zusammengeführt. Die Beispiele für die Definition der Benutzeroberfläche des Datenconnectors und für die Verbindungsregeln basieren weiterhin auf derselben Beispieldatenquelle. Schließlich verwendet die Lösungsvorlage alle diese Beispielkomponenten, um von Anfang bis Ende die Erstellung des Beispiel-CCF-Datenconnectors zu demonstrieren.
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"
}
]
}
}
Beispiel für die Definition der Benutzeroberfläche eines Datenkonnektors
Dieses Beispiel befindet sich in der Referenz zu Datenconnectordefinitionen.
Beispiel-Verbindungsregeln für Datenkonnektoren
Dieses Beispiel befindet sich in der Referenz der Data connectors.
ARM-Beispielvorlage
Erstellen Sie die ARM-Bereitstellungsvorlage mit der folgenden Struktur, die die vier Abschnitte von 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 etwa bei Kommas sowie schließenden eckigen und runden 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.
Warning
Verwenden Sie securestring für alle Passwörter und Geheimwerte in Objekten, die nach der Bereitstellung der Ressource lesbar sind.
Weitere Informationen finden Sie unter Vertrauliche Eingaben schützen 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
Es gibt 5 ARM-Bereitstellungsressourcen in diesem Vorlagenhandbuch, die die 4 CCF-Datenkonnektor-Gebäudekomponenten enthalten.
-
contentTemplates (eine übergeordnete Ressource)
- metadata
- dataCollectionRules: Weitere Informationen finden Sie unter Datensammlungsregel.
- Tabellen – Weitere Informationen finden Sie unter Definition der Ausgabetabelle.
- dataConnectorDefinitions : Weitere Informationen finden Sie unter Benutzeroberfläche des Datenconnectors.
- Metadaten
-
contentTemplates
- metadata
- 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