Tworzenie łącznika bez kodu dla usługi Microsoft Sentinel (publiczna wersja zapoznawcza)

Platforma Połączenie or bez kodu (KPCH) zapewnia partnerom, zaawansowanym użytkownikom i deweloperom możliwość tworzenia łączników niestandardowych na potrzeby pozyskiwania danych do usługi Microsoft Sentinel.

Połączenie orów utworzonych przy użyciu protokołu KPCH są w pełni SaaS, bez wymagań dotyczących instalacji usług. Obejmują one również monitorowanie kondycji i pełną obsługę firmy Microsoft Sentinel.

Ważne

Platforma Połączenie or bez kodu (KPCH) jest obecnie dostępna w wersji zapoznawczej. Dodatkowe postanowienia dotyczące wersji zapoznawczej platformy Azure obejmują dodatkowe postanowienia prawne dotyczące funkcji platformy Azure, które są dostępne w wersji beta, wersji zapoznawczej lub w inny sposób nie zostały jeszcze wydane w wersji ogólnodostępnej.

Wykonaj poniższe kroki, aby utworzyć łącznik PROTOKOŁU KPS i połączyć źródło danych z usługą Microsoft Sentinel

  • Tworzenie łącznika danych
  • Tworzenie szablonu usługi ARM
  • Wdrażanie łącznika
  • Połączenie usługę Microsoft Sentinel do źródła danych i rozpocząć pozyskiwanie danych

W tym artykule pokazano, jak wykonać każdy krok i udostępnić przykładowy łącznik bez kodu do kompilowania po drodze.

Czym różni się ta funkcja KPCH od poprzedniej wersji?

Początkowa wersja KPCH została ogłoszona w styczniu 2022 r. Od tego czasu ulepszyliśmy platformę, a starsza wersja nie jest już zalecana. Ta nowa wersja PROTOKOŁU KPCH ma następujące kluczowe ulepszenia:

  1. Lepsza obsługa różnych typów uwierzytelniania i stronicowania.

  2. Obsługuje standardowe reguły zbierania danych (DCR).

  3. Interfejs użytkownika i część konfiguracji połączenia łącznika bez kodu są teraz oddzielone. Umożliwia to tworzenie łączników z wieloma połączeniami, które wcześniej nie były możliwe.

Wymagania wstępne

Przed utworzeniem łącznika zapoznaj się ze źródłem danych i sposobem nawiązywania połączenia z usługą Microsoft Sentinel.

  1. Punkt końcowy zbierania danych (DCE)

    DcE jest wymaganiem dla kontrolera domeny. Na wdrożenie dcR obszaru roboczego analizy dzienników jest tworzony tylko jeden kontroler domeny. Każda usługa DCR wdrożona dla obszaru roboczego usługi Microsoft Sentinel używa tego samego kontrolera domeny. Aby uzyskać więcej informacji na temat tworzenia jednego lub niezależnie od tego, czy potrzebujesz nowego, zobacz Punkty końcowe zbierania danych w usłudze Azure Monitor.

  2. Schemat tabel wyjściowych.

    Ważne jest, aby zrozumieć kształt strumienia danych i pola, które mają zostać uwzględnione w tabeli wyjściowej. Dokumentacja źródła danych lub analizowanie wystarczających przykładów danych wyjściowych.

Zbadaj następujące składniki i sprawdź obsługę tych składników w dokumentacji interfejsu API usługi Data Połączenie or:

  1. Struktura żądań i odpowiedzi HTTP do źródła danych

  2. Uwierzytelnianie wymagane przez źródło danych.
    Jeśli na przykład źródło danych wymaga tokenu podpisanego przy użyciu certyfikatu, dokumentacja interfejsu API łącznika danych określa uwierzytelnianie certyfikatu nie jest obsługiwane.

  3. Opcje stronicowania w źródle danych

Zalecamy również narzędzie, takie jak Postman, aby zweryfikować składniki łącznika danych. Aby uzyskać więcej informacji, zobacz Use Postman with the Microsoft Graph API (Używanie narzędzia Postman z interfejsem API programu Microsoft Graph).

Tworzenie łącznika danych

Istnieje 4 składniki wymagane do utworzenia łącznika danych ORGANIZACJI.

  1. Definicja tabeli wyjściowej
  2. Reguła zbierania danych (DCR)
  3. Interfejs użytkownika łącznika danych
  4. Reguły połączeń łącznika danych

Każdy składnik zawiera sekcję zawierającą szczegółowe informacje na temat procesu tworzenia i weryfikowania. Zabierz kod JSON z każdego składnika, aby uzyskać końcowe opakowanie szablonu usługi ARM.

Definicja tabeli wyjściowej

