Share via


Een connector zonder code maken voor Microsoft Sentinel (openbare preview)

Het Codeless Verbinding maken or Platform (CCP) biedt partners, geavanceerde gebruikers en ontwikkelaars de mogelijkheid om aangepaste connectors te maken voor het opnemen van gegevens naar Microsoft Sentinel.

Verbinding maken ors die zijn gemaakt met behulp van de CTP, zijn volledig SaaS, zonder dat er vereisten zijn voor service-installaties. Ze omvatten ook statuscontrole en volledige ondersteuning van Microsoft Sentinel.

Belangrijk

De CTP (Codeless Verbinding maken or Platform) is momenteel in preview. De Aanvullende voorwaarden voor Azure-previews omvatten aanvullende juridische voorwaarden die van toepassing zijn op Azure-functies die in bèta of preview zijn of die anders nog niet algemeen beschikbaar zijn.

Gebruik de volgende stappen om uw CCP-connector te maken en uw gegevensbron te verbinden met Microsoft Sentinel

  • De gegevensconnector bouwen
  • Het ARM-sjabloon maken
  • De connector implementeren
  • Verbinding maken Microsoft Sentinel naar uw gegevensbron en begin met het opnemen van gegevens

In dit artikel wordt uitgelegd hoe u elke stap kunt voltooien en een voorbeeld van een connector zonder code kunt opgeven die u onderweg kunt bouwen.

Hoe verschilt deze CTP van de vorige versie?

