Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Платформа без программирования CCF предоставляет партнерам, опытным пользователям и разработчикам возможность создавать пользовательские коннекторы для приема данных в Microsoft Sentinel.
Соединители, созданные с помощью CCF, полностью являются SaaS без требований к установке служб. Они также включают мониторинг состояния системы и полную поддержку от Microsoft Sentinel.
Чтобы создать соединитель CCF и подключить источник данных к Microsoft Sentinel, выполните следующие действия.
- Создание соединителя данных
- Создание шаблона ARM
- Развертывание соединителя
- Подключите Microsoft Sentinel к источнику данных и начните прием данных
В этой статье показано, как выполнить каждый шаг и предоставить пример соединителя без кода для сборки по пути.
Если вы являетесь партнером по разработке программного обеспечения и нуждаетесь в поддержке для создания соединителя данных CCF, обратитесь к AzureSentinelPartner@microsoft.com партнерам Microsoft Sentinel по вопросам помощи.
Как этот CCF отличается от предыдущей версии?
Начальная версия CCF была объявлена в январе 2022 года. С тех пор мы улучшили платформу и устаревший выпуск больше не рекомендуется. Эта новая версия CCF имеет следующие ключевые улучшения:
Улучшена поддержка различных типов проверки подлинности и разбиения на страницы.
Поддерживает стандартные правила сбора данных (DCR).
Теперь части пользовательского интерфейса и конфигурации подключения бескодовго соединителя разделены. Это позволяет создавать соединители с несколькими подключениями, которые ранее не были возможными.
Предварительные условия
Прежде чем создавать соединитель, ознакомьтесь с источником данных и способом подключения Microsoft Sentinel.
Конечная точка сбора данных (DCE)
DCE — это требование для DCR. Для каждого развертывания DCR в рабочей области Log Analytics создается только один DCE. Каждый DCR, развернутый для рабочей области Microsoft Sentinel, использует тот же DCE. Дополнительные сведения о том, как создать одну или нужно ли вам новую, см . в статье о конечных точках сбора данных в Azure Monitor.
Схема выходных таблиц.
Важно понимать форму потока данных и поля, которые необходимо включить в выходную таблицу. Обратитесь к документации по источнику данных или проанализируйте достаточное количество выходных примеров.
Изучите следующие компоненты и проверьте, поддерживаются ли они в справочном руководстве API по соединителю данных Data Connector.
Структура HTTP-запроса и ответа к источнику данных
Проверка подлинности, необходимая источником данных.
Например, если для источника данных требуется маркер, подписанный сертификатом, справочник по API соединителя данных указывает, что проверка подлинности сертификата не поддерживается.Параметры разбиения на страницы для источника данных
Тестирование API
Мы рекомендуем протестировать компоненты с помощью средства тестирования API, например одного из следующих:
- Visual Studio Code с расширением из Visual Studio Marketplace
- PowerShell Invoke-RestMethod
- Microsoft Edge — средство сетевой консоли
- Бруно
- curl
Внимание
В сценариях, в которых есть конфиденциальные данные, такие как учетные данные, секреты, маркеры доступа, ключи API и другие аналогичные сведения, обязательно используйте средство, которое защищает данные с помощью необходимых функций безопасности, работает в автономном режиме или локально, не синхронизирует данные с облаком и не требует входа в учетную запись в Сети. Таким образом, вы снижаете риск предоставления конфиденциальных данных общественности.
Создание соединителя данных
Совет
Если вы являетесь независимым поставщиком программного обеспечения (ISV) и нуждаетесь в поддержке при создании интеграции Microsoft Sentinel с помощью Microsoft Sentinel Codeless Connector Framework, команда Microsoft App Assure может помочь. Чтобы команда App Assure обработала ваш запрос, отправьте электронное письмо на azuresentinelpartner@microsoft.com.
Для создания соединителя данных CCF требуется четыре компонента.
- Определение выходной таблицы
- Правило сбора данных (DCR)
- Пользовательский интерфейс соединителя данных
- Правила подключения соединителя данных
Каждый компонент содержит раздел, в который подробно описан процесс создания и проверки. Возьмите JSON из каждого компонента для окончательной упаковки шаблона ARM.
Определение выходной таблицы
Совет
Пропустите этот шаг, если ваши данные поступают только в стандартные таблицы Log Analytics. Примерами стандартных таблиц являются CommonSecurityLog и ASimDnsActivityLogs. Для получения дополнительной информации о полном списке поддерживаемых стандартных типов данных см. поддержка преобразования данных для пользовательских соединителей данных.
Если источник данных не соответствует схеме стандартной таблицы, у вас есть два варианта:
- Создание настраиваемой таблицы для всех данных
- Создать настраиваемую таблицу из части данных и перенести данные, соответствующие критериям, в стандартную таблицу.
Используйте пользовательский интерфейс Log Analytics для простого способа создания настраиваемой таблицы вместе с DCR. Если вы создаете пользовательскую таблицу с помощью API таблиц или другого программного метода, добавьте _CL суффикс вручную в имя таблицы. Дополнительные сведения см. в разделе "Создание настраиваемой таблицы".
Дополнительные сведения о разбиение данных на несколько таблиц см. в примерах данных и примере настраиваемой таблицы , созданной для данных.
Правило сбора данных
Правила сбора данных (DCR) определяют процесс сбора данных в Azure Monitor. Правила DCR указывают, какие данные следует собирать, как их преобразовывать и куда отправлять.
- Существует только один DCR, который развертывается на каждый коннектор данных.
- DCR должен иметь соответствующий DCE в том же регионе.
- При установке соединителя данных CCF создается DCR, если он не создан ранее.
Ознакомьтесь с последними сведениями о контроллерах домена в следующих статьях:
Руководство по созданию DCE, включая использование примеров данных для создания пользовательской таблицы и DCR, смотрите в руководстве "Учебник: Отправка данных в журналы Azure Monitor с помощью API приема журналов (портал Azure)". Используйте процесс, приведенный в этом руководстве, чтобы проверить правильность приема данных в таблицу с помощью DCR.
Сведения о создании сложного DCR с несколькими потоками данных см. в разделе примеров DCR.
Пользовательский интерфейс соединителя данных
Этот компонент отображает пользовательский интерфейс для соединителя данных в галерее соединителей данных Microsoft Sentinel. Каждый соединитель данных может иметь только одно определение пользовательского интерфейса.
Создайте пользовательский интерфейс соединителя данных с помощью API определения соединителя данных. Используйте справочник по определениям коннекторов данных в качестве дополнения, чтобы объяснить элементы API более подробно.
Примечания:
- Свойство
kindсоединителя опроса API всегда должно бытьCustomizable. - Поскольку это тип разъема для опроса API, задайте тип
connectivityCriteriaнаhasDataConnectors. -
instructionStepsПример включает в себя кнопку типаConnectionToggleButton. Эта кнопка помогает активировать развертывание правил соединителя данных на основе указанных параметров подключения.
Используйте инструмент для тестирования API, чтобы вызвать API определений соединителя данных и создать его пользовательский интерфейс для проверки в галерее соединителей данных.
Чтобы изучить пример, см. раздел справочника по примерам определений соединителей данных.
Правила подключения к данным
В настоящее время существует три типа правил подключения к данным для определения соединителя данных CCF.
-
RestApiPollerkind позволяет настроить разбиение на страницы, авторизацию и ожидаемые полезные данные запроса и ответа для источника данных. Дополнительные сведения см. в справочнике по правилам подключения соединителя данных RestApiPoller. -
GCPkind позволяет уменьшить время разработки, автоматически настраивая постраничный вывод и ожидаемые полезные нагрузки ответа для источника данных Google Cloud Platform (GCP). Дополнительные сведения см. в разделе "Правила подключения соединителя данных GCP" -
StorageAccountBlobContainerтип позволяет загружать данные из источника Blob в хранилище Azure. Дополнительные сведения см. в справочнике API соединителей Blob хранилища Azure.
Используйте средство тестирования API для вызова API соединителя данных, чтобы создать соединитель данных, который объединяет правила подключения и предыдущие компоненты. Убедитесь, что соединитель подключен к пользовательскому интерфейсу.
Безопасные конфиденциальные входные данные
Независимо от того, какая проверка подлинности используется соединителем данных CCF, выполните эти действия, чтобы обеспечить безопасность конфиденциальной информации. Цель состоит в том, чтобы передать учетные данные из шаблона ARM в CCF, не оставляя доступные для чтения конфиденциальные объекты в журнале развертываний.
Создать метку
Определение соединителя данных создает элемент пользовательского интерфейса для запроса учетных данных безопасности. Например, если соединитель данных проходит проверку подлинности в источнике журнала с помощью OAuth, раздел определения соединителя данных включает тип OAuthForm в инструкциях. Это настраивает шаблон ARM для запроса учетных данных.
"instructions": [
{
"type": "OAuthForm",
"parameters": {
"UsernameLabel": "Username",
"PasswordLabel": "Password",
"connectButtonLabel": "Connect",
"disconnectButtonLabel": "Disconnect"
}
}
],
Хранение конфиденциальных входных данных
Раздел шаблона развертывания ARM предоставляет место для администратора, развертывающего соединитель данных для ввода пароля. Используется securestring для сохранения конфиденциальной информации, защищенной в объекте, который не доступен для чтения после развертывания. Дополнительные сведения см. в рекомендациях по безопасности для параметров.
"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
}
}
Использование объектов securestring
Наконец, CCF использует объекты учетных данных в разделе соединителя данных.
"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"
}
},
Примечание.
Странный синтаксис объекта "ClientSecret": "[[parameters('Password')]", учетных данных не является опечаткой!
Чтобы создать шаблон развертывания, который также использует параметры, необходимо экранировать параметры в этом разделе, добавив введение дополнительных символов[. Это позволяет параметрам назначать значение на основе взаимодействия пользователя с соединителем.
Дополнительные сведения см. в статье "Выражения шаблонов", экранные символы.
Создание шаблона развертывания
Вручную упаковайте шаблон Azure Resource Management (ARM), используя примеры кода шаблона в качестве руководства. Эти примеры кода разделены разделами шаблонов ARM, которые необходимо объединить вместе.
Если вы создаете соединитель данных CCF для Google Cloud Platform (GCP), упаковите шаблон развертывания с помощью примера шаблона CCF GCP. Дополнительные сведения о том, как заполнить шаблон GCP CCF, см. в справочнике по правилам подключения соединителя данных GCP.
Помимо примеров шаблонов опубликованные решения, доступные в центре содержимого Microsoft Sentinel, используют CCF для своих соединителей данных. Ознакомьтесь со следующими решениями в качестве дополнительных примеров того, как объединить компоненты в шаблон ARM.
RestApiPoller Примеры соединителя данных CCF
- Безопасность браузера Ermes
- Palo Alto Prisma Cloud CWPP
- Sophos Endpoint Protection;
- Будний день
- Atlassian Jira
- Единый вход Okta
GCP Примеры соединителя данных CCF
Развертывание соединителя
Разверните соединитель без кода в качестве пользовательского шаблона.
Совет
Удалите ресурсы, созданные на предыдущих шагах. DCR и настраиваемая таблица создаются с развертыванием. Если вы не удалите эти ресурсы перед развертыванием, вам будет сложнее проверить шаблон.
- Скопируйте содержимое шаблона развертывания ARM.
- Следуйте инструкциям по редактированию и развертыванию шаблонов из статьи Краткое руководство. Создание и развертывание шаблонов ARM с помощью портал Azure.
Обеспечение сетевой изоляции для источника ведения журнала
Если источник ведения журнала требует сетевой изоляции, настройте список разрешений общедоступных IP-адресов, используемых CCF.
Виртуальные сети Azure используют теги служб для определения элементов управления доступом к сети. Для CCF этот тег службы — Scuba.
Чтобы найти текущий диапазон IP-адресов, связанный с тегом службы scuba , см. раздел "Использование API обнаружения тегов службы".
Проверка соединителя без кода
Просмотрите бескодовое соединение в галерее соединителей данных. Откройте соединитель данных и завершите все параметры проверки подлинности, необходимые для подключения. После успешного подключения создаются DCR и пользовательские таблицы. Просмотрите ресурс DCR в вашей группе ресурсов и любые пользовательские таблицы из рабочей области Log Analytics.
Примечание.
Для начала приема данных может потребоваться до 30 минут.
Пример
Каждый шаг в создании соединителя без кода представлен в следующих примерах.
- Примеры данных
- Пример настраиваемой таблицы
- Пример правила сбора данных
- Пример определения пользовательского интерфейса соединителя данных
- Примеры правил подключения к данным
- Использование примеров данных с примером шаблона
Чтобы продемонстрировать сложный источник данных с загрузкой в несколько таблиц, в этом примере представлена схема выходной таблицы и DCR с несколькими выходными потоками. Пример DCR объединяет их вместе с преобразованиями KQL. Примеры определения пользовательского интерфейса соединителя данных и правил подключения продолжаются из этого же примера источника данных. Наконец, шаблон решения использует все эти компоненты, например, чтобы продемонстрировать, как от начала до конца создать пример соединителя данных CCF.
Демонстрационные данные
Источник данных возвращает следующий код JSON при подключении к конечной точке.
[
{
"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"
}
]
Этот ответ содержит eventTypeоповещение и файл. События файла должны быть загружены в нормализованную стандартную таблицу AsimFileEventLogs, а события оповещений должны быть загружены в настраиваемую таблицу.
Пример настраиваемой таблицы
Дополнительные сведения о структуре этой таблицы см. в разделе API таблиц. Пользовательские имена таблиц журналов должны иметь _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"
}
]
}
}
}
Пример правила сбора данных
Следующий DCR определяет один поток Custom-ExampleConnectorInput с помощью примера источника данных и преобразует выходные данные в две таблицы.
- Первый поток данных направляет
eventType= оповещение в настраиваемуюExampleConnectorAlerts_CLтаблицу. - второй поток данных направляет
eventType= файл в нормализованную стандартную таблицу.ASimFileEventLogs
Дополнительные сведения о структуре этого примера см. в разделе "Структура правила сбора данных".
Чтобы создать этот DCR в тестовой среде, следуйте API правил сбора данных. В элементах примера
{
"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"
}
]
}
}
Пример определения пользовательского интерфейса соединителя данных
Этот пример находится в справочнике по определениям соединителя данных.
Примеры правил подключения соединителя данных
Этот пример находится в справочнике по соединителям данных.
Пример шаблона ARM
Создайте шаблон развертывания ARM со следующей структурой, которая включает в себя 4 раздела компонентов JSON, необходимых для создания соединителя данных CCF:
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {},
"variables": {},
"resources": [],
}
Состыкуйте секции вместе с редактором, поддерживающим JSON, таким как Visual Studio Code, чтобы свести к минимуму синтаксические ошибки, такие как запятые и закрывающие скобки и круглые скобки.
Чтобы направлять процесс создания шаблона, комментарии отображаются в метаданныхdescription или встраиваются с помощью обозначения //. Дополнительные сведения см. в разделе Лучшие практики использования шаблонов ARM — комментарии.
Рассмотрите возможность использования тестового пакета ARM (arm-ttk) для проверки создаваемого шаблона. Для получения дополнительной информации см. arm-ttk.
Пример шаблона ARM — параметры
Дополнительные сведения см. в разделе "Параметры" в шаблонах ARM.
Предупреждение
Используется securestring для всех паролей и секретов в объектах, доступных для чтения после развертывания ресурсов.
Дополнительные сведения см. в разделе "Безопасные конфиденциальные входные данные " и рекомендации по безопасности для параметров.
{
"$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
}
Пример шаблона ARM — переменные
Эти рекомендуемые переменные помогают упростить шаблон. Используйте больше или меньше по мере необходимости. Дополнительные сведения см. в разделе "Переменные" в шаблонах 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
Пример шаблона ARM — ресурсы
В этом руководстве по шаблону содержится 5 ресурсов развертывания ARM, в которых размещены 4 компонента построения соединителя данных CCF.
-
contentTemplates (родительский ресурс)
- метаданные
- dataCollectionRules — для получения дополнительной информации см. правило сбора данных.
- таблицы. Дополнительные сведения см. определение выходной таблицы.
- dataConnectorDefinitions — дополнительные сведения см. в пользовательском интерфейсе соединителя данных.
- метаданные
-
contentTemplates
- метаданные
- RestApiPoller — дополнительные сведения см. в разделе "Правила подключения к данным".
- пакетыКонтента
"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!
]
}
Связанный контент
Дополнительные сведения см. в
- О решениях Microsoft Sentinel.
- Справочник по ARM шаблонам коннекторов данных