Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
O Codeless Connector Framework (CCF) fornece aos parceiros, utilizadores avançados e programadores a capacidade de criar conectores personalizados para ingerir dados para Microsoft Sentinel.
Os conectores criados com o CCF são Totalmente SaaS, sem requisitos para instalações de serviço. Também incluem a monitorização do estado de funcionamento e o suporte total de Microsoft Sentinel.
Utilize os seguintes passos para criar o conector CCF e ligar a origem de dados ao Microsoft Sentinel
- Criar o conector de dados
- Criar o modelo do ARM
- Implementar o conector
- Ligar Microsoft Sentinel à origem de dados e começar a ingerir dados
Este artigo irá mostrar-lhe como concluir cada passo e fornecer um conector sem código de exemplo para compilar ao longo do processo.
Se for um parceiro de desenvolvimento de software e precisar de suporte para criar um conector de dados CCF, contacte Microsoft Sentinel Parceiros em AzureSentinelPartner@microsoft.com para obter assistência.
Como é que este CCF é diferente da versão anterior?
A versão inicial do CCF foi anunciada em janeiro de 2022. Desde então, melhorámos a plataforma e a versão legada já não é recomendada. Esta nova versão do CCF tem as seguintes melhorias principais:
Melhor suporte para vários tipos de autenticação e paginação.
Suporta regras de recolha de dados padrão (DCRs).
As partes de configuração da interface de utilizador e da ligação do conector sem código estão agora separadas. Isto permite a criação de conectores com várias ligações que não eram possíveis anteriormente.
Pré-requisitos
Antes de criar um conector, compreenda a sua origem de dados e como Microsoft Sentinel precisa de se ligar.
Ponto Final de Recolha de Dados (DCE)
Uma DCE é um requisito para um DCR. Só é criada uma DCE por implementação DCR da área de trabalho do Log Analytics. Cada DCR implementado para uma área de trabalho Microsoft Sentinel utiliza o mesmo DCE. Para obter mais informações sobre como criar um ou se precisa de um novo, veja Pontos finais de recolha de dados no Azure Monitor.
Esquema das tabelas de saída.
É importante compreender a forma do fluxo de dados e os campos que pretende incluir na tabela de saída. Referencie a documentação da origem de dados ou analise exemplos de saída suficientes.
Procure os seguintes componentes e verifique o suporte para os mesmos na referência da API do Conector de Dados:
Pedido HTTP e estrutura de resposta à origem de dados
Autenticação necessária pela origem de dados.
Por exemplo, se a origem de dados necessitar de um token assinado com um certificado, a referência da API do conector de dados especifica que a autenticação de certificado não é suportada.Opções de paginação para a origem de dados
Testar APIs
Recomendamos que teste os seus componentes com uma ferramenta de teste de API, como uma das seguintes:
- Visual Studio Code com uma extensão do Visual Studio Marketplace
- Invocação-RestMethod do PowerShell
- Microsoft Edge - Ferramenta de Consola de Rede
- Bruno
- curl
Cuidado
Para cenários em que tenha dados confidenciais, como credenciais, segredos, tokens de acesso, chaves de API e outras informações semelhantes, certifique-se de que utiliza uma ferramenta que protege os seus dados com as funcionalidades de segurança necessárias, funciona offline ou localmente, não sincroniza os seus dados com a cloud e não requer que inicie sessão numa conta online. Desta forma, reduz o risco de exposição de dados confidenciais ao público.
Criar o conector de dados
Dica
Se for um Fornecedor Independente de Software (ISV) e precisar de suporte ao criar uma integração Microsoft Sentinel com o Microsoft Sentinel Codeless Connector Framework, a equipa microsoft App Assure poderá conseguir ajudar. Para contactar a equipa do App Assure, envie um e-mail para azuresentinelpartner@microsoft.com.
Existem quatro componentes necessários para criar o conector de dados CCF.
- Definição da tabela de saída
- Regra de Recolha de Dados (DCR)
- Interface de utilizador do conector de dados
- Regras de ligação do conector de dados
Cada componente tem uma secção que detalha o processo para criar e validar. Leve o JSON de cada componente para o empacotamento final do modelo arm.
Definição da tabela de saída
Dica
Ignore este passo se os seus dados forem ingeridos apenas em tabelas padrão do Log Analytics. Exemplos de tabelas padrão incluem CommonSecurityLog e ASimDnsActivityLogs. Para obter mais informações sobre a lista completa de tipos de dados padrão suportados, veja Suporte de transformação de dados para conectores de dados personalizados.
Se a origem de dados não estiver em conformidade com o esquema de uma tabela padrão, tem duas opções:
- Criar uma tabela personalizada para todos os dados
- Criar uma tabela personalizada para alguns dados e dividir os dados em conformidade com uma tabela padrão
Utilize a IU do Log Analytics para um método direto para criar uma tabela personalizada juntamente com um DCR. Se criar a tabela personalizada com a API tabelas ou outro método programático, adicione o _CL sufixo manualmente ao nome da tabela. Para obter mais informações, consulte Criar uma tabela personalizada.
Para obter mais informações sobre como dividir os seus dados em mais do que uma tabela, veja os dados de exemplo e a tabela personalizada de exemplo criada para esses dados.
Regra de recolha de dados
As regras de recolha de dados (DCRs) definem o processo de recolha de dados no Azure Monitor. Os DCRs especificam que dados devem ser recolhidos, como transformar esses dados e para onde enviar esses dados.
- Existe apenas um DCR que é implementado por conector de dados.
- Um DCR tem de ter um DCE correspondente na mesma região.
- Quando o conector de dados CCF é implementado, o DCR é criado se ainda não existir.
Veja as informações mais recentes sobre DCRs nestes artigos:
Para um tutorial que demonstra a criação de uma DCE, incluindo a utilização de dados de exemplo para criar a tabela personalizada e o DCR, veja Tutorial: Enviar dados para Azure Monitorizar Registos com a API de ingestão de Registos (portal do Azure). Utilize o processo neste tutorial para verificar se os dados são ingeridos corretamente na tabela com o DCR.
Para compreender como criar um DCR complexo com vários fluxos de dados, veja a secção de exemplo DCR.
Interface de utilizador do conector de dados
Este componente compõe a IU do conector de dados na galeria do conector de dados Microsoft Sentinel. Cada conector de dados pode ter apenas uma definição de IU.
Crie a interface de utilizador do conector de dados com a API de Definição do Conector de Dados. Utilize a referência de definições do conector de dados como um suplemento para explicar os elementos da API com maior detalhe.
Observações:
- A
kindpropriedade do conector de consulta de API deve serCustomizablesempre . - Uma vez que se trata de um tipo de conector de consulta de API, defina o
connectivityCriteriatipo comohasDataConnectors - O exemplo
instructionStepsinclui um botão do tipoConnectionToggleButton. Este botão ajuda a acionar a implementação de regras do conector de dados com base nos parâmetros de ligação especificados.
Utilize uma ferramenta de teste de API para chamar a API de definições do conector de dados para criar a IU do conector de dados para validá-la na galeria de conectores de dados.
Para saber mais a partir de um exemplo, veja a secção Exemplo de referência de definições do conector de dados.
Regras de ligação de dados
Atualmente, existem três tipos de regras de ligação de dados possíveis para definir o conector de dados CCF.
-
RestApiPollerO tipo permite-lhe personalizar a paginação, a autorização e os payloads de pedido/resposta esperados para a sua origem de dados. Para obter mais informações, veja RestApiPoller data connector connection rules reference (Referência de regras de ligação do conector de dados RestApiPoller). -
GCPO tipo permite-lhe diminuir o tempo de desenvolvimento ao configurar automaticamente payloads de resposta e paginação para a sua origem de dados do Google Cloud Platform (GCP). Para obter mais informações, veja Referência de regras de ligação do conector de dados GCP -
StorageAccountBlobContainerO tipo permite-lhe ingerir a partir de uma origem de dados do Blob de Armazenamento Azure. Para obter mais informações, veja referência da API Azure Conectores de Blobs de Armazenamento.
Utilize uma ferramenta de teste de API para chamar a API do conector de dados para criar o conector de dados que combina as regras de ligação e os componentes anteriores. Verifique se o conector está agora ligado na IU.
Entrada confidencial segura
Seja qual for a autenticação utilizada pelo conector de dados CCF, siga estes passos para garantir que as informações confidenciais são mantidas em segurança. O objetivo é transmitir credenciais do modelo do ARM para o CCF sem deixar objetos confidenciais legíveis no histórico de implementações.
Criar etiqueta
A definição do conector de dados cria um elemento de IU para pedir credenciais de segurança. Por exemplo, se o conector de dados se autenticar numa origem de registo com o OAuth, a secção de definição do conector de dados inclui o OAuthForm tipo nas instruções. Esta ação configura o modelo do ARM para pedir as credenciais.
"instructions": [
{
"type": "OAuthForm",
"parameters": {
"UsernameLabel": "Username",
"PasswordLabel": "Password",
"connectButtonLabel": "Connect",
"disconnectButtonLabel": "Disconnect"
}
}
],
Armazenar entradas confidenciais
Uma secção do modelo de implementação do ARM fornece um local para o administrador implementar o conector de dados para introduzir a palavra-passe. Utilize securestring para manter as informações confidenciais protegidas num objeto que não é legível após a implementação. Para obter mais informações, veja Recomendações de segurança para parâmetros.
"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
}
}
Utilizar os objetos securestring
Por fim, o CCF utiliza os objetos de credenciais na secção do conector de dados.
"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"
}
},
Observação
A sintaxe estranha para o objeto "ClientSecret": "[[parameters('Password')]", de credencial não é um erro de digitação!
Para criar o modelo de implementação que também utiliza parâmetros, tem de escapar aos parâmetros nessa secção com um início[ adicional. Isto permite que os parâmetros atribuam um valor com base na interação do utilizador com o conector.
Para obter mais informações, veja Carateres de escape de expressões de modelo.
Criar o modelo de implementação
Empacote manualmente um modelo do Azure Resource Management (ARM) com os exemplos de código de modelo como guia. Estes exemplos de código estão divididos por secções de modelo do ARM que tem de juntar.
Se estiver a criar um conector de dados CCF do Google Cloud Platform (GCP), empacote o modelo de implementação com o modelo CCF de exemplo. Para obter informações sobre como preencher o modelo CCF do GCP, veja GcP data connector connection rules reference (Referência de regras de ligação do conector de dados GCP).
Além dos modelos de exemplo, as soluções publicadas disponíveis no hub de conteúdos Microsoft Sentinel utilizam o CCF para os respetivos conectores de dados. Veja as seguintes soluções como mais exemplos de como coser os componentes num modelo arm.
RestApiPoller Exemplos do conector de dados CCF
- Segurança do Browser Ermes
- Palo Alto Prisma Cloud CWPP
- Sophos Endpoint Protection
- Workday
- Atlassian Jira
- Início de Sessão Único okta
GCP Exemplos do conector de dados CCF
Implementar o conector
Implemente o conector sem código como um modelo personalizado.
Dica
Elimine os recursos que criou nos passos anteriores. O DCR e a tabela personalizada são criados com a implementação. Se não remover esses recursos antes de implementar, é mais difícil verificar o modelo.
- Copie o conteúdo do modelo de implementação do ARM.
- Siga as instruções editar e implementar o modelo a partir do artigo Início Rápido: Criar e implementar modelos do ARM com o portal do Azure.
Manter o isolamento de rede para a origem de registo
Se a origem de registo necessitar de isolamento de rede, configure uma lista de permissões de endereços IP públicos utilizados pelo CCF.
Azure redes virtuais utilizam etiquetas de serviço para definir controlos de acesso à rede. Para o CCF, essa etiqueta de serviço é Scuba.
Para localizar o intervalo de IP atual associado à etiqueta de serviço Scuba , veja Utilizar a API de Deteção de Etiquetas de Serviço.
Verificar o conector sem código
Veja o conector sem código na galeria do conector de dados. Abra o conector de dados e conclua todos os parâmetros de autenticação necessários para ligar. Depois de ligado com êxito, o DCR e as tabelas personalizadas são criados. Veja o recurso DCR no seu grupo de recursos e quaisquer tabelas personalizadas da área de trabalho de análise de registos.
Observação
Pode demorar até 30 minutos para ver os dados começarem a ingerir.
Exemplo
Cada passo na criação do conector sem código é representado nas secções de exemplo seguintes.
- Dados de exemplo
- Exemplo de tabela personalizada
- Regra de recolha de dados de exemplo
- Exemplo de definição de IU do conector de dados
- Regras de ligação de dados de exemplo
- Utilizar dados de exemplo com um modelo de exemplo
Para demonstrar uma origem de dados complexa com ingestão para mais do que uma tabela, este exemplo apresenta um esquema de tabela de saída e um DCR com vários fluxos de saída. O exemplo de DCR junta-os com as respetivas transformações de KQL. Os exemplos de definição de IU e regras de ligação do conector de dados continuam a partir desta mesma origem de dados de exemplo. Por fim, o modelo de solução utiliza todos estes componentes de exemplo para mostrar como criar o conector de dados CCF de exemplo.
Dados de exemplo
Uma origem de dados devolve o seguinte JSON ao ligar ao ponto final.
[
{
"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"
}
]
Esta resposta contém eventTypeAlerta e Ficheiro. Os eventos de ficheiro devem ser ingeridos na tabela padrão normalizada, AsimFileEventLogs, enquanto os eventos de alerta devem ser ingeridos numa tabela personalizada.
Exemplo de tabela personalizada
Para obter mais informações sobre a estrutura desta tabela, veja API de Tabelas. Os nomes de tabelas de registo personalizados devem ter um _CL sufixo.
{
"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"
}
]
}
}
}
Regra de recolha de dados de exemplo
O DCR seguinte define um único fluxo Custom-ExampleConnectorInput com a origem de dados de exemplo e transforma a saída em duas tabelas.
- O primeiro fluxo de dados direciona
eventType= Alerta para a tabela personalizadaExampleConnectorAlerts_CL. - o segundo fluxo de dados direciona
eventType= Ficheiro para a tabelaASimFileEventLogspadrão normalizada.
Para obter mais informações sobre a estrutura deste exemplo, veja Estrutura de uma regra de recolha de dados.
Para criar este DCR num ambiente de teste, siga a API de Regras de Recolha de Dados. Os elementos do exemplo em {{double curly braces}} indicam variáveis que requerem valores para facilitar a utilização com uma ferramenta de teste de API. Quando cria este recurso no modelo do ARM, as variáveis aqui expressas são trocadas por parâmetros.
{
"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"
}
]
}
}
Exemplo de definição de IU do conector de dados
Este exemplo está localizado na referência de definições do conector de dados.
Regras de ligação do conector de dados de exemplo
Este exemplo está localizado na referência de Conectores de dados.
Exemplo de modelo do ARM
Crie o modelo de implementação do ARM com a seguinte estrutura, que inclui as 4 secções dos componentes JSON necessários para criar o conector de dados CCF:
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {},
"variables": {},
"resources": [],
}
Cosa as secções juntamente com um editor com suporte para JSON, como o Visual Code, para minimizar erros de sintaxe, como vírgulas e parênteses e parênteses finais.
Para orientar o processo de criação de modelos, os comentários são apresentados nos metadadosdescription ou inline com // notação de comentários. Para obter mais informações, veja Melhores práticas do modelo arm - comentários.
Considere utilizar o toolkit de testes de modelos do ARM (arm-ttk) para validar o modelo que criar. Para obter mais informações, veja arm-ttk.
Modelo arm de exemplo - parâmetros
Para obter mais informações, veja Parâmetros nos modelos do ARM.
Aviso
Utilize securestring para todas as palavras-passe e segredos em objetos legíveis após a implementação de recursos.
Para obter mais informações, veja Proteger as recomendações de segurança e entrada confidencialpara parâmetros.
{
"$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
}
Modelo arm de exemplo - variáveis
Estas variáveis recomendadas ajudam a simplificar o modelo. Utilize mais ou menos conforme necessário. Para obter mais informações, veja Variables in ARM templates (Variáveis em modelos 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
Exemplo de modelo do ARM - recursos
Existem 5 recursos de implementação do ARM neste guia de modelo que abrigam os 4 componentes de criação do conector de dados CCF.
-
contentTemplates (um recurso principal)
- metadados
- dataCollectionRules – para obter mais informações, veja Regra de recolha de dados.
- tabelas – para obter mais informações, veja Definição da tabela de saída.
- dataConnectorDefinitions – para obter mais informações, veja Interface de utilizador do conector de dados.
- metadados
-
contentTemplates
- metadados
- RestApiPoller – para obter mais informações, veja Regras de ligação de dados.
- 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!
]
}
Conteúdo relacionado
Para obter mais informações, confira