De eerste versie van de CTP werd aangekondigd in januari 2022. Sindsdien zijn we verbeterd op het platform en wordt de verouderde release niet meer aanbevolen. Deze nieuwe versie van de CTP heeft de volgende belangrijke verbeteringen:

  1. Betere ondersteuning voor verschillende verificatie- en pagineringstypen.

  2. Ondersteunt standaardregels voor gegevensverzameling (DCR's).

  3. De gebruikersinterface en verbindingsconfiguratiegedeelten van de connector zonder code zijn nu gescheiden. Hiermee kunt u connectors maken met meerdere verbindingen die eerder niet mogelijk waren.

Vereisten

Voordat u een connector bouwt, moet u inzicht hebben in uw gegevensbron en hoe Microsoft Sentinel verbinding moet maken.

  1. Eindpunt voor gegevensverzameling (DCE)

    Een DCE is een vereiste voor een DCR. Er wordt slechts één DCE gemaakt per DCR-implementatie van de Log Analytics-werkruimte. Elke DCR die is geïmplementeerd voor een Microsoft Sentinel-werkruimte, maakt gebruik van dezelfde DCE. Zie Eindpunten voor gegevensverzameling in Azure Monitor voor meer informatie over het maken van een eindpunt of of u een nieuwe nodig hebt.

  2. Schema van de uitvoertabel(s).

    Het is belangrijk om inzicht te hebben in de vorm van uw gegevensstroom en de velden die u wilt opnemen in de uitvoertabel. Raadpleeg de documentatie van uw gegevensbron of analyseer voldoende uitvoervoorbeelden.

Onderzoek de volgende onderdelen en controleer de ondersteuning voor deze onderdelen in de naslaginformatie over de Data Verbinding maken or-API:

  1. HTTP-aanvraag- en antwoordstructuur voor de gegevensbron

  2. Verificatie vereist voor de gegevensbron.
    Als voor uw gegevensbron bijvoorbeeld een token is vereist dat is ondertekend met een certificaat, wordt de API-verwijzing voor de gegevensconnector opgegeven dat certificaatverificatie niet wordt ondersteund.

  3. Opties voor paginering voor de gegevensbron

We raden ook een hulpprogramma zoals Postman aan om de onderdelen van de gegevensconnector te valideren. Zie Postman gebruiken met de Microsoft Graph API voor meer informatie.

De gegevensconnector bouwen

Er zijn vier onderdelen vereist om de CCP-gegevensconnector te bouwen.

  1. Definitie van uitvoertabel
  2. Regel voor gegevensverzameling (DCR)
  3. Gebruikersinterface van gegevensconnector
  4. Verbindingsregels voor gegevensconnector

Elk onderdeel bevat een sectie met informatie over het proces dat moet worden gemaakt en gevalideerd. Neem de JSON van elk onderdeel voor de uiteindelijke verpakking van de ARM-sjabloon.

Definitie van uitvoertabel

Tip

Sla deze stap over als uw gegevens alleen worden opgenomen in standaard Log Analytics-tabellen. Voorbeelden van standaardtabellen zijn CommonSecurityLog en ASimDnsActivityLogs. Zie De ondersteuning voor gegevenstransformatie voor aangepaste gegevensconnectors voor meer informatie over de volledige lijst met ondersteunde standaardgegevenstypen.

Als uw gegevensbron niet voldoet aan het schema van een standaardtabel, hebt u twee opties:

  • Een aangepaste tabel maken voor alle gegevens
  • Een aangepaste tabel maken voor sommige gegevens en gegevens splitsen die voldoen aan een standaardtabel

Gebruik de Log Analytics-gebruikersinterface voor een eenvoudige methode om samen met een DCR een aangepaste tabel te maken. Als u de aangepaste tabel maakt met behulp van de Tables-API of een andere programmatische methode, voegt u het _CL achtervoegsel handmatig toe aan de tabelnaam. Zie Een aangepaste tabel maken voor meer informatie.

Zie de voorbeeldgegevens en de aangepaste voorbeeldtabel die voor die gegevens zijn gemaakt voor meer dan één tabel voor meer informatie over het splitsen van uw gegevens.

Regel voor gegevensverzameling

Regels voor gegevensverzameling (DCR's) definiëren het proces voor gegevensverzameling in Azure Monitor. DCR's geven aan welke gegevens moeten worden verzameld, hoe die gegevens moeten worden getransformeerd en waar die gegevens moeten worden verzonden.

  • Er is slechts één DCR die per gegevensconnector wordt geïmplementeerd.
  • Een DCR moet een bijbehorende DCE in dezelfde regio hebben.
  • Wanneer de CTP-gegevensconnector wordt geïmplementeerd, wordt de DCR gemaakt als deze nog niet bestaat.

Raadpleeg de meest recente informatie over DCR's in deze artikelen:

Zie zelfstudie: Gegevens verzenden naar Azure Monitor-logboeken met logboekopname-API (Azure Portal) voor een zelfstudie waarin het maken van een DCE wordt gedemonstreerd, inclusief het gebruik van voorbeeldgegevens om de aangepaste tabel en DCR te maken. Gebruik het proces in deze zelfstudie om te controleren of de gegevens correct zijn opgenomen in uw tabel met uw DCR.

Zie de sectie DCR-voorbeeld voor meer informatie over het maken van een complexe DCR met meerdere gegevensstromen.

Gebruikersinterface van gegevensconnector

Met dit onderdeel wordt de gebruikersinterface voor de gegevensconnector weergegeven in de galerie met Microsoft Sentinel-gegevensconnectors. Elke gegevensconnector heeft mogelijk slechts één definitie van de gebruikersinterface.

Bouw de gebruikersinterface van de gegevensconnector met de Data Verbinding maken or Definition-API. Gebruik de naslaginformatie over definities van de gegevensconnector als aanvulling om de API-elementen in meer detail uit te leggen.

Opmerkingen:

  1. De kind eigenschap voor de API-polling-connector moet altijd zijn Customizable.
  2. Omdat dit een type API-polling-connector is, stelt u het connectivityCriteria type in op hasDataConnectors
  3. Het voorbeeld instructionsSteps bevat een knop van het type ConnectionToggleButton. Met deze knop kunt u de implementatie van regels voor gegevensconnector activeren op basis van de opgegeven verbindingsparameters.

Gebruik Postman om de API voor definities van gegevensconnectors aan te roepen om de gebruikersinterface van de gegevensconnector te maken om deze te valideren in de galerie met gegevensconnectors.

Zie de sectie met definities van gegevensconnector als u meer wilt weten over een voorbeeld.

Regels voor gegevensverbinding

In dit gedeelte worden de verbindingsregels gedefinieerd, waaronder:

  • Polling
  • verificatie
  • Paging

Zie de naslaginformatie over verbindingsregels voor gegevensconnector voor meer informatie over het bouwen van deze sectie.

Zie het voorbeeld van de verbindingsregels voor de gegevensconnector voor meer informatie uit een voorbeeld.

Gebruik Postman om de gegevensconnector-API aan te roepen om de gegevensconnector te maken die de verbindingsregels en vorige onderdelen combineert. Controleer of de connector nu is verbonden in de gebruikersinterface.

Vertrouwelijke invoer beveiligen

Ongeacht welke verificatie wordt gebruikt door uw CCP-gegevensconnector, voert u deze stappen uit om ervoor te zorgen dat vertrouwelijke informatie veilig blijft. Het doel is om referenties van de ARM-sjabloon door te geven aan de CCP zonder leesbare vertrouwelijke objecten in uw implementatiegeschiedenis te verlaten.

Label maken

De definitie van de gegevensconnector maakt een UI-element om te vragen om beveiligingsreferenties. Als uw gegevensconnector bijvoorbeeld wordt geverifieerd bij een logboekbron met OAuth, bevat de definitiesectie van uw gegevensconnector het OAuthForm type in de instructies. Hiermee stelt u de ARM-sjabloon in om om de referenties te vragen.

"instructions": [
    {
        "type": "OAuthForm",
        "parameters": {
        "UsernameLabel": "Username",
        "PasswordLabel": "Password",
        "connectButtonLabel": "Connect",
        "disconnectButtonLabel": "Disconnect"
        }
    }
],

Vertrouwelijke invoer opslaan

Een sectie van de ARM-implementatiesjabloon biedt een plek waar de beheerder de gegevensconnector implementeert om het wachtwoord in te voeren. Gebruik securestring deze functie om de vertrouwelijke informatie beveiligd te houden in een object dat na de implementatie niet leesbaar is. Zie Beveiligingsaanaanveling voor parameters voor meer informatie.

"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
    }
}

