Vytvoření bezkódového konektoru pro Microsoft Sentinel (Public Preview)

Codeless Připojení or Platform (CCP) poskytuje partnerům, pokročilým uživatelům a vývojářům možnost vytvářet vlastní konektory pro příjem dat do Microsoft Sentinelu.

Připojení ory vytvořené pomocí ústřední protistrany jsou plně SaaS, bez požadavků na instalace služeb. Zahrnují také monitorování stavu a plnou podporu z Microsoft Sentinelu.

Důležité

Codeless Připojení or Platform (CCP) je v současné době ve verzi PREVIEW. Dodatkové podmínky Azure Preview zahrnují další právní podmínky, které se vztahují na funkce Azure, které jsou v beta verzi, preview nebo které ještě nejsou vydány v obecné dostupnosti.

Pomocí následujícího postupu vytvořte konektor PRO ÚSTŘEDNÍ PROTISTRANu a připojte zdroj dat ke službě Microsoft Sentinel.

  • Sestavení datového konektoru
  • Vytvoření šablony ARM
  • Nasazení konektoru
  • Připojení Microsoft Sentinelu ke zdroji dat a zahájení ingestování dat

V tomto článku se dozvíte, jak provést jednotlivé kroky a poskytnout ukázkový konektor bez kódu, který se má sestavit.

Jak se tato ústřední protistrana liší od předchozí verze?

Původní verze ústřední protistrany byla oznámena v lednu 2022. Od té doby jsme vylepšili platformu a starší verze se už nedoporučuje. Tato nová verze ústřední protistrany má následující klíčová vylepšení:

  1. Lepší podpora pro různé typy ověřování a stránkování

  2. Podporuje standardní pravidla shromažďování dat (DCR).

  3. Části konfigurace uživatelského rozhraní a připojení konektoru bez kódu jsou teď oddělené. To umožňuje vytvářet konektory s více připojeními, která nebyla dříve možná.

Požadavky

Než začnete vytvářet konektor, porozumíte zdroji dat a tomu, jak se Microsoft Sentinel potřebuje připojit.

  1. Koncový bod shromažďování dat (DCE)

    DCE je požadavek na DCR. Pro nasazení DCR pracovního prostoru služby Log Analytics se vytvoří jenom jeden DCE. Každý DCR nasazený pro pracovní prostor Microsoft Sentinelu používá stejný DCE. Další informace o tom, jak vytvořit jeden nebo jestli potřebujete nový, najdete v tématu Koncové body shromažďování dat ve službě Azure Monitor.

  2. Schéma výstupních tabulek

    Je důležité porozumět tvaru datového streamu a polím, která chcete zahrnout do výstupní tabulky. Odkazujte na dokumentaci ke zdroji dat nebo analyzujte dostatečné příklady výstupu.

Projděte si následující komponenty a ověřte jejich podporu v referenčních informacích k rozhraní API služby Data Připojení or:

  1. Struktura požadavků a odpovědí HTTP pro zdroj dat

  2. Ověřování vyžadované zdrojem dat
    Pokud například váš zdroj dat vyžaduje token podepsaný certifikátem, referenční informace k rozhraní API datového konektoru určují ověřování certifikátů se nepodporuje.

  3. Možnosti stránkování zdroje dat

K ověření komponent datového konektoru také doporučujeme nástroj, jako je Postman. Další informace najdete v tématu Použití nástroje Postman s rozhraním Microsoft Graph API.

Sestavení datového konektoru

K sestavení datového konektoru ÚSTŘEDNÍ PROTISTRANy jsou potřeba 4 komponenty.

  1. Definice výstupní tabulky
  2. Pravidlo shromažďování dat (DCR)
  3. Uživatelské rozhraní datového konektoru
  4. Pravidla připojení datového konektoru

Každá komponenta obsahuje oddíl, který podrobně popisuje proces vytvoření a ověření. Převezměte JSON z každé komponenty pro konečné balení šablony ARM.

Definice výstupní tabulky

Tip