Napiwek

Pomiń ten krok, jeśli dane są pozyskiwane tylko do standardowych tabel usługi Log Analytics. Przykładami tabel standardowych są CommonSecurityLog i ASimDnsActivityLogs. Aby uzyskać więcej informacji na temat pełnej listy obsługiwanych standardowych typów danych, zobacz Obsługa przekształcania danych dla niestandardowych łączników danych.

Jeśli źródło danych nie jest zgodne ze schematem standardowej tabeli, dostępne są dwie opcje:

  • Tworzenie tabeli niestandardowej dla wszystkich danych
  • Tworzenie niestandardowej tabeli dla niektórych danych i dzielenie danych zgodnych z tabelą standardową

Użyj interfejsu użytkownika usługi Log Analytics, aby utworzyć niestandardową tabelę razem z kontrolerem domeny. Jeśli tworzysz tabelę niestandardową przy użyciu interfejsu API tabel lub innej metody programowej, dodaj _CL sufiks ręcznie do nazwy tabeli. Aby uzyskać więcej informacji, zobacz Tworzenie tabeli niestandardowej.

Aby uzyskać więcej informacji na temat dzielenia danych na więcej niż jedną tabelę, zobacz przykładowe dane i przykładową tabelę niestandardową utworzoną dla tych danych.

Reguła zbierania danych

Reguły zbierania danych definiują proces zbierania danych w usłudze Azure Monitor. Kontrolery domeny określają, jakie dane mają być zbierane, jak przekształcać te dane i gdzie mają być wysyłane.

  • Istnieje tylko jeden kontroler domeny, który jest wdrażany dla łącznika danych.
  • Kontroler domeny musi mieć odpowiedni kontroler domeny w tym samym regionie.
  • Po wdrożeniu łącznika danych KPCH kontroler domeny jest tworzony, jeśli jeszcze nie istnieje.

Najnowsze informacje dotyczące kontrolerów domeny można znaleźć w następujących artykułach:

Aby zapoznać się z samouczkiem przedstawiającym tworzenie kontrolera domeny, w tym użycie przykładowych danych do utworzenia niestandardowej tabeli i kontrolera domeny, zobacz Samouczek: wysyłanie danych do dzienników usługi Azure Monitor przy użyciu interfejsu API pozyskiwania dzienników (Azure Portal). Użyj procesu w tym samouczku, aby sprawdzić, czy dane zostały prawidłowo pozyskane do tabeli za pomocą kontrolera domeny.

Aby dowiedzieć się, jak utworzyć złożoną usługę DCR z wieloma przepływami danych, zobacz przykładową sekcję DCR.

Interfejs użytkownika łącznika danych

Ten składnik renderuje interfejs użytkownika łącznika danych w galerii łączników danych usługi Microsoft Sentinel. Każdy łącznik danych może mieć tylko jedną definicję interfejsu użytkownika.

Skompiluj interfejs użytkownika łącznika danych przy użyciu interfejsu API definicji Połączenie or danych. Użyj odwołania do definicji łącznika danych jako dodatku, aby dokładniej wyjaśnić elementy interfejsu API.

Uwagi:

  1. Właściwość kind łącznika sondowania interfejsu API powinna zawsze mieć wartość Customizable.
  2. Ponieważ jest to typ łącznika sondowania interfejsu API, ustaw typ na connectivityCriteriahasDataConnectors
  3. W przykładzie instructionsSteps znajduje się przycisk typu ConnectionToggleButton. Ten przycisk pomaga wyzwolić wdrażanie reguł łącznika danych na podstawie określonych parametrów połączenia.

Użyj narzędzia Postman, aby wywołać interfejs API definicji łącznika danych w celu utworzenia interfejsu użytkownika łącznika danych w celu zweryfikowania go w galerii łączników danych.

Aby dowiedzieć się na podstawie przykładu, zobacz sekcję Przykładowe definicje łącznika danych.

Reguły połączeń danych

Ta część definiuje reguły połączeń, w tym:

  • Sondowania
  • uwierzytelnianie
  • Stronicowania

Aby uzyskać więcej informacji na temat tworzenia tej sekcji, zobacz Dokumentację reguł połączeń łącznika danych.

Aby dowiedzieć się na podstawie przykładu , zobacz przykładowe reguły połączeń łącznika danych.

Użyj narzędzia Postman, aby wywołać interfejs API łącznika danych, aby utworzyć łącznik danych, który łączy reguły połączenia i poprzednie składniki. Sprawdź, czy łącznik jest teraz połączony w interfejsie użytkownika.

Zabezpieczanie poufnych danych wejściowych

