Creare un connettore senza codice per Microsoft Sentinel
La piattaforma CCP (Codeless Connector Platform) offre a partner, utenti avanzati e sviluppatori la possibilità di creare connettori personalizzati per l'inserimento di dati in Microsoft Sentinel.
I connettori creati con CCP sono completamente SaaS, senza requisiti per le installazioni di servizi. Includono anche Monitoraggio dell'integrità e il supporto completo di Microsoft Sentinel.
Usare la procedura seguente per creare il connettore CCP e connettere l'origine dati a Microsoft Sentinel
- Compilare il connettore dati
- Creare il modello di Resource Manager
- Distribuire il connettore
- Connettere Microsoft Sentinel all'origine dati e iniziare l'inserimento di dati
Questo articolo illustra come completare ogni passaggio e fornire un connettore senza codice di esempio per la compilazione.
In che modo questo CCP è diverso dalla versione precedente?
La versione iniziale del CCP è stata annunciata nel gennaio 2022. Da allora, la piattaforma è stata migliorata e la versione legacy non è più consigliata. Questa nuova versione di CCP presenta i seguenti miglioramenti chiave:
Supporto migliore per vari tipi di autenticazione e impaginazione.
Supporta le regole di raccolta dati (DCR) standard.
Le parti di configurazione dell'interfaccia utente e della connessione del connettore senza codice sono ora separate. Ciò consente la creazione di connettori con più connessioni, cosa non possibile in precedenza.
Prerequisiti
Prima di creare un connettore, comprendere l'origine dati e il modo in cui Microsoft Sentinel deve connettersi.
Endpoint raccolta dati (DCE)
Un DCE è un requisito per una DCR. Viene creato un solo DCE per ogni distribuzione DCR dell'area di lavoro Log Analytics. Ogni DCR per un'area di lavoro di Microsoft Sentinel usa lo stesso DCE. Per altre informazioni su come crearne uno o se ne è necessario uno nuovo, vedere Endpoint di raccolta dati in Monitoraggio di Azure.
Schema delle tabelle di output.
È importante comprendere la forma del flusso di dati e i campi da includere nella tabella di output. Fare riferimento alla documentazione dell'origine dati o analizzare esempi di output sufficienti.
Ricercare i componenti seguenti e verificare il supporto per tali componenti nel riferimento API Connettore dati:
Struttura di richiesta e risposta HTTP all'origine dati
Autenticazione richiesta dall'origine dati.
Ad esempio, se l'origine dati richiede un token firmato con un certificato, il riferimento all'API del connettore dati specifica che l'autenticazione del certificato non è supportata.Opzioni di paginazione per l'origine dati
Test delle API
È consigliabile testare i componenti con uno strumento di test delle API come uno dei seguenti:
- Visual Studio Code con un'estensione da Visual Studio Marketplace
- Invoke-RestMethod di PowerShell
- Microsoft Edge - Strumento console di rete
- Bruno
- curl
Attenzione
Per gli scenari in cui sono presenti dati sensibili, ad esempio credenziali, segreti, token di accesso, chiavi API e altre informazioni simili, assicurarsi di usare uno strumento che protegge i dati con le funzionalità di sicurezza necessarie, funziona offline o in locale, non sincronizza i dati nel cloud e non richiede l'accesso a un account online. In questo modo si riduce il rischio di esporre i dati sensibili al pubblico.
Compilare il connettore dati
Per compilare il connettore dati CCP sono necessari quattro componenti.
- Definizione della tabella di output
- Regola di raccolta dati (DCR)
- Interfaccia utente del connettore dati
- Regole di connessione del connettore dati
Ogni componente include una sezione che descrive in dettaglio il processo di creazione e convalida. Prendere il codice JSON da ogni componente per la creazione finale del pacchetto del modello di ARM.
Definizione della tabella di output
Suggerimento
Ignorare questo passaggio se i dati vengono inseriti solo nelle tabelle di Log Analytics standard. Esempi di tabelle standard includono CommonSecurityLog e ASimDnsActivityLogs. Per altre informazioni sull'elenco completo dei tipi di dati standard supportati, vedere Supporto per la trasformazione dei dati per i connettori dati personalizzati.
Se l'origine dati non è conforme allo schema di una tabella standard, sono disponibili due opzioni:
- Creare una tabella personalizzata per tutti i dati
- Creare una tabella personalizzata per alcuni dati e suddividere i dati conformi a una tabella standard
Usare l'interfaccia utente di Log Analytics per un metodo semplice per creare una tabella personalizzata insieme a una DCR. Se si crea la tabella personalizzata usando l'API Tabelle o un altro metodo programmatico, aggiungere manualmente il suffisso _CL
al nome della tabella. Per altre informazioni, vedere Creare una tabella personalizzata.
Per altre informazioni sulla suddivisione dei dati in più tabelle, vedere i dati di esempio e la tabella personalizzata di esempio creata per tali dati.
Regola di raccolta dei dati
Le regole di raccolta dati definiscono il processo di raccolta dati in Monitoraggio di Azure. Le regole di raccolta dati specificano quali dati devono essere raccolti, come trasformarli e dove inviarli.
- È presente una sola DCR che viene distribuito per ogni connettore dati.
- Una DCR deve avere un DCE corrispondente nella stessa area.
- Quando viene distribuito il connettore dati CCP, la DCR viene creata se non esiste già.
Fare riferimento alle informazioni più recenti sulle DCR seguenti:
Per un'esercitazione che illustra la creazione di un DCE, incluso l'uso di dati di esempio per creare la tabella personalizzata e la DCR, vedere Esercitazione: Inviare dati ai log di Monitoraggio di Azure con l'API di inserimento log (portale di Azure). Usare il processo in questa esercitazione per verificare che i dati vengano inseriti correttamente nella tabella con la DCR.
Per informazioni su come creare una DCR complesso con più flussi di dati, vedere la sezione dell'esempio di DCR.
Interfaccia utente del connettore dati
Questo componente esegue il rendering dell'interfaccia utente per il connettore dati nella raccolta di connettori dati di Microsoft Sentinel. Ogni connettore dati può avere una sola definizione dell'interfaccia utente.
Creare l'interfaccia utente del connettore dati con l'API Definizione del connettore dati. Usare il riferimento alle definizioni del connettore dati come supplemento per spiegare in modo più dettagliato gli elementi dell'API.
Note:
- La proprietà
kind
per il connettore di polling API dovrebbe essere sempreCustomizable
. - Poiché si tratta di un tipo di connettore di polling API, impostare il tipo
connectivityCriteria
suhasDataConnectors
- Nell'esempio
instructionSteps
includere un pulsante di tipoConnectionToggleButton
. Questo pulsante consente di attivare la distribuzione delle regole del connettore dati in base ai parametri di connessione specificati.
Usare uno strumento di test delle API per chiamare l'API delle definizioni del connettore dati per creare l'interfaccia utente del connettore dati e convalidarla nella raccolta connettori dati.
Per informazioni da un esempio, vedere la sezione dell'esempio di riferimento delle definizioni del connettore dati.
Regole di connessione dati
Esistono attualmente due tipi di regole di connessione dati possibili per la definizione del connettore dati CCP.
RestApiPoller
kind consente di personalizzare il paging, l'autorizzazione e i payload di richiesta/risposta previsti per l'origine dati. Per altre informazioni, vedere Informazioni di riferimento sulle regole di connessione del connettore dati RestApiPoller.GCP
kind consente di ridurre il tempo di sviluppo configurando automaticamente il paging e i payload di risposta previsti per l'origine dati Google Cloud Platform (GCP). Per altre informazioni, vedere Informazioni di riferimento sulle regole di connessione del connettore dati GCP
Usare uno strumento di test delle API per chiamare l'API del connettore dati per creare il connettore dati che combina le regole di connessione e i componenti precedenti. Verificare che il connettore sia ora connesso nell'interfaccia utente.
Proteggere l'input riservato
Indipendentemente dall'autenticazione usata dal connettore dati CCP, seguire questa procedura per garantire la sicurezza delle informazioni riservate. L'obiettivo è passare le credenziali dal modello di ARM al CCP senza lasciare gli oggetti riservati leggibili nella cronologia delle distribuzioni.
Crea etichetta
La definizione del connettore dati crea un elemento dell'interfaccia utente per richiedere le credenziali di sicurezza. Ad esempio, se il connettore dati esegue l'autenticazione a un'origine log con OAuth, la sezione relativa alla definizione del connettore dati include il tipo OAuthForm
nelle istruzioni. In questo modo viene configurato il modello di ARM per richiedere le credenziali.
"instructions": [
{
"type": "OAuthForm",
"parameters": {
"UsernameLabel": "Username",
"PasswordLabel": "Password",
"connectButtonLabel": "Connect",
"disconnectButtonLabel": "Disconnect"
}
}
],
Archiviare l'input riservato
Una sezione del modello di distribuzione ARM fornisce una posizione per l'amministratore che distribuisce il connettore dati per immettere la password. Usare securestring
per mantenere protette le informazioni riservate in un oggetto che non è leggibile dopo la distribuzione. Per altre informazioni, vedere Raccomandazioni sulla sicurezza per i parametri.
"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
}
}
Usare gli oggetti securestring
Infine, il CCP usa gli oggetti credenziali nella sezione connettore dati.
"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"
}
},
Nota
La sintassi strana per l'oggetto credenziale, "ClientSecret": "[[parameters('Password')]",
, non è un errore di digitazione!
Per creare il modello di distribuzione che usa a sua volta i parametri, è necessario eseguire l'escape dei parametri in tale sezione con un [
iniziale aggiuntivo. In questo modo i parametri possono assegnare un valore in base all'interazione dell'utente con il connettore.
Per altre informazioni, vedere Caratteri di escape delle espressioni modello.
Creare il modello di distribuzione
Creare manualmente un pacchetto di un modello di Azure Resource Management (ARM) usando gli esempi di codice dei modelli di esempio come guida. Questi esempi di codice sono divisi per le sezioni del modello di Resource Manager che è necessario unire.
Se si sta creando un connettore dati CCP (GCP), creare un pacchetto del modello di distribuzione usando il modello GCP CCP di esempio. Per informazioni su come compilare il modello GCP CCP, vedere Informazioni di riferimento sulle regole di connessione del connettore dati GCP.
Oltre ai modelli di esempio, le soluzioni pubblicate disponibili nell'hub del contenuto di Microsoft Sentinel usano il CCP per i connettori dati. Esaminare le soluzioni seguenti come esempi di come unire i componenti in un modello di ARM.
RestApiPoller
Esempi di connettore dati CCP
- Ermes Browser Security
- Palo Alto Prisma Cloud CWPP
- Sophos Endpoint Protection
- Workday
- Atlassian Jira
- Okta Single Sign-On
GCP
Esempi di connettore dati CCP
Distribuire il connettore
Distribuire il connettore senza codice come modello personalizzato.
Suggerimento
Eliminare le risorse create nei passaggi precedenti. La DCR e la tabella personalizzata vengono create con la distribuzione. Se non si rimuovono tali risorse prima della distribuzione, sarà più difficile verificare il modello.
- Copiare il contenuto del modello di distribuzione ARM.
- Seguire le istruzioni Modificare e distribuire il modello dall'articolo Avvio rapido: Creare e distribuire modelli di ARM usando il portale di Azure.
Mantenere l'isolamento rete per l'origine di registrazione
Se l'origine di registrazione richiede l'isolamento rete, configurare un elenco di indirizzi IP pubblici usati dal CCP.
Le reti virtuali di Azure usano tag di servizio per definire i controlli di accesso alla rete. Per il CCP, tale tag di servizio è Scuba.
Per trovare l'intervallo IP corrente associato al tag di servizio Scuba, vedere Usare l'API di individuazione tag del servizio.
Verificare il connettore senza codice
Visualizzare il connettore senza codice nella raccolta di connettori dati. Aprire il connettore dati e completare tutti i parametri di autenticazione necessari per la connessione. Una volta stabilita la connessione, vengono create le tabelle personalizzate e le DCR. Visualizzare la risorsa DCR nel gruppo di risorse ed eventuali tabelle personalizzate dell'area di lavoro Log Analytics.
Nota
L'inserimento dei dati può richiedere fino a 30 minuti.
Esempio
Ogni passaggio della compilazione del connettore senza codice è rappresentato nelle sezioni di esempio seguenti.
- Dati di esempio
- Tabella personalizzata di esempio
- Regola di raccolta dati di esempio
- Definizione dell'interfaccia utente del connettore dati di esempio
- Regole di connessione dati di esempio
- Usare dati di esempio con modello di esempio
Per illustrare un'origine dati complessa con inserimento in più tabelle, questo esempio include uno schema di tabella di output e una DCR con più flussi di output. L'esempio di DCR raggruppa questi elementi insieme alle relative trasformazioni KQL. Gli esempi di definizione dell'interfaccia utente del connettore dati e le regole di connessione continuano da questa stessa origine dati di esempio. Infine, il modello di soluzione usa tutti questi componenti di esempio per mostrare in modo completo come creare il connettore dati CCP di esempio.
Dati di esempio
Un'origine dati restituisce il codice JSON seguente durante la connessione al relativo endpoint.
[
{
"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"
}
]
Questa risposta contiene eventType
di Avviso e File. Gli eventi di file devono essere inseriti nella tabella standard normalizzata, AsimFileEventLogs, mentre gli eventi di avviso devono essere inseriti in una tabella personalizzata.
Tabella personalizzata di esempio
Per altre informazioni sulla struttura di questa tabella, vedere Tabelle API. I nomi delle tabelle di log personalizzate devono avere un suffisso _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"
}
]
}
}
}
Regola di raccolta dati di esempio
La DCR seguente definisce un singolo flusso Custom-ExampleConnectorInput
usando l'origine dati di esempio e trasforma l'output in due tabelle.
- Il primo flusso di dati indirizza l'
eventType
= Avviso alla tabella personalizzataExampleConnectorAlerts_CL
. - il secondo flusso di dati indirizza
eventType
= File alla tabella standard normalizzata,ASimFileEventLogs
.
Per altre informazioni sulla struttura di questo esempio, vedere Struttura di una regola di raccolta dati.
Per creare questa DCR in un ambiente di test, seguire l'API Regole di raccolta dati. Gli elementi dell'esempio in {{double curly braces}}
indicano variabili che richiedono valori per facilità d'uso con uno strumento di test delle API. Quando si crea questa risorsa nel modello di ARM, le variabili qui espresse vengono scambiate per i parametri.
{
"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"
}
]
}
}
Definizione dell'interfaccia utente del connettore dati di esempio
Questo esempio si trova nel Riferimento alle definizioni del connettore dati.
Regole di connessione del connettore dati di esempio
Questo esempio si trova nel riferimento Connettori dati.
Modello di ARM di esempio
Compilare il modello di distribuzione ARM con la struttura seguente, che include le 4 sezioni dei componenti JSON necessari per compilare il connettore dati CCP:
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {},
"variables": {},
"resources": [],
}
Unire le sezioni con un editor compatibile con JSON come Visual Code per ridurre al minimo gli errori di sintassi, ad esempio virgole e parentesi chiuse.
Per guidare il processo di compilazione del modello, vengono visualizzati commenti nei metadatidescription
o inline con la notazione dei commenti //
. Per altre informazioni, vedere Procedure consigliate per i modelli di ARM: commenti.
Provare a usare il toolkit di test del modello di ARM (arm-ttk) per convalidare il modello compilato. Per altre informazioni, vedere arm-ttk.
Modello di ARM di esempio - parametri
Per altre informazioni, vedere Parametri nei modelli di ARM.
Avviso
Usare securestring
per tutte le password e i segreti negli oggetti leggibili dopo la distribuzione delle risorse.
Per altre informazioni, vedere Inserimento riservato protetto e Raccomandazioni sulla sicurezza per i parametri.
{
"$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
}
Modello di ARM di esempio - variabili
Queste variabili consigliate consentono di semplificare il modello. Usarle in base alle esigenze. Per altre informazioni, vedere Variabili nei modelli di 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
Modello di ARM di esempio - risorse
In questa guida di modello sono disponibili 5 risorse di distribuzione ARM che ospitano i componenti di compilazione del connettore dati CCP 4.
- contentTemplates (una risorsa padre)
- metadata
- dataCollectionRules: per altre informazioni, vedere Regola di raccolta dati.
- tables : per altre informazioni, vedere Definizione delle tabelle di output.
- dataConnectorDefinitions - Per altre informazioni, vedere Interfaccia utente del connettore dati.
- metadata
- contentTemplates
- metadata
- RestApiPoller: per altre informazioni, vedere Regole di connessione dati.
- 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!
]
}
Contenuto correlato
Per ulteriori informazioni, vedere,