Tento krok přeskočte, pokud se vaše data ingestují jenom do standardních tabulek Log Analytics. Mezi příklady standardních tabulek patří CommonSecurityLog a ASimDnsActivityLogs. Další informace o úplném seznamu podporovaných standardních datových typů najdete v tématu Podpora transformace dat pro vlastní datové konektory.

Pokud zdroj dat neodpovídá schématu standardní tabulky, máte dvě možnosti:

  • Vytvoření vlastní tabulky pro všechna data
  • Vytvoření vlastní tabulky pro některá data a rozdělení odpovídajících dat do standardní tabulky

Pomocí uživatelského rozhraní Log Analytics můžete přímou metodu vytvořit vlastní tabulku společně s DCR. Pokud vytvoříte vlastní tabulku pomocí rozhraní TABLE API nebo jiné programové metody, přidejte příponu _CL ručně do názvu tabulky. Další informace najdete v tématu Vytvoření vlastní tabulky.

Další informace o rozdělení dat na více než jednu tabulku najdete v ukázkových datech a ukázkové vlastní tabulce vytvořené pro tato data.

Pravidlo shromažďování dat

Pravidla shromažďování dat (DCR) definují proces shromažďování dat ve službě Azure Monitor. Řadiče domény určují, jaká data se mají shromažďovat, jak tato data transformovat a kam se mají tato data odesílat.

  • Na datový konektor se nasadí jenom jeden řadič domény.
  • Řadič domény musí mít odpovídající řadič domény ve stejné oblasti.
  • Po nasazení datového konektoru PRO ÚSTŘEDNÍ PROTISTRANu se dcR vytvoří, pokud ještě neexistuje.

Nejnovější informace o dcR najdete v těchto článcích:

Kurz demonstrující vytvoření DCE, včetně použití ukázkových dat k vytvoření vlastní tabulky a DCR, najdete v kurzu: Odeslání dat do protokolů služby Azure Monitor pomocí rozhraní API pro příjem protokolů (Azure Portal). Pomocí procesu v tomto kurzu ověřte, že se data správně ingestují do vaší tabulky pomocí dcR.

Pokud chcete zjistit, jak vytvořit komplexní DCR s více toky dat, přečtěte si ukázkovou část DCR.

Uživatelské rozhraní datového konektoru

Tato komponenta vykreslí uživatelské rozhraní datového konektoru v galerii datových konektorů Microsoft Sentinelu. Každý datový konektor může mít pouze jednu definici uživatelského rozhraní.

Sestavte uživatelské rozhraní datového konektoru pomocí rozhraní API pro definicidatového Připojení oru. K podrobnějšímu vysvětlení prvků rozhraní API použijte odkazy na definice datového konektoru jako doplněk.

Poznámky:

  1. Vlastnost kind konektoru pro dotazování rozhraní API by měla být Customizablevždy .
  2. Vzhledem k tomu, že se jedná o typ konektoru dotazování rozhraní API, nastavte typ na connectivityCriteriahasDataConnectors
  3. instructionsSteps Příklad obsahuje tlačítko typu ConnectionToggleButton. Toto tlačítko pomáhá aktivovat nasazení pravidel datového konektoru na základě zadaných parametrů připojení.

Pomocí nástroje Postman můžete volat rozhraní API pro definice datových konektorů k vytvoření uživatelského rozhraní datového konektoru, abyste ho ověřili v galerii datových konektorů.

Pokud se chcete naučit z příkladu, podívejte se na ukázkovou část s definicemi datového konektoru.

Pravidla datového připojení

Tato část definuje pravidla připojení, mezi která patří:

  • Dotazování
  • ověřování
  • Stránkování

Další informace o vytváření této části najdete v referenčních informacích k pravidlům připojení datového konektoru.

Informace z příkladu najdete v referenčním příkladu pravidel připojení datového konektoru.

Pomocí nástroje Postman volejte rozhraní API datového konektoru k vytvoření datového konektoru, který kombinuje pravidla připojení a předchozí komponenty. Ověřte, že je konektor připojený v uživatelském rozhraní.

Zabezpečení důvěrného vstupu