Niezależnie od tego, jakie uwierzytelnianie jest używane przez łącznik danych ORGANIZACJI, wykonaj te kroki, aby zapewnić bezpieczeństwo poufnych informacji. Celem jest przekazanie poświadczeń z szablonu usługi ARM do repozytoriów ARM bez opuszczania czytelnych obiektów poufnych w historii wdrożeń.

Tworzenie etykiety

Definicja łącznika danych tworzy element interfejsu użytkownika w celu wyświetlenia monitu o poświadczenia zabezpieczeń. Jeśli na przykład łącznik danych uwierzytelnia się w źródle dziennika za pomocą protokołu OAuth, sekcja definicji łącznika danych zawiera OAuthForm typ w instrukcjach. Spowoduje to skonfigurowanie szablonu usługi ARM w celu wyświetlenia monitu o podanie poświadczeń.

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

Przechowywanie poufnych danych wejściowych

Sekcja szablonu wdrażania usługi ARM zawiera miejsce dla administratora wdrażającego łącznik danych w celu wprowadzenia hasła. Służy securestring do przechowywania poufnych informacji zabezpieczonych w obiekcie, który nie jest czytelny po wdrożeniu. Aby uzyskać więcej informacji, zobacz Zalecenia dotyczące zabezpieczeń dotyczące parametrów.

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

Korzystanie z obiektów securestring

Na koniec usługa KPCH wykorzystuje obiekty poświadczeń w sekcji łącznika danych.

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

Uwaga

