Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Program Codeless Connector Framework (CCF) udostępnia partnerom, zaawansowanym użytkownikom i deweloperom możliwość tworzenia łączników niestandardowych na potrzeby pozyskiwania danych do usługi Microsoft Sentinel.
Łączniki utworzone przy użyciu programu CCF 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.
Wykonaj poniższe kroki, aby utworzyć łącznik CCF i połączyć źródło danych z usługą Microsoft Sentinel
- Tworzenie łącznika danych
- Tworzenie szablonu usługi ARM
- Wdrażanie łącznika
- Łączenie usługi Microsoft Sentinel ze źródłem danych i rozpoczynanie pozyskiwania danych
W tym artykule pokazano, jak wykonać każdy krok i udostępnić przykładowy łącznik bez kodu do kompilowania po drodze.
Jeśli jesteś partnerem ds. tworzenia oprogramowania i potrzebujesz pomocy technicznej w celu utworzenia łącznika danych CCF, skontaktuj się z partnerami usługi Microsoft Sentinel w AzureSentinelPartner@microsoft.com celu uzyskania pomocy.
Czym różni się ta funkcja CCF od poprzedniej wersji?
Początkowa wersja CCF została ogłoszona w styczniu 2022 r. Od tego czasu ulepszyliśmy platformę, a starsza wersja nie jest już zalecana. Ta nowa wersja programu CCF ma następujące kluczowe ulepszenia:
Lepsza obsługa różnych typów uwierzytelniania i stronicowania.
Obsługuje standardowe reguły zbierania danych (DCR).
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.
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.
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 łącznika danych:
Struktura żądań i odpowiedzi HTTP do źródła danych
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.Opcje stronicowania w źródle danych
Testowanie interfejsów API
Zalecamy przetestowanie składników za pomocą narzędzia do testowania interfejsu API w następujący sposób:
- Program Visual Studio Code z rozszerzeniem z witryny Visual Studio Marketplace
- Invoke-RestMethod w programie PowerShell
- Microsoft Edge — narzędzie konsoli sieciowej
- Bruno
- lok
Uwaga
W przypadku scenariuszy, w których masz poufne dane, takie jak poświadczenia, wpisy tajne, tokeny dostępu, klucze interfejsu API i inne podobne informacje, upewnij się, że używasz narzędzia chroniącego dane przy użyciu niezbędnych funkcji zabezpieczeń, działa w trybie offline lub lokalnie, nie synchronizuje danych z chmurą i nie wymaga zalogowania się do konta online. Dzięki temu można zmniejszyć ryzyko ujawnienia poufnych danych publicznie.
Tworzenie łącznika danych
Napiwek
Jeśli jesteś niezależnym dostawcą oprogramowania (ISV) i potrzebujesz wsparcia technicznego podczas tworzenia integracji z usługą Microsoft Sentinel przy użyciu platformy Microsoft Sentinel Codeless Connector Framework, zespół Microsoft App Assure może ci pomóc. Aby zaangażować zespół usługi App Assure, wyślij wiadomość e-mail na azuresentinelpartner@microsoft.comadres .
Istnieją cztery składniki wymagane do utworzenia łącznika danych CCF.
- Definicja tabeli wyjściowej
- Reguła zbierania danych (DCR)
- Interfejs użytkownika łącznika danych
- 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. DCR określają, jakie dane mają być zbierane, jak przekształcać te dane i gdzie mają one 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 CCF 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 łącznika danych. Użyj odwołania do definicji łącznika danych jako dodatku, aby dokładniej wyjaśnić elementy interfejsu API.
Uwagi:
- Właściwość
kindłącznika sondowania interfejsu API powinna zawsze mieć wartośćCustomizable. - Ponieważ jest to typ łącznika sondowania interfejsu API, ustaw typ na
connectivityCriteriahasDataConnectors - W przykładzie
instructionStepsznajduje się przycisk typuConnectionToggleButton. Ten przycisk pomaga wyzwolić wdrażanie reguł łącznika danych na podstawie określonych parametrów połączenia.
Użyj narzędzia do testowania interfejsu API, 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
Obecnie istnieją dwa rodzaje reguł połączenia danych możliwych do definiowania łącznika danych CCF.
-
RestApiPollerKind umożliwia dostosowanie stronicowania, autoryzacji i oczekiwanych ładunków żądań/odpowiedzi dla źródła danych. Aby uzyskać więcej informacji, zobacz Dokumentacja reguł połączeń łącznika danych RestApiPoller. -
GCPKind umożliwia skrócenie czasu programowania przez automatyczne skonfigurowanie stronicowania i oczekiwanych ładunków odpowiedzi dla źródła danych usługi Google Cloud Platform (GCP). Aby uzyskać więcej informacji, zobacz GCP data connector connection rules reference (Dokumentacja reguł połączeń łącznika danych GCP)
Użyj narzędzia do testowania interfejsu API, aby wywołać interfejs API łącznika danych w celu utworzenia łącznika 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 CCF, wykonaj te kroki, aby zapewnić bezpieczeństwo poufnych informacji. Celem jest przekazanie poświadczeń z szablonu usługi ARM do platformy CCF bez pozostawiania czytelnych poufnych obiektów 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
Wreszcie system CCF wykorzystuje obiekty poświadczeń w module łą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ładowych przykładów kodu szablonu jako przewodnika. Te przykłady kodu są podzielone przez sekcje szablonu usługi ARM, które należy połączyć ze sobą.
Jeśli tworzysz łącznik danych CCF platformy Google Cloud Platform (GCP), spakuj szablon wdrożenia przy użyciu przykładowego szablonu GCP CCF. Aby uzyskać informacje na temat wypełniania szablonu GCP CCF, zobacz Dokumentację reguł połączeń łącznika danych GCP.
Oprócz przykładowych szablonów opublikowane rozwiązania dostępne w centrum zawartości usługi Microsoft Sentinel używają programu CCF dla swoich łączników 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.
RestApiPoller Przykłady łącznika danych CCF
- Zabezpieczenia przeglądarki Ermes
- Palo Alto Prisma Cloud CWPP
- Sophos Endpoint Protection
- Workday
- Atlassian Jira
- Logowanie jednokrotne w usłudze Okta
GCP Przykłady łącznika danych CCF
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.
- Skopiuj zawartość szablonu wdrożenia usługi ARM.
- 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, skonfiguruj listę dozwolonych publicznych adresów IP używanych przez program CCF.
Sieci wirtualne platformy Azure używają tagów usługi do definiowania mechanizmów kontroli dostępu do sieci. W przypadku programu CCF 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.
- Przykładowe dane
- Przykładowa tabela niestandardowa
- Przykładowa reguła zbierania danych
- Przykładowa definicja interfejsu użytkownika łącznika danych
- Przykładowe reguły połączenia danych
- Przykładowe dane z przykładowymi szablonami
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 pokazać całość procesu tworzenia przykładowego łącznika danych CCF.
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.
- Pierwszy przepływ danych kieruje
eventType= alert do tabeli niestandardowej.ExampleConnectorAlerts_CL - 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 w celu ułatwienia użycia z narzędziem do testowania interfejsu API. 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 CCF:
{
"$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 przewodniku po szablonach znajduje się 5 zasobów wdrażania ARM, które zawierają 4 składniki budowy łącznika danych CCF.
-
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).
- dataConnectorDefinitions — aby uzyskać więcej informacji, zobacz Interfejs użytkownika łącznika danych.
- metadane
-
contentTemplates (treść)
- metadane
- RestApiPoller — aby uzyskać więcej informacji, zobacz Reguły połączeń danych.
- contentPackages (Pakiety treści)
"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!
]
}
Powiązana zawartość
Aby uzyskać więcej informacji, zobacz
- Informacje o rozwiązaniach usługi Microsoft Sentinel.
- Dokumentacja szablonu usługi ARM łącznika danych