Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Esta guía le ayuda a comprender, compilar e implementar conectores sin código basados en inserción para Microsoft Sentinel mediante la inserción de Codeless Connector Framework (CCF) (versión preliminar).
¿Qué es la inserción de CCF?
Los conectores de inserción de CCF permiten a las aplicaciones enviar eventos de seguridad directamente a Microsoft Sentinel en tiempo real. A diferencia de los conectores tradicionales basados en sondeos que capturan periódicamente datos de las API, los conectores push permiten insertar datos en Sentinel a medida que se producen eventos en el sistema.
La inserción de CCF proporciona varias ventajas clave:
- Flujo de datos controlado por la aplicación: La aplicación controla cuándo y cómo enviar datos, lo que permite estrategias de procesamiento por lotes inteligentes y un uso de red optimizado.
- Ingesta en tiempo real: Envíe datos inmediatamente a medida que se produzcan eventos, sin esperar a intervalos de sondeo.
- Arquitectura simplificada: No es necesario mantener los puntos de conexión de API para que Sentinel sondee.
- Aprovisionamiento basado en plantillas: La implementación crea plantillas de ARM para DCR, tablas personalizadas, Entra registro de aplicaciones y secretos de cliente: recibirá los detalles de conexión que se configurarán en la aplicación de envío.
- Autenticación segura: Usa aplicaciones Microsoft Entra con OAuth 2.0 para el envío seguro de datos.
Requisitos previos
- Antes de empezar, debe tener acceso al repositorio de GitHub Azure-Sentinel para empaquetar herramientas.
- permisos de Microsoft Entra:
- Permiso para crear un registro de aplicación en Microsoft Entra ID. Normalmente, requiere Entra rol de desarrollador de aplicaciones de identificador o superior.
- Permiso para crear una aplicación con secretos. Si no concede este permiso, se produce un error en el conector debido a motivos de seguridad.
- El publicador debe tener el rol adecuado para recuperar tokens de la aplicación Microsoft Entra. Estos tokens son necesarios para autenticar las solicitudes al punto de conexión de recopilación de datos (DCE), que es el punto de conexión donde el conector inserta en última instancia sus datos. Si el proveedor no puede recuperar tokens, no se pueden enviar datos al DCE.
- Permisos de Microsoft Azure:
- Permiso para asignar el rol publicador de métricas de supervisión en la regla de recopilación de datos (DCR). Normalmente, requiere Azure rol propietario de RBAC o administrador de acceso de usuario.
Funcionamiento de la inserción de CCF
El modelo de inserción frente al modelo de extracción
Comprender la diferencia entre los modelos de ingesta de datos de inserción y extracción le ayuda a elegir el tipo de conector adecuado para su escenario.
Conectores de extracción de CCF basados en sondeos:
En el modelo de extracción, Microsoft Sentinel sondea periódicamente la API para recuperar datos:
- Microsoft Sentinel inicia conexiones a la API de origen de datos según una programación configurada.
- Los datos llegan a intervalos de sondeo regulares, como cada cinco minutos.
- Debe mantener un punto de conexión de API accesible públicamente.
- la infraestructura de sondeo de Sentinel administra el proceso de recopilación de datos.
Conectores de inserción de CCF: controlados por eventos:
En el modelo de inserción, la aplicación envía datos directamente a Microsoft Sentinel:
- La aplicación inicia el envío de datos cuando se producen eventos.
- Los datos llegan casi en tiempo real a medida que se generan eventos.
- No es necesario mantener un punto de conexión de API.
- La aplicación controla el procesamiento por lotes, el tiempo y la optimización del flujo de datos.
Flujo de datos de inserción
El flujo de datos de inserción de CCF consta de cinco pasos principales:
Implemente el conector en Microsoft Sentinel.
Azure crea automáticamente los siguientes recursos:
- Microsoft Entra aplicación con credenciales
- Regla de recopilación de datos (DCR): define cómo procesar los datos
- Punto de conexión de recopilación de datos (DCE): la dirección URL a la que se envían datos
- Tabla de registro personalizada: donde se almacenan los datos
- Asignaciones de roles: permisos para la aplicación de Entra
Recibirá los siguientes detalles de conexión:
- Identificación del inquilino
- Identificador de aplicación (cliente)
- Secreto de cliente
- URI de DCE (dirección URL del punto de conexión)
- Id. inmutable de DCR
- nombre de Stream
La aplicación envía los siguientes datos:
- Obtiene un token de OAuth 2.0 mediante las credenciales de la aplicación Entra generadas por CCF. Para obtener más información, consulte Flujo de credenciales de cliente de OAuth 2.0.
- Da formato a eventos como JSON que coinciden con el esquema de tabla.
- Posts data to the DCE endpoint
Azure procesa y almacena datos:
- Los DCR transforman los datos (transformaciones KQL opcionales)
- Los datos se escriben en la tabla personalizada en Log Analytics
- Los datos están disponibles para consultas, análisis y alertas en Sentinel
Artefactos de inserción de CCF
Una solución de conector de inserción de CCF consta de cuatro componentes principales:
- Definición de tabla personalizada
- Regla de recopilación de datos (DCR)
- Definición del conector (INTERFAZ de usuario)
- Configuración del conector de inserción
Definición de tabla personalizada
Qué es: Esquema que define la estructura de los datos en Log Analytics.
Requisitos clave:
- El nombre de la tabla debe terminar con
_CL(sufijo de registro personalizado). - Debe incluir una
TimeGeneratedcolumna (tipo datetime). - Tipos de columna: string, int, long, real, bool, datetime, dynamic, guid.
- Use la versión
2025-07-01de API o posterior. - Para obtener más información, consulte Creación de una tabla personalizada en los registros de Azure Monitor.
Ejemplo:
{
"name": "ContosoSecurityAlerts_CL",
"type": "Microsoft.OperationalInsights/workspaces/tables",
"apiVersion": "2025-07-01",
"properties": {
"schema": {
"name": "ContosoSecurityAlerts_CL",
"columns": [
{
"name": "TimeGenerated",
"type": "datetime"
},
{
"name": "EventSeverity",
"type": "string"
},
{
"name": "EventType",
"type": "string"
},
{
"name": "UserName",
"type": "string"
},
{
"name": "SourceIP",
"type": "string"
},
{
"name": "DeviceId",
"type": "string"
},
{
"name": "AlertMessage",
"type": "string"
}
]
}
}
}
Regla de recopilación de datos (DCR)
Qué es: Define cómo Azure Monitor ingiere y procesa los datos. Para obtener más información, consulte Reglas de recopilación de datos en Azure Monitor.
Lo que hace:
- Especifica el nombre del flujo de entrada (lo que usa la aplicación al enviar datos)
- Define transformaciones de KQL opcionales para dar forma y enriquecer datos
- Enruta los datos a la tabla de destino
- Vínculos al punto de conexión de recopilación de datos (DCE)
Componentes clave:
-
streamDeclarations: define la estructura de los datos entrantes (debe coincidir con lo que envía la aplicación) -
destinations: dónde van los datos (el área de trabajo de Log Analytics) -
dataFlows: la canalización de transformación del flujo de entrada a la tabla de salida -
dataCollectionEndpointId: vínculos a DCE para la ingesta de datos
Ejemplo:
{
"name": "ContosoSecurityAlertsPushDCR",
"apiVersion": "2021-09-01-preview",
"type": "Microsoft.Insights/dataCollectionRules",
"location": "[parameters('workspace-location')]",
"properties": {
"streamDeclarations": {
"Custom-ContosoSecurityAlerts": {
"columns": [
{
"name": "EventSeverity",
"type": "string"
},
{
"name": "EventType",
"type": "string"
},
{
"name": "UserName",
"type": "string"
},
{
"name": "SourceIP",
"type": "string"
},
{
"name": "DeviceId",
"type": "string"
},
{
"name": "AlertMessage",
"type": "string"
}
]
}
},
"destinations": {
"logAnalytics": [
{
"workspaceResourceId": "[variables('workspaceResourceId')]",
"name": "clv2ws1"
}
]
},
"dataFlows": [
{
"streams": [
"Custom-ContosoSecurityAlerts"
],
"destinations": [
"clv2ws1"
],
"transformKql": "source | extend TimeGenerated = now()",
"outputStream": "Custom-ContosoSecurityAlerts_CL"
}
],
"dataCollectionEndpointId": "[concat('/subscriptions/',parameters('subscription'),'/resourceGroups/',parameters('resourceGroupName'),'/providers/Microsoft.Insights/dataCollectionEndpoints/',parameters('workspace'))]"
}
}
Importante
- Stream nombre debe comenzar con
Custom-el prefijo . -
transformKqlpuede ser simplemente"source"para el paso a través o incluir lógica KQL para la transformación de datos. -
outputStreamdebe coincidir con el nombre de la tabla conCustom-el prefijo y_CLel sufijo.
Definición del conector (INTERFAZ de usuario)
La definición del conector controla cómo aparece el conector en la galería del conector de datos de Microsoft Sentinel. Para obtener más información, consulte Referencia de la API de definiciones de conector de datos.
La definición del conector incluye:
- Título, descripción y personalización de marca del conector
- Requisitos previos y permisos necesarios, como el acceso al área de trabajo y los permisos de Entra
- Pasos de instrucciones para la implementación
- Controles de interfaz de usuario para mostrar detalles de conexión a los usuarios
Elementos clave de la interfaz de usuario:
-
DeployPushConnectorButton: desencadena la implementación automatizada de recursos -
CopyableLabel: muestra los detalles de conexión después de la implementación (usa elfillWithparámetro ) -
Markdown: proporciona instrucciones con formato y contexto -
IsConnectedQuery: valida la conectividad del conector en función de los datos recientes
Estructura de ejemplo (abreviada para mayor claridad):
{
"name": "ContosoSecurityAlertsPush",
"apiVersion": "2022-09-01-preview",
"type": "Microsoft.SecurityInsights/dataConnectorDefinitions",
"location": "[parameters('workspace-location')]",
"kind": "Customizable",
"properties": {
"connectorUiConfig": {
"id": "ContosoSecurityAlertsPush",
"title": "Contoso Security Alerts (Push)",
"publisher": "Contoso Corporation",
"descriptionMarkdown": "The [Contoso Security Alerts](https://www.contoso.com/) connector provides the capability to push real-time security alerts from your Contoso application directly into Microsoft Sentinel using the Codeless Connector Framework (CCF) Push pattern. This connector ingests alert severity, event types, user information, and network details into a custom Log Analytics table for analysis, alerting, and visualization.",
"graphQueries": [
{
"metricName": "Security Alerts",
"legend": "ContosoSecurityAlerts_CL",
"baseQuery": "ContosoSecurityAlerts_CL"
}
],
"sampleQueries": [
{
"description": "All security alerts",
"query": "ContosoSecurityAlerts_CL\n | sort by TimeGenerated desc"
},
{
"description": "Critical and High severity alerts",
"query": "ContosoSecurityAlerts_CL\n | where EventSeverity in ('Critical', 'High')\n | sort by TimeGenerated desc"
}
],
"dataTypes": [
{
"name": "ContosoSecurityAlerts_CL",
"lastDataReceivedQuery": "ContosoSecurityAlerts_CL\n| summarize Time = max(TimeGenerated)\n| where isnotempty(Time)"
}
],
"connectivityCriteria": [
{
"type": "IsConnectedQuery",
"value": [
"ContosoSecurityAlerts_CL\n| summarize LastLogReceived = max(TimeGenerated)\n| project IsConnected = LastLogReceived > ago(7d)"
]
}
],
"availability": {
"status": 1
},
"permissions": {
"resourceProvider": [
{
"provider": "Microsoft.OperationalInsights/workspaces",
"permissionsDisplayText": "read and write permissions are required.",
"providerDisplayName": "Workspace",
"scope": "Workspace",
"requiredPermissions": {
"write": true,
"read": true,
"delete": true
}
}
],
"customs": [
{
"name": "Microsoft Entra",
"description": "Permission to create an app registration in Microsoft Entra ID. Typically requires Entra ID Application Developer role or higher."
},
{
"name": "Microsoft Azure",
"description": "Permission to assign Monitoring Metrics Publisher role on data collection rule (DCR). Typically requires Azure RBAC Owner or User Access Administrator role."
}
]
},
"instructionSteps": [
{
"title": "1. Create ARM Resources and Provide the Required Permissions",
"description": "This connector enables your Contoso application to push security alerts directly to Microsoft Sentinel via the Azure Monitor Ingestion API.",
"instructions": [
{
"type": "Markdown",
"parameters": {
"content": "#### Automated Configuration and Secure Data Ingestion with Entra Application \nClicking on \"Deploy\" will trigger the creation of a Log Analytics table and a Data Collection Rule (DCR). \nIt will then create an Entra application, link the DCR to it, and set the entered secret in the application. This setup enables data to be sent securely to the DCR using an Entra token."
}
},
{
"type": "DeployPushConnectorButton",
"parameters": {
"label": "Deploy Contoso Push connector resources",
"applicationDisplayName": "Contoso Security Alerts Push Connector Application"
}
}
]
},
{
"title": "2. Configure Your Contoso Application",
"description": "Use the following parameters to configure your Contoso application to push security alerts to the workspace.",
"instructions": [
{
"type": "CopyableLabel",
"parameters": {
"label": "Tenant ID (Directory ID)",
"fillWith": [
"TenantId"
]
}
},
{
"type": "CopyableLabel",
"parameters": {
"label": "Entra App Registration Application ID",
"fillWith": [
"ApplicationId"
],
"placeholder": "Deploy push connector to get the App Registration Application ID"
}
},
{
"type": "CopyableLabel",
"parameters": {
"label": "Entra App Registration Secret",
"fillWith": [
"ApplicationSecret"
],
"placeholder": "Deploy push connector to get the App Registration Secret"
}
},
{
"type": "CopyableLabel",
"parameters": {
"label": "Data Collection Endpoint Uri",
"fillWith": [
"DataCollectionEndpoint"
],
"placeholder": "Deploy push connector to get the Data Collection Endpoint Uri"
}
},
{
"type": "CopyableLabel",
"parameters": {
"label": "Data Collection Rule Immutable ID",
"fillWith": [
"DataCollectionRuleId"
],
"placeholder": "Deploy push connector to get the Data Collection Rule Immutable ID"
}
},
{
"type": "CopyableLabel",
"parameters": {
"label": "Stream Name",
"value": "Custom-ContosoSecurityAlerts"
}
},
{
"type": "Markdown",
"parameters": {
"content": "#### Configure Contoso Application\nUpdate your Contoso application configuration with the above credentials to enable security alert push to Microsoft Sentinel.\n\nExample configuration:\njson\n{\n \"azure\": {\n \"tenant_id\": \"<Tenant ID>\",\n \"client_id\": \"<Application ID>\",\n \"client_secret\": \"<Application Secret>\",\n \"dce_endpoint\": \"<Data Collection Endpoint Uri>\",\n \"dcr_immutable_id\": \"<Data Collection Rule Immutable ID>\",\n \"stream_name\": \"Custom-ContosoSecurityAlerts\"\n }\n}\n"
}
}
]
}
]
}
}
}
Importante
- El
idelemento enconnectorUiConfigdebe ser único y coincidir con las referencias en la configuración del conector de datos. - Use
IsConnectedQuerypara conectores de producción (valida datos recientes) ohasDataConnectorspara una validación más sencilla. - Los
fillWithparámetros deCopyableLabelse rellenan automáticamente después de la implementación. - Los valores fijos, como el nombre de la secuencia, usan el
valueparámetro en lugar defillWith.
Configuración del conector de inserción
La configuración del conector de inserción es la instancia del conector de datos que vincula la definición del conector a los recursos implementados.
Configuración del conector de inserción
- Vincula la definición del conector (UI) con la DCR implementada y la aplicación de Entra
- Almacena los detalles de autenticación (id. de aplicación, identificador de entidad de servicio)
- Registra la configuración de DCR (punto de conexión, identificador inmutable, nombre de secuencia)
- Permite que la interfaz de usuario recupere y muestre los detalles de la conexión a los usuarios.
Propiedades clave:
-
connectorDefinitionName: debe coincidir con en la definición delidconector. -
dcrConfig: contiene el punto de conexión de DCR, el identificador de regla y el nombre de la secuencia. -
auth: contiene el identificador de la aplicación Entra y el identificador de la entidad de servicio -
kind: debe ser "Push" para los conectores push.
Ejemplo:
{
"name": "ContosoSecurityAlertsPushDCR",
"apiVersion": "2021-09-01-preview",
"type": "Microsoft.Insights/dataCollectionRules",
"location": "[parameters('workspace-location')]",
"properties": {
"streamDeclarations": {
"Custom-ContosoSecurityAlerts": {
"columns": [
{
"name": "EventSeverity",
"type": "string"
},
{
"name": "EventType",
"type": "string"
},
{
"name": "UserName",
"type": "string"
},
{
"name": "SourceIP",
"type": "string"
},
{
"name": "DeviceId",
"type": "string"
},
{
"name": "AlertMessage",
"type": "string"
}
]
}
},
"destinations": {
"logAnalytics": [
{
"workspaceResourceId": "[variables('workspaceResourceId')]",
"name": "clv2ws1"
}
]
},
"dataFlows": [
{
"streams": [
"Custom-ContosoSecurityAlerts"
],
"destinations": [
"clv2ws1"
],
"transformKql": "source | extend TimeGenerated = now()",
"outputStream": "Custom-ContosoSecurityAlerts_CL"
}
],
"dataCollectionEndpointId": "[concat('/subscriptions/',parameters('subscription'),'/resourceGroups/',parameters('resourceGroupName'),'/providers/Microsoft.Insights/dataCollectionEndpoints/',parameters('workspace'))]"
}
}
Importante
-
connectorDefinitionNamedebe coincidir exactamente con la definición delidconector. -
streamNamedebe coincidir con la secuencia declarada en la DCR. - Este recurso se crea automáticamente durante la implementación cuando los usuarios seleccionan el botón DeployPushConnector .
Creación del primer conector de inserción
En este ejemplo, creará un conector de inserción simple que envía alertas de seguridad desde la aplicación a Sentinel.
Gol: Envío de alertas de seguridad desde la aplicación a Sentinel en tiempo real
La aplicación envía la estructura de eventos:
{
"TimeGenerated": "2025-11-21T10:30:00Z",
"EventSeverity": "Medium",
"EventType": "LoginAlert",
"UserName": "alice@contoso.com",
"SourceIP": "192.168.1.100",
"DeviceId": "device-12345",
"AlertMessage": "Multiple failed login attempts detected"
}
Guía paso a paso para crear el conector de inserción
Clonación del repositorio de Azure-Sentinel
Después, la bifurcación clona el repositorio de Azure-Sentinel oficial en la máquina local. Este repositorio contiene las herramientas de empaquetado y proporciona la estructura de la solución estándar.
Clonación del repositorio
git clone https://github.com/<YOUR_FORK>/Azure-Sentinel.gitVaya al directorio Soluciones.
cd Azure-Sentinel/Solutions
La estructura del repositorio incluye:
- Tools/Create-Azure-Sentinel-Solution/V3/
- Contiene el script de empaquetado de createSolutionV3.ps1
- Soluciones/ Dónde creará la solución del conector
Crear la estructura de carpetas de la solución Cree un directorio de solución dentro de la carpeta Solutions/ siguiendo la convención de nomenclatura estándar. Crear directorios de soluciones (desde Azure-Sentinel/Solutions/)
mkdir ContosoSecurityAlerts cd ContosoSecurityAlerts mkdir Data mkdir "Data Connectors" mkdir "Data Connectors/ContosoSecurityAlerts_ccf"La estructura de carpetas es similar a la siguiente:
Azure-Sentinel/
└── Soluciones/
└── ContosoSecurityAlerts/
├── Datos/
└── Conectores de datos/
└── ContosoSecurityAlerts_ccf/Definición de la tabla
En la carpeta ContosoSecurityAlerts_ccf, cree un archivo denominado table.json con la definición de tabla personalizada:
{ "name": "ContosoSecurityAlerts_CL", "type": "Microsoft.OperationalInsights/workspaces/tables", "apiVersion": "2025-07-01", "properties": { "schema": { "name": "ContosoSecurityAlerts_CL", "columns": [ { "name": "TimeGenerated", "type": "datetime" }, { "name": "EventSeverity", "type": "string" }, { "name": "EventType", "type": "string" }, { "name": "UserName", "type": "string" }, { "name": "SourceIP", "type": "string" }, { "name": "DeviceId", "type": "string" }, { "name": "AlertMessage", "type": "string" } ] } } }Creación de dcr
En la carpeta ContosoSecurityAlerts_ccf, cree un archivo denominado DCR.json que defina el flujo de entrada y enrute los datos a la tabla:
{ "name": "ContosoSecurityAlertsPushDCR", "apiVersion": "2021-09-01-preview", "type": "Microsoft.Insights/dataCollectionRules", "location": "[parameters('workspace-location')]", "properties": { "streamDeclarations": { "Custom-ContosoSecurityAlerts": { "columns": [ { "name": "EventSeverity", "type": "string" }, { "name": "EventType", "type": "string" }, { "name": "UserName", "type": "string" }, { "name": "SourceIP", "type": "string" }, { "name": "DeviceId", "type": "string" }, { "name": "AlertMessage", "type": "string" } ] } }, "destinations": { "logAnalytics": [ { "workspaceResourceId": "[variables('workspaceResourceId')]", "name": "clv2ws1" } ] }, "dataFlows": [ { "streams": [ "Custom-ContosoSecurityAlerts" ], "destinations": [ "clv2ws1" ], "transformKql": "source | extend TimeGenerated = now()", "outputStream": "Custom-ContosoSecurityAlerts_CL" } ], "dataCollectionEndpointId": "[concat('/subscriptions/',parameters('subscription'),'/resourceGroups/',parameters('resourceGroupName'),'/providers/Microsoft.Insights/ dataCollectionEndpoints/',parameters('workspace'))]" } }Creación de la definición del conector
En la carpeta ContosoSecurityAlerts_ccf, cree un archivo denominado connectorDefinition.json que defina cómo interactúan los usuarios con el conector en Sentinel:
{ "name": "ContosoSecurityAlertsPush", "apiVersion": "2022-09-01-preview", "type": "Microsoft.SecurityInsights/dataConnectorDefinitions", "location": "[parameters('workspace-location')]", "kind": "Customizable", "properties": { "connectorUiConfig": { "id": "ContosoSecurityAlertsPush", "title": "Contoso Security Alerts (Push)", "publisher": "Contoso Corporation", "descriptionMarkdown": "The [Contoso Security Alerts](https://www.contoso.com/) connector provides the capability to push real-time security alerts from your Contoso application directly into Microsoft Sentinel using the Codeless Connector Framework (CCF) Push pattern. This connector ingests alert severity, event types, user information, and network details into a custom Log Analytics table for analysis, alerting, and visualization.", "graphQueries": [ { "metricName": "Security Alerts", "legend": "ContosoSecurityAlerts_CL", "baseQuery": "ContosoSecurityAlerts_CL" } ], "sampleQueries": [ { "description": "All security alerts", "query": "ContosoSecurityAlerts_CL\n | sort by TimeGenerated desc" }, { "description": "Critical and High severity alerts", "query": "ContosoSecurityAlerts_CL\n | where EventSeverity in ('Critical', 'High')\n | sort by TimeGenerated desc" } ], "dataTypes": [ { "name": "ContosoSecurityAlerts_CL", "lastDataReceivedQuery": "ContosoSecurityAlerts_CL\n| summarize Time = max(TimeGenerated)\n| where isnotempty(Time)" } ], "connectivityCriteria": [ { "type": "IsConnectedQuery", "value": [ "ContosoSecurityAlerts_CL\n| summarize LastLogReceived = max(TimeGenerated)\n| project IsConnected = LastLogReceived > ago(7d)" ] } ], "availability": { "status": 1 }, "permissions": { "resourceProvider": [ { "provider": "Microsoft.OperationalInsights/workspaces", "permissionsDisplayText": "read and write permissions are required.", "providerDisplayName": "Workspace", "scope": "Workspace", "requiredPermissions": { "write": true, "read": true, "delete": true } } ], "customs": [ { "name": "Microsoft Entra", "description": "Permission to create an app registration in Microsoft Entra ID. Typically requires Entra ID Application Developer role or higher." }, { "name": "Microsoft Azure", "description": "Permission to assign Monitoring Metrics Publisher role on data collection rule (DCR). Typically requires Azure RBAC Owner or User Access Administrator role." } ] }, "instructionSteps": [ { "title": "1. Create ARM Resources and Provide the Required Permissions", "description": "This connector enables your Contoso application to push security alerts directly to Microsoft Sentinel via the Azure Monitor Ingestion API.", "instructions": [ { "type": "Markdown", "parameters": { "content": "#### Automated Configuration and Secure Data Ingestion with Entra Application \nClicking on \"Deploy\" will trigger the creation of a Log Analytics table and a Data Collection Rule (DCR). \nIt will then create an Entra application, link the DCR to it, and set the entered secret in the application. This setup enables data to be sent securely to the DCR using an Entra token." } }, { "type": "DeployPushConnectorButton", "parameters": { "label": "Deploy Contoso Push connector resources", "applicationDisplayName": "Contoso Security Alerts Push Connector Application" } } ] }, { "title": "2. Configure Your Contoso Application", "description": "Use the following parameters to configure your Contoso application to push security alerts to the workspace.", "instructions": [ { "type": "CopyableLabel", "parameters": { "label": "Tenant ID (Directory ID)", "fillWith": [ "TenantId" ] } }, { "type": "CopyableLabel", "parameters": { "label": "Entra App Registration Application ID", "fillWith": [ "ApplicationId" ], "placeholder": "Deploy push connector to get the App Registration Application ID" } }, { "type": "CopyableLabel", "parameters": { "label": "Entra App Registration Secret", "fillWith": [ "ApplicationSecret" ], "placeholder": "Deploy push connector to get the App Registration Secret" } }, { "type": "CopyableLabel", "parameters": { "label": "Data Collection Endpoint Uri", "fillWith": [ "DataCollectionEndpoint" ], "placeholder": "Deploy push connector to get the Data Collection Endpoint Uri" } }, { "type": "CopyableLabel", "parameters": { "label": "Data Collection Rule Immutable ID", "fillWith": [ "DataCollectionRuleId" ], "placeholder": "Deploy push connector to get the Data Collection Rule Immutable ID" } }, { "type": "CopyableLabel", "parameters": { "label": "Stream Name", "value": "Custom-ContosoSecurityAlerts" } }, { "type": "Markdown", "parameters": { "content": "#### Configure Contoso Application\nUpdate your Contoso application configuration with the above credentials to enable security alert push to Microsoft Sentinel.\n\nExample configuration:\njson\n{\n \"azure\": {\n \"tenant_id\": \"<Tenant ID>\",\n \"client_id\": \"<Application ID>\",\n \"client_secret\": \"<Application Secret>\",\n \"dce_endpoint\": \"<Data Collection Endpoint Uri>\",\n \"dcr_immutable_id\": \"<Data Collection Rule Immutable ID>\",\n \"stream_name\": \"Custom-ContosoSecurityAlerts\"\n }\n}\n" } } ] } ] } } }Creación de la configuración del conector de datos
En la carpeta ContosoSecurityAlerts_ccf, cree un archivo denominado dataConnector.json que vincule la definición del conector a los recursos implementados:
{ "name": "ContosoSecurityAlertsPushConnectorPolling", "apiVersion": "2024-09-01", "type": "Microsoft.SecurityInsights/dataConnectors", "kind": "Push", "properties": { "connectorDefinitionName": "ContosoSecurityAlertsPush", "dcrConfig": { "streamName": "Custom-ContosoSecurityAlerts", "dataCollectionEndpoint": "[[parameters('dcrConfig').dataCollectionEndpoint]", "dataCollectionRuleImmutableId": "[[parameters('dcrConfig').dataCollectionRuleImmutableId]" }, "auth": { "type": "Push", "AppId": "[[parameters('auth').appId]", "ServicePrincipalId": "[[parameters('auth').servicePrincipalId]" }, "request": { "RetryCount": 1 }, "response": { "eventsJsonPaths": [ "$" ] } } }Creación de Files de metadatos de solución
Solution_ContosoSecurityAlerts.json En la carpeta Datos, cree
Solution_ContosoSecurityAlerts.jsoncon los detalles de la solución:{ "Name": "ContosoSecurityAlerts", "Author": "Contoso Corporation - support@contoso.com", "Logo": "<svg width=\"75px\" height=\"75px\" viewBox=\"0 0 75 75\" xmlns=\"http://www.w3.org/2000/svg\"><rect width=\"75\" height=\"75\" fill=\"#FF6B35\"/><text x=\"37. 5\" y=\"45\" font-family=\"Arial\" font-size=\"18\" fill=\"white\" text-anchor=\"middle\" font-weight=\"bold\">CONTOSO</text></svg>", "Description": "The Contoso Security Alerts solution provides real-time security alert ingestion from your Contoso application into Microsoft Sentinel using the Codeless Connector Framework (CCF) Push pattern. Your application pushes alert severity, event types, user information, and network details directly to Azure Monitor for analysis, alerting, and visualization.", "Data Connectors": [ "Data Connectors/ContosoSecurityAlerts_ccf/connectorDefinition.json" ], "BasePath": "C:\\GitHub\\Azure-Sentinel\\Solutions\\ContosoSecurityAlerts", "Version": "1.0.0", "Metadata": "SolutionMetadata.json", "TemplateSpec": true, "Is1PConnector": false }Importante
Requisitos de campo críticos:
-
BasePath: actualice a la ruta de acceso local real al repositorio de Azure-Sentinel. -
Metadata: debe hacer referenciaSolutionMetadata.json(creado en el paso 6B) -
Version: control de versiones semántico, por ejemplo,3.0.0 -
TemplateSpec: Siempretruepara soluciones de Content Hub -
Is1Pconnector: se establece enfalsepara conectores asociados o personalizados
-
Creación de SolutionMetadata.json en la raíz de la solución
En la carpeta ContosoSecurityAlerts, cree SolutionMetadata.json en el directorio raíz de la solución (el mismo nivel que la carpeta Datos):
{ "publisherId": "contoso", "offerId": "contoso-security-alerts", "firstPublishDate": "2025-01-01", "lastPublishDate": "2025-01-01", "providers": [ "Contoso" ], "categories": { "domains": [ "Security - Threat Protection", "Security - Cloud Security" ] }, "support": { "name": "Contoso Corporation", "tier": "Partner", "link": "https://www.contoso.com/support" } }Necesita el archivo SolutionMetadata.json para el empaquetado de Content Hub:
- La herramienta de empaquetado espera este archivo en la raíz de la solución
- Contiene metadatos de Marketplace para la distribución de Content Hub
Creación de ReleaseNotes.md en la raíz de la solución
Versión Fecha de modificación (DD-MM-AAAA) Historial de cambios 3.0.0 DD-MM-AAAA Solución de ejemplo
Lista de comprobación de validación
Antes de continuar con el paso siguiente, compruebe lo siguiente:
- El nombre de la carpeta no tiene espacios, por ejemplo
ContosoSecurityAlerts -
Namecampo en Solution_ContosoSecurityAlerts.json coincide exactamente con el nombre de carpeta -
SolutionMetadata.jsonexiste en la raíz de la solución (no en la carpeta Datos) -
BasePathapunta a la ruta de acceso del repositorio de Azure-Sentinel local real -
Metadatafield hace referencia a "SolutionMetadata.json" -
publisherIdyofferIdla coincidencia entre ambos archivos
Comprobación de la estructura de la solución
Confirme que la estructura de carpetas coincide con el diseño necesario con todos los archivos en su lugar:
Azure-Sentinel/ └── Solutions/ └── ContosoSecurityAlerts/ Folder name (no spaces) ├── Data/ │ └── Solution_ContosoSecurityAlerts.json From Step 7A ├── SolutionMetadata.json From Step 7B (at root) ├── ReleaseNotes.md From Step 7C └── Data Connectors/ └── ContosoSecurityAlerts_ccf/ ├── table.json From Step 3 ├── DCR.json From Step 4 ├── connectorDefinition.json From Step 5 └── dataConnector.json From Step 6Empaquetar la solución
Use la herramienta de empaquetado de createSolutionV3.ps1 para generar la plantilla de implementación de ARM.
# Navigate to the packaging tools directory (from Azure-Sentinel repository root) cd Tools/Create-Azure-Sentinel-Solution/V3 # Run the packaging tool # When prompted for "Enter solution data folder path:", provide: # <REPO_ROOT>Solutions/ContosoSecurityAlerts/Data (Note! This path is absolute) .\createSolutionV3.ps1El script automáticamente:
- Valida la estructura de datos o carpetas
- Procesa artefactos del conector
Salida esperada:
El script de empaquetado muestra un error en la validación de arm-ttk (Azure Resource Manager Template Toolkit). Este error es esperado y normal para los conectores de inserción de CCF:
Failed arm-ttk (Test-AzTemplate): Package Failed arm-ttk (Test-AzTemplate) on solutions: Package ************Validating if Package Json files are valid or not*************** File Solutions\ContosoSecurityAlerts\Package\createUiDefinition.json is a valid Json file! File Solutions\ContosoSecurityAlerts\Package\mainTemplate.json is a valid Json file! File Solutions\ContosoSecurityAlerts\Package\testParameters.json is a valid Json file!El empaquetado se realizó correctamente si ve los tres mensajes de validación JSON que confirman archivos válidos. Puede omitir el
arm-ttkerror de los conectores de inserción de CCF.Para obtener más información, consulte la documentación de Azure-Sentinel Solutions Tools.
Implementación del paquete de solución
Implemente la plantilla de ARM generada (package/mainTemplate.json) en la suscripción de Azure.
- En el Azure Portal, busque Implementar una plantilla personalizada.
- Seleccione Compilar su propia plantilla en el editor.
- Seleccione Cargar archivo y seleccione
Package/mainTemplate.jsonen la carpeta de salida. - Seleccione Guardar.
- Rellene los parámetros de implementación:
- Suscripción: Su suscripción de Azure
- Grupo de recursos: El grupo de recursos que contiene el área de trabajo de Sentinel
- Región: Misma región que el área de trabajo de Sentinel
- Área de trabajo: Nombre del área de trabajo de Log Analytics
- Seleccione Revisar y crear y, a continuación, Crear.
Esta implementación hace que el conector esté disponible en la galería de conectores de datos de Microsoft Sentinel.
Para obtener pasos detallados, consulte [Inicio rápido: Creación e implementación de plantillas de ARM mediante el Azure Portal](/azure/azure-resource-manager/templates/ quickstart-create-templates-use-the-portal).
Habilitación del conector de datos
Después de implementar el paquete de solución, habilite el conector para aprovisionar recursos y generar credenciales.
- En el Azure Portal, vaya al área de trabajo de Microsoft Sentinel.
- Vaya aConectores de datos deconfiguración>
- Busque y seleccione Alertas de seguridad de Contoso (inserción)
- Seleccione Abrir página del conector
- Seleccione el botón Deploy Contoso Security Alerts connector (Implementar el conector de alertas de seguridad de Contoso)
- Espere a que finalice la implementación (crea una tabla personalizada, DCR, DCE Entra aplicación con credenciales)
- Copie los detalles de conexión que aparecen:
- Identificación del inquilino
- Identificador de aplicación (cliente)
- Secreto de cliente
- URI del punto de conexión de recopilación de datos
- Identificador inmutable de la regla de recopilación de datos
- nombre de Stream:
Custom-ContosoSecurityAlerts
Configuración de la aplicación
Actualice el código de la aplicación con las credenciales y los detalles del recurso del paso 10. El código usa el flujo de credenciales de cliente de OAuth 2.0 para autenticarse con Azure Monitor.
Precaución
Proteger las credenciales: nunca codifique las credenciales (id. de inquilino, id. de aplicación, secreto de cliente) directamente en el código de la aplicación o confírmelas en el control de código fuente. Use soluciones de almacenamiento de credenciales seguras como:
- Azure Key Vault para aplicaciones de producción
- Variables de entorno o archivos de configuración (excluidos del control de código fuente)
- Identidades administradas cuando corresponda
- Herramientas de administración de secretos que cifran las credenciales en reposo
Código de aplicación de ejemplo de Python:
En el ejemplo siguiente se usan valores de marcador de posición como <Your-Tenant-ID>. Reemplace estos valores por referencias seguras a sus credenciales reales.
import requests import json from datetime import datetime, timezone # Connection details from Step 11 tenant_id = "<Your-Tenant-ID>" app_id = "<Your-Application-ID>" app_secret = "<Your-Client-Secret>" dce_uri = "<Your-DCE-URI>" dcr_immutable_id = "<Your-DCR-Immutable-ID>" stream_name = "Custom-ContosoSecurityAlerts" **Get OAuth token** token_url = f"https://login.microsoftonline.com/{tenant_id}/oauth2/v2.0/token" token_data = { "client_id": app_id, "scope": "https://monitor.azure.com//.default", "client_secret": app_secret, "grant_type": "client_credentials" } token_response = requests.post(token_url, data=token_data) access_token = token_response.json()["access_token"] # Create event matching your table schema event = [{ "TimeGenerated": datetime.now(timezone.utc).isoformat(), "EventSeverity": "Medium", "EventType": "LoginAlert", "UserName": "alice@contoso.com", "SourceIP": "192.168.1.100", "DeviceId": "device-12345", "AlertMessage": "Multiple failed login attempts detected" }] # Send to Sentinel headers = { "Authorization": f"Bearer {access_token}", "Content-Type": "application/json" } upload_url = f"{dce_uri}/dataCollectionRules/{dcr_immutable_id}/streams/{stream_name}?api-version=2023-01-01" response = requests.post(upload_url, headers=headers, json=event) print(f"Status: {response.status_code}") print("Security alert sent to Sentinel!")Consulta de los datos
Después de enviar alertas, realice una consulta en Sentinel. Espere entre 5 y 10 minutos para la primera ingesta.
// View all recent alerts ContosoSecurityAlerts_CL | where TimeGenerated > ago(1h) | order by TimeGenerated desc // High severity alerts ContosoSecurityAlerts_CL | where EventSeverity == "High" | project TimeGenerated, EventType, UserName, SourceIP, AlertMessage // Alert summary by severity ContosoSecurityAlerts_CL | where TimeGenerated > ago(7d) | summarize Count=count() by EventSeverity
Pasos siguientes
Ahora que comprende los conectores de inserción de CCF, siga estos pasos:
- Diseño del esquema de datos : identifique los eventos que desea enviar y sus campos.
- Creación de artefactos de conector: compile los cuatro archivos JSON (tabla, DCR, definición del conector, conector de datos).
- Organizar la estructura de la solución : configure las carpetas o los conectores de datos y de datos con un nombre adecuado.
-
Empaquetar la solución : se usa
createSolutionV3.ps1para generar plantillas de implementación. - Implementación y prueba: implemente en el área de trabajo de Sentinel y valide el flujo de datos.
- Integración con la aplicación : agregue código para enviar eventos en tiempo real.
- Crear alertas y libros : use los datos para la supervisión de seguridad.
Recursos adicionales
Documentación de CCF
- Creación de un conector sin código (extracción CCF): conectores basados en sondeo.
- Referencia de la API de definiciones del conector de datos : guía de configuración de la interfaz de usuario.
- Referencia de reglas de conexión del conector de datos : reglas de conexión para conectores de sondeo.
Azure Monitor y recopilación de datos
- Azure Supervisión de la API de ingesta de registros: CORE API para enviar datos.
- Reglas de recopilación de datos en Azure Monitor: descripción de los DCR.
- Estructura de una regla de recopilación de datos : detalles de la estructura de DCR.
- Puntos de conexión de recopilación de datos en Azure Monitor: configuración de DCE.
- Tutorial: Envío de datos a Azure Supervisión de registros con la API de ingesta de registros: tutorial paso a paso.
- Creación de una tabla personalizada : guía de creación de tablas personalizadas.
Autenticación y seguridad
- Flujo de credenciales de cliente de OAuth 2.0 : funcionamiento de la autenticación de aplicación a servicio.
- Plataforma de identidad de Microsoft tokens de acceso: descripción de los tokens de OAuth.
- Registro de una aplicación en Microsoft Entra ID: cómo registrar una aplicación en Microsoft Entra ID.
- Procedimientos recomendados para Azure registro de aplicaciones de AD: Entra seguridad de aplicaciones.
- Asignar roles Azure mediante plantillas de Azure Resource Manager (ARM): asignar roles mediante plantillas.
- Recomendaciones de seguridad de plantillas de ARM : protección de plantillas de implementación.
- Azure Supervisión de límites de servicio: límites y cuotas de velocidad.
Microsoft Sentinel
- Acerca de las soluciones de Microsoft Sentinel: empaquetado de conectores como soluciones.
- Supervisión del estado de los conectores de datos : supervisión del estado.
- Referencia de plantilla de ARM para conectores de datos : referencia de API completa.
Obtener ayuda
- En el caso de los asociados de ISV que crean integraciones, póngase en contacto con: azuresentinelpartner@microsoft.com
- Para preguntas técnicas, use Microsoft Q&A con la etiqueta "azure-sentinel".