Dziwna składnia obiektu "ClientSecret": "[[parameters('Password')]", poświadczeń nie jest literówką! Aby utworzyć szablon wdrożenia, który używa również parametrów, należy uruchomić dodatkowe parametry[ w tej sekcji. Dzięki temu parametry mogą przypisywać wartość na podstawie interakcji użytkownika z łącznikiem.

Aby uzyskać więcej informacji, zobacz Znaki ucieczki wyrażeń szablonu.

Tworzenie szablonu wdrożenia

Ręcznie spakuj szablon usługi Azure Resource Management (ARM) przy użyciu przykładowego szablonu jako przewodnika.

Oprócz przykładowego szablonu opublikowane rozwiązania dostępne w centrum zawartości usługi Microsoft Sentinel używają funkcji KPS dla łącznika danych. Zapoznaj się z poniższymi rozwiązaniami, aby uzyskać więcej przykładów sposobu łączenia składników ze sobą w szablon usługi ARM.

Wdrażanie łącznika

Wdróż łącznik bez kodu jako szablon niestandardowy.

Napiwek

Usuń zasoby utworzone w poprzednich krokach. Kontroler domeny i tabela niestandardowa są tworzone przy użyciu wdrożenia. Jeśli nie usuniesz tych zasobów przed wdrożeniem, trudniej jest zweryfikować szablon.

  1. Skopiuj zawartość szablonu wdrożenia usługi ARM.
  2. Postępuj zgodnie z instrukcjami dotyczącymi edytowania i wdrażania szablonu z artykułu Szybki start: tworzenie i wdrażanie szablonów usługi ARM przy użyciu witryny Azure Portal.

Utrzymywanie izolacji sieci na potrzeby źródła rejestrowania

Jeśli źródło rejestrowania wymaga izolacji sieciowej, należy skonfigurować listę dozwolonych publicznych adresów IP używanychprzezego... .

Sieci wirtualne platformy Azure używają tagów usługi do definiowania mechanizmów kontroli dostępu do sieci. W przypadku PROTOKOŁU KPCH ten tag usługi to Scuba.

Aby znaleźć bieżący zakres adresów IP skojarzony z tagiem usługi Scuba, zobacz Używanie interfejsu API odnajdywania tagów usługi.

Weryfikowanie łącznika bez kodu

Wyświetl łącznik bez kodu w galerii łączników danych. Otwórz łącznik danych i wypełnij wszystkie parametry uwierzytelniania wymagane do nawiązania połączenia. Po pomyślnym nawiązaniu połączenia tworzone są tabele DCR i niestandardowe. Wyświetl zasób DCR w grupie zasobów i wszystkie tabele niestandardowe z obszaru roboczego analizy dzienników.

Uwaga

Rozpoczęcie pozyskiwania danych może potrwać do 30 minut.

Przykład

Każdy krok tworzenia łącznika bez kodu jest reprezentowany w poniższych przykładowych sekcjach.

Aby zademonstrować złożone źródło danych z pozyskiwaniem do więcej niż jednej tabeli, ten przykład zawiera schemat tabeli wyjściowej i kontroler domeny z wieloma strumieniami wyjściowymi. Przykład dcR łączy je wraz z transformacjami KQL. Przykłady definicji interfejsu użytkownika i reguł połączenia łącznika danych są kontynuowane z tego samego przykładowego źródła danych. Na koniec szablon rozwiązania używa wszystkich tych przykładowych składników, aby dowiedzieć się, jak utworzyć przykładowy łącznik danych USŁUGI SOAP.

Przykładowe dane

Źródło danych zwraca następujący kod JSON podczas nawiązywania połączenia z punktem końcowym.

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

Ta odpowiedź zawiera eventType alert i plik. Zdarzenia plików mają być pozyskiwane do znormalizowanej standardowej tabeli AsimFileEventLogs, podczas gdy zdarzenia alertu mają być pozyskiwane do tabeli niestandardowej.

Przykładowa tabela niestandardowa

Aby uzyskać więcej informacji na temat struktury tej tabeli, zobacz Interfejs API tabel. Niestandardowe nazwy tabel dzienników powinny mieć _CL sufiks.

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

Przykładowa reguła zbierania danych

Poniższy kontroler domeny definiuje pojedynczy strumień Custom-ExampleConnectorInput przy użyciu przykładowego źródła danych i przekształca dane wyjściowe w dwie tabele.

  1. Pierwszy przepływ danych kieruje eventType = alert do tabeli niestandardowej.ExampleConnectorAlerts_CL
  2. drugi przepływ danych kieruje eventType = plik do znormalizowanych standardowych tabel.ASimFileEventLogs

Aby uzyskać więcej informacji na temat struktury tego przykładu, zobacz Struktura reguły zbierania danych.

Aby utworzyć ten kontroler domeny w środowisku testowym, postępuj zgodnie z interfejsem API reguł zbierania danych. Elementy przykładu w pliku {{double curly braces}} wskazują zmienne, które wymagają wartości z łatwością użycia dla narzędzia Postman. Podczas tworzenia tego zasobu w szablonie usługi ARM zmienne wyrażone w tym miejscu są wymieniane dla parametrów.

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

Przykładowa definicja interfejsu użytkownika łącznika danych

Ten przykład znajduje się w dokumentacji definicji łącznika danych.

Przykładowe reguły połączeń łącznika danych

Ten przykład znajduje się w dokumentacji łączników danych.

Przykładowy szablon usługi ARM

Skompiluj szablon wdrożenia usługi ARM przy użyciu następującej struktury, która zawiera 4 sekcje składników JSON wymaganych do utworzenia łącznika danych PROTOKOŁU KPCH:

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

Połącz sekcje wraz z edytorem obsługującym kod JSON, na przykład Visual Code, aby zminimalizować błędy składni, takie jak przecinki i nawiasy zamykające.

Aby przeprowadzić proces tworzenia szablonu, komentarze są wyświetlane w metadanychdescription lub wbudowane z // notacją komentarza. Aby uzyskać więcej informacji, zobacz Najlepsze rozwiązania dotyczące szablonów usługi ARM — komentarze.

Rozważ użycie zestawu narzędzi do testowania szablonu usługi ARM (arm-ttk) w celu zweryfikowania utworzonego szablonu. Aby uzyskać więcej informacji, zobacz arm-ttk.

Przykładowy szablon usługi ARM — parametry

Aby uzyskać więcej informacji, zobacz Parametry w szablonach usługi ARM.

Ostrzeżenie

Użyj securestring dla wszystkich haseł i wpisów tajnych w obiektach możliwych do odczytania po wdrożeniu zasobów. Aby uzyskać więcej informacji, zobacz Bezpieczne poufne dane wejściowe i Zalecenia dotyczące zabezpieczeń dotyczące parametrów.

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

Przykładowy szablon usługi ARM — zmienne

Te zalecane zmienne ułatwiają uproszczenie szablonu. W razie potrzeby użyj więcej lub mniej. Aby uzyskać więcej informacji, zobacz Zmienne w szablonach usługi 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

Przykładowy szablon usługi ARM — zasoby

W tym przewodniku po szablonie znajduje się 5 zasobów wdrażania usługi ARM, które zawierają składniki budynku łącznika danych 4 SOAP.

  1. contentTemplates (zasób nadrzędny)
    • metadane
    • dataCollectionRules — aby uzyskać więcej informacji, zobacz Reguła zbierania danych.
    • tables — aby uzyskać więcej informacji, zobacz Output table definition (Definicja tabeli wyjściowej).
  2. data Połączenie orDefinitions — aby uzyskać więcej informacji, zobacz Interfejs użytkownika łącznika danych.
  3. metadane
  4. contentTemplates
    • metadane
    • RestApiPoller — aby uzyskać więcej informacji, zobacz Reguły połączeń danych.
  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!
    ]
}

Następne kroki

Aby uzyskać więcej informacji, zobacz