Bez ohledu na to, co datový konektor PRO ÚSTŘEDNÍ PROTISTRANu používá, proveďte tyto kroky, abyste zajistili zabezpečení důvěrných informací. Cílem je předat přihlašovací údaje ze šablony ARM ústřední protistraně, aniž byste museli nechat čitelné důvěrné objekty v historii nasazení.

Vytvoření popisku

Definice datového konektoru vytvoří prvek uživatelského rozhraní, který zobrazí výzvu k zadání přihlašovacích údajů zabezpečení. Pokud se například datový konektor ověřuje ve zdroji protokolů pomocí OAuth, část definice datového konektoru obsahuje OAuthForm typ v pokynech. Tím se šablona ARM nastaví tak, aby se zobrazila výzva k zadání přihlašovacích údajů.

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

Ukládání důvěrných vstupů

Část šablony nasazení ARM poskytuje místo pro správce, který nasazuje datový konektor, aby zadal heslo. Slouží securestring k zachování důvěrných informací zabezpečených v objektu, který není po nasazení čitelný. Další informace najdete v tématu Doporučení zabezpečení pro parametry.

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

Použití objektů securestring

Ústřední protistrana nakonec využívá objekty přihlašovacích údajů v části datového konektoru.

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

Poznámka:

Zvláštní syntaxe objektu "ClientSecret": "[[parameters('Password')]", přihlašovacích údajů není překlep! Pokud chcete vytvořit šablonu nasazení, která také používá parametry, musíte uvodit parametry v této části s dodatečným spuštěním[. To umožňuje parametrům přiřadit hodnotu na základě interakce uživatele s konektorem.

Další informace naleznete v tématu Výrazy šablony řídicí znaky.

Vytvoření šablony nasazení

Šablonu Azure Resource Management (ARM) můžete ručně zabalit pomocí ukázkové šablony jako průvodce.

Kromě ukázkové šablony používají publikovaná řešení dostupná v centru obsahu Microsoft Sentinel pro svůj datový konektor ústřední protistranu. V následujících řešeních si projděte další příklady, jak spojit komponenty do šablony ARM.

Nasazení konektoru

Nasaďte konektor bez kódu jako vlastní šablonu.

Tip

Odstraňte prostředky, které jste vytvořili v předchozích krocích. Pomocí nasazení se vytvoří DCR a vlastní tabulka. Pokud tyto prostředky před nasazením neodeberete, je obtížnější šablonu ověřit.

  1. Zkopírujte obsah šablony nasazení ARM.
  2. Postupujte podle pokynů k úpravám a nasazení šablony z článku Rychlý start: Vytvoření a nasazení šablon ARM pomocí webu Azure Portal.

Údržba izolace sítě pro zdroj protokolování

Pokud zdroj protokolování vyžaduje izolaci sítě, nakonfigurujte seznam povolených veřejných IP adres používaných ústřední protistranou.

Virtuální sítě Azure používají značky služeb k definování řízení přístupu k síti. Pro ústřední protistranu je tato značka služby potápění.

Aktuální rozsah IP adres přidružený ke značce Potápění najdete v tématu Použití rozhraní API zjišťování značek služeb.

Ověření konektoru bez kódu

Zobrazte konektor bez kódu v galerii datových konektorů. Otevřete datový konektor a vyplňte všechny parametry ověřování potřebné pro připojení. Po úspěšném připojení se vytvoří dcR a vlastní tabulky. Prohlédněte si prostředek DCR ve vaší skupině prostředků a všechny vlastní tabulky z pracovního prostoru analýzy protokolů.

Poznámka:

Než se data začnou ingestovat, může to trvat až 30 minut.

Příklad

Každý krok při sestavování konektoru bez kódu je znázorněn v následujících ukázkových částech.

Abychom si ukázali složitý zdroj dat s příjmem dat do více než jedné tabulky, tento příklad obsahuje schéma výstupní tabulky a DCR s více výstupními streamy. Příklad DCR je spojuje spolu s jejími transformacemi KQL. Příklady definic uživatelského rozhraní datového konektoru a pravidel připojení pokračují ze stejného ukázkového zdroje dat. Nakonec šablona řešení používá všechny tyto ukázkové komponenty k zobrazení kompletního postupu vytvoření ukázkového datového konektoru ÚSTŘEDNÍ PROTISTRANY.

Příklad dat

Zdroj dat vrátí následující JSON při připojování ke svému koncovému bodu.

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

Tato odpověď obsahuje eventType výstrahua soubor. Události souboru se mají ingestovat do normalizované standardní tabulky AsimFileEventLogs, zatímco události upozornění se mají ingestovat do vlastní tabulky.

Příklad vlastní tabulky

Další informace o struktuře této tabulky najdete v tématu Rozhraní API pro tabulky. Názvy vlastních tabulek protokolů by měly mít příponu _CL .

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

Příklad pravidla shromažďování dat

Následující řadič domény definuje jeden datový proud Custom-ExampleConnectorInput pomocí ukázkového zdroje dat a transformuje výstup do dvou tabulek.

  1. První tok dat směruje eventType = výstrahu na vlastní ExampleConnectorAlerts_CL tabulku.
  2. druhý tok dat směruje eventType = soubor do normalizované standardní tabulky.ASimFileEventLogs

Další informace o struktuře tohoto příkladu naleznete v tématu Struktura pravidla shromažďování dat.

Pokud chcete tento řadič domény vytvořit v testovacím prostředí, postupujte podle rozhraní API pravidel shromažďování dat. Prvky příkladu v {{double curly braces}} indikují proměnné, které vyžadují hodnoty s jednoduchým použitím pro Postman. Při vytváření tohoto prostředku v šabloně ARM se proměnné vyjádřené zde vyměňují za parametry.

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

Příklad definice uživatelského rozhraní datového konektoru

Tento příklad se nachází v referenčních informacích o definicích datového konektoru.

Příklad pravidel připojení datového konektoru

Tento příklad se nachází v referenčních informacích k datovým konektorům.

Příklad šablony ARM

Sestavte šablonu nasazení ARM s následující strukturou, která obsahuje 4 části komponent JSON potřebné k sestavení datového konektoru ÚSTŘEDNÍ PROTISTRANy:

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

Stehněte oddíly společně s editorem podporujícím JSON, jako je Visual Code, abyste minimalizovali chyby syntaxe, jako jsou čárky a zavírací závorky a závorky.

Pokud chcete vést proces vytváření šablon, komentáře se zobrazí v metadatechdescription nebo v textu s zápisem // komentáře. Další informace najdete v tématu Osvědčené postupy pro šablony ARM – komentáře.

Zvažte použití testovací sady nástrojů pro šablony ARM (arm-ttk) k ověření šablony, kterou vytváříte. Další informace najdete v tématu arm-ttk.

Příklad šablony ARM – parametry

Další informace najdete v tématu Parametry v šablonách ARM.

Upozorňující

Používejte securestring pro všechna hesla a tajné kódy v objektech čitelných po nasazení prostředků. Další informace najdete v tématu Zabezpečení důvěrných vstupů a doporučení zabezpečení pro parametry.

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

Příklad šablony ARM – proměnné

Tyto doporučené proměnné pomáhají šablonu zjednodušit. Podle potřeby použijte více nebo méně. Další informace najdete v tématu Proměnné v šablonách ARM.

    "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

Příklad šablony ARM – prostředky

V této šabloně jsou k dispozici 5 prostředků nasazení ARM, které jsou součástí stavebních komponent datového konektoru 4 ÚSTŘEDNÍ PROTISTRANY.

  1. contentTemplates (nadřazený prostředek)
    • metadata
    • dataCollectionRules – Další informace naleznete v tématu Pravidlo shromažďování dat.
    • tabulky – Další informace najdete v tématu Definice výstupní tabulky.
  2. data Připojení orDefinitions – Další informace najdete v tématu Uživatelské rozhraní datového konektoru.
  3. metadata
  4. contentTemplates
    • metadata
    • RestApiPoller – Další informace najdete v tématu Pravidla datového připojení.
  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!
    ]
}

Další kroky

Další informace najdete v tématu