De beveiligdestringsobjecten gebruiken

Ten slotte maakt de CTP gebruik van de referentieobjecten in de sectie gegevensconnector.

"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"
    }
},

Notitie

De vreemde syntaxis voor het referentieobject is "ClientSecret": "[[parameters('Password')]", geen typefout. Als u de implementatiesjabloon wilt maken die ook gebruikmaakt van parameters, moet u de parameters in die sectie escapen met een extra begin[. Hierdoor kunnen de parameters een waarde toewijzen op basis van de interactie van de gebruiker met de connector.

Zie Sjabloonexpressies escape-tekens voor meer informatie.

De implementatiesjabloon maken

Een ARM-sjabloon (Azure Resource Management) handmatig verpakken met behulp van de voorbeeldsjabloon als handleiding.

Naast de voorbeeldsjabloon gebruiken gepubliceerde oplossingen die beschikbaar zijn in de Microsoft Sentinel-inhoudshub de CTP voor hun gegevensconnector. Bekijk de volgende oplossingen als meer voorbeelden van het samenvoegen van de onderdelen in een ARM-sjabloon.

De connector implementeren

Implementeer uw connector zonder code als een aangepaste sjabloon.

Tip

Verwijder resources die u in de vorige stappen hebt gemaakt. De DCR en de aangepaste tabel worden gemaakt met de implementatie. Als u deze resources niet verwijdert voordat u deze implementeert, is het moeilijker om uw sjabloon te verifiëren.

  1. Kopieer de inhoud van de ARM-implementatiesjabloon.
  2. Volg de instructies voor sjablonen bewerken en implementeren in het artikel, quickstart: ARM-sjablonen maken en implementeren met behulp van Azure Portal.

Netwerkisolatie onderhouden voor logboekregistratiebron

Als uw logboekregistratiebron netwerkisolatie vereist, configureert u een acceptatielijst met openbare IP-adressen die door de CTP worden gebruikt.

Virtuele Azure-netwerken gebruiken servicetags om besturingselementen voor netwerktoegang te definiëren. Voor de CCP is dat servicelabel Scuba.

Zie De Service Tag Discovery-API gebruiken om het huidige IP-bereik te vinden dat is gekoppeld aan de Scuba-servicetagtag.

De connector zonder code controleren

Bekijk uw connector zonder code in de galerie met gegevensconnectors. Open de gegevensconnector en voltooi alle verificatieparameters die nodig zijn om verbinding te maken. Zodra de verbinding tot stand is gebracht, worden de DCR- en aangepaste tabellen gemaakt. Bekijk de DCR-resource in uw resourcegroep en eventuele aangepaste tabellen uit de werkruimte logboekanalyse.

Notitie

Het kan tot 30 minuten duren voordat de gegevens worden opgenomen.

Opmerking

Elke stap bij het bouwen van de connector zonder code wordt weergegeven in de volgende voorbeeldsecties.

Om een complexe gegevensbron met opname naar meer dan één tabel te demonstreren, bevat dit voorbeeld een uitvoertabelschema en een DCR met meerdere uitvoerstromen. In het DCR-voorbeeld worden deze samengebracht met de KQL-transformaties. Voorbeelden van ui-definitie en verbindingsregels van de gegevensconnector gaan verder vanuit dezelfde voorbeeldgegevensbron. Ten slotte gebruikt de oplossingssjabloon al deze voorbeeldonderdelen om end-to-end weer te geven hoe de CTP-voorbeeldgegevensconnector moet worden gemaakt.

Voorbeeldgegevens

Een gegevensbron retourneert de volgende JSON bij het maken van verbinding met het eindpunt.

[
        {
        "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"
        }
]

Dit antwoord bevat eventTypewaarschuwingen en bestanden. De bestandsgebeurtenissen moeten worden opgenomen in de genormaliseerde standaardtabel, AsimFileEventLogs, terwijl de waarschuwingsgebeurtenissen in een aangepaste tabel moeten worden opgenomen.

Voorbeeld van aangepaste tabel

Zie Tabellen-API voor meer informatie over de structuur van deze tabel. Aangepaste namen van logboektabellen moeten een _CL achtervoegsel hebben.

{
"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"
        }
        ]
      }
    }
}

Voorbeeldregel voor gegevensverzameling

De volgende DCR definieert één stream Custom-ExampleConnectorInput met behulp van de voorbeeldgegevensbron en transformeert de uitvoer in twee tabellen.

  1. De eerste gegevensstroom leidt eventType = Waarschuwing naar de aangepaste ExampleConnectorAlerts_CL tabel.
  2. de tweede gegevensstroom leidt eventType = bestand naar de genormaliseerde standaardtabel.ASimFileEventLogs

Zie Structuur van een regel voor gegevensverzameling voor meer informatie over de structuur van dit voorbeeld.

Als u deze DCR wilt maken in een testomgeving, volgt u de API voor regels voor gegevensverzameling. Elementen van het voorbeeld in {{double curly braces}} geven variabelen aan die waarden vereisen met gebruiksgemak voor Postman. Wanneer u deze resource maakt in de ARM-sjabloon, worden de variabelen die hier worden uitgedrukt, uitgewisseld voor parameters.

{
  "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"
      }
    ]
  }
}

Voorbeeld van gebruikersinterfacedefinitie voor gegevensconnector

Dit voorbeeld bevindt zich in de naslaginformatie over definities van de gegevensconnector.

Voorbeeld van verbindingsregels voor gegevensconnector

Dit voorbeeld bevindt zich in de naslaginformatie over gegevensconnectors.

Voorbeeld van EEN ARM-sjabloon

Bouw de ARM-implementatiesjabloon met de volgende structuur, waaronder de vier secties van JSON-onderdelen die nodig zijn om de CCP-gegevensconnector te bouwen:

{
    "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {},
    "variables": {},
    "resources": [],
}

Steek de secties samen met een JSON-bewuste editor, zoals Visual Code, om syntaxisfouten, zoals komma's, haakjes en haakjes te minimaliseren.

Opmerkingen worden weergegeven in de metagegevensdescription of inline met // opmerkingsopmerkingen om het proces voor het bouwen van sjablonen te begeleiden. Zie best practices voor ARM-sjablonen - opmerkingen voor meer informatie.

Overweeg om de ARM-sjabloontesttoolkit (arm-ttk) te gebruiken om de sjabloon te valideren die u bouwt. Zie arm-ttk voor meer informatie.

Voorbeeld van ARM-sjabloon - parameters

Zie Parameters in ARM-sjablonen voor meer informatie.

Waarschuwing

Gebruik securestring deze functie voor alle wachtwoorden en geheimen in objecten die kunnen worden gelezen na de implementatie van resources. Zie Aanbevelingen voor vertrouwelijke invoer en beveiliging beveiligen voor parameters voor meer informatie.

{
    "$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
}

Voorbeeld van ARM-sjabloon - variabelen

Deze aanbevolen variabelen helpen de sjabloon te vereenvoudigen. Gebruik indien nodig meer of minder. Zie Variabelen in ARM-sjablonen voor meer informatie.

    "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

Voorbeeld van ARM-sjabloon - resources

Deze sjabloonhandleiding bevat vijf ARM-implementatiebronnen waarin de onderdelen van de 4 CTP-gegevensconnector worden gebouwd.

  1. contentTemplates (een bovenliggende resource)
    • metagegevens
    • dataCollectionRules - Zie de regel voor gegevensverzameling voor meer informatie.
    • tabellen: zie de definitie van de uitvoertabel voor meer informatie.
  2. data Verbinding maken orDefinitions: zie de gebruikersinterface van de gegevensconnector voor meer informatie.
  3. metagegevens
  4. contentTemplates
  5. 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!
    ]
}

Volgende stappen

Zie voor meer informatie