Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Ce guide vous aide à comprendre, créer et déployer des connecteurs sans code push pour Microsoft Sentinel en utilisant le Codeless Connector Framework (CCF) Push (préversion).
Qu’est-ce que le push CCF ?
Les connecteurs Push CCF permettent à vos applications d’envoyer des événements de sécurité directement à Microsoft Sentinel en temps réel. Contrairement aux connecteurs traditionnels basés sur l’interrogation qui extraient régulièrement des données à partir d’API, les connecteurs push vous permettent d’envoyer des données à Sentinel en tant qu’événements se produisent dans votre système.
CCF Push offre plusieurs avantages clés :
- Flux de données contrôlé par l’application : Votre application contrôle quand et comment envoyer des données, en activant des stratégies de traitement par lots intelligentes et l’utilisation optimisée du réseau.
- Ingestion en temps réel : Envoyez des données immédiatement à mesure que des événements se produisent, sans attendre les intervalles d’interrogation.
- Architecture simplifiée : Il n’est pas nécessaire de conserver les points de terminaison d’API pour que Sentinel interroge.
- Approvisionnement basé sur des modèles : Le déploiement crée des modèles ARM pour les contrôleurs de domaine, les tables personnalisées, l’inscription d’application Entra et les secrets clients. Vous recevez les détails de connexion à configurer dans votre application d’envoi.
- Authentification sécurisée : Utilise les applications Microsoft Entra avec OAuth 2.0 pour la soumission de données sécurisées.
Logiciels requis
- Avant de commencer, vous devez avoir accès au dépôt GitHub Azure-Sentinel pour les outils d’empaquetage.
- Autorisations Microsoft Entra :
- Autorisation de créer une inscription d’application dans Microsoft Entra ID. Nécessite généralement le rôle Développeur d’applications dans Entra ID ou un rôle supérieur.
- Autorisation de créer une application avec des secrets. Si vous n’accordez pas cette autorisation, le connecteur échoue en raison de raisons de sécurité.
- L’éditeur doit avoir le rôle approprié pour récupérer des jetons à partir de l’application Microsoft Entra. Ces jetons sont requis pour l’authentification des demandes au point de terminaison de collecte de données (DCE), qui est le point de terminaison où le connecteur envoie finalement ses données. Si le fournisseur ne peut pas récupérer de jetons, les données ne peuvent pas être envoyées à la DCE.
- Autorisations Microsoft Azure :
- Autorisation d’attribuer le rôle Éditeur de métriques de surveillance sur la règle de collecte de données (DCR). Nécessite généralement le rôle Propriétaire Azure RBAC ou le rôle Administrateur de l’accès utilisateur.
Comment fonctionne le push CCF
Modèle push et modèle pull
Comprendre la différence entre les modèles d’ingestion de données push et pull vous aide à choisir le type de connecteur approprié pour votre scénario.
Connecteurs CCF en mode pull – basés sur l’interrogation :
Dans le modèle d’extraction, Microsoft Sentinel interroge régulièrement votre API pour récupérer des données :
- Microsoft Sentinel lance des connexions à votre API de source de données selon une planification configurée.
- Les données arrivent à intervalles d’interrogation réguliers, comme toutes les cinq minutes.
- Vous devez conserver un point de terminaison d’API accessible publiquement.
- L’infrastructure d’interrogation de Sentinel gère le processus de collecte de données.
Connecteurs push CCF - Pilotés par les événements :
Dans le modèle Push, votre application envoie des données directement à Microsoft Sentinel :
- Votre application lance la soumission de données lorsque des événements se produisent.
- Les données arrivent en quasi temps réel à mesure que les événements sont générés.
- Vous n’avez pas besoin de gérer un point de terminaison d’API.
- Votre application contrôle l’optimisation du traitement par lots, du minutage et du flux de données.
Flux de données Push
Le flux de données push CCF se compose de cinq étapes principales :
Vous déployez le connecteur dans Microsoft Sentinel.
Azure crée automatiquement les ressources suivantes :
- Application Microsoft Entra avec des informations d’identification
- Règle de collecte de données (DCR) : définit comment traiter vos données
- Point de terminaison de collecte de données (DCE) : URL où vous envoyez des données
- Table de journaux personnalisée - où vos données sont stockées
- Attributions de rôles - autorisations pour l’application Entra
Vous recevez les détails de connexion suivants :
- ID du locataire
- ID d’application (client)
- Clé secrète client
- URI DCE (URL de point de terminaison)
- ID immuable DCR
- Nom du flux
Votre application envoie les données suivantes :
- Obtient un jeton OAuth 2.0 à l’aide des informations d’identification de l’application Entra générées par CCF. Pour plus d’informations, consultez le flux d’informations d’identification du client OAuth 2.0
- Met en forme des événements en tant que JSON correspondant à votre schéma de table
- Envoie des données en POST vers le point de terminaison DCE
Azure traite et stocke les données :
- DCRs transforment les données (transformations KQL facultatives)
- Les données sont écrites dans la table personnalisée dans Log Analytics
- Les données sont disponibles pour les requêtes, l’analytique et les alertes dans Sentinel
Artefacts push CCF
Une solution de connecteur Push CCF se compose de quatre composants principaux :
- Définition de table personnalisée
- Règle de collecte de données (DCR)
- Définition du connecteur (interface utilisateur)
- Configuration du connecteur Push
Définition de table personnalisée
Qu’est-ce que c’est : Schéma qui définit la structure de vos données dans Log Analytics.
Exigences clés :
- Le nom de la table doit se terminer par
_CL(suffixe de journal personnalisé). - Doit inclure une
TimeGeneratedcolonne (type date-heure). - Types de colonnes : chaîne, int, long, real, bool, datetime, dynamic, guid.
- Utilisez la version
2025-07-01de l’API ou une version ultérieure. - Pour plus d’informations, consultez Créer une table personnalisée dans Azure Monitor Logs.
Exemple :
{
"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"
}
]
}
}
}
Règle de collecte de données (DCR)
Qu’est-ce que c’est : Définit la façon dont Azure Monitor ingère et traite vos données. Pour plus d’informations, consultez Règles de collecte de données dans Azure Monitor.
Résultat :
- Spécifie le nom du flux d’entrée (que votre application utilise lors de l’envoi de données)
- Définit des transformations KQL facultatives pour mettre en forme et enrichir des données
- Route les données vers la table de destination
- Liens vers le point de terminaison de collecte de données (DCE)
Composants clés :
-
streamDeclarations: définit la structure des données entrantes (doit correspondre à ce que votre application envoie) -
destinations: Emplacement des données (votre espace de travail Log Analytics) -
dataFlows: pipeline de transformation du flux d’entrée vers la table de sortie -
dataCollectionEndpointId: liens vers la DCE pour l’ingestion de données
Exemple :
{
"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'))]"
}
}
Important
- Le nom du flux doit commencer par le préfixe
Custom-. - La fonctionnalité
transformKqlpeut être configurée simplement"source"pour un passage direct ou inclure une logique KQL pour transformer les données. -
outputStreamdoit correspondre à votre nom de table avecCustom-le préfixe et_CLle suffixe.
Définition du connecteur (interface utilisateur)
La définition du connecteur contrôle l’affichage du connecteur dans la galerie de connecteurs de données Microsoft Sentinel. Pour plus d’informations, consultez la référence de l’API Définitions de connecteur de données.
La définition du connecteur inclut les éléments suivants :
- Titre, description et personnalisation du connecteur
- Conditions préalables et autorisations requises, telles que l’accès à l’espace de travail et les autorisations Entra
- Étapes d’instruction pour le déploiement
- Contrôles d’interface utilisateur pour afficher les détails de connexion aux utilisateurs
Éléments clés de l’interface utilisateur :
-
DeployPushConnectorButton: déclenche le déploiement automatique des ressources -
CopyableLabel: affiche les détails de connexion après le déploiement (utilise unfillWithparamètre) -
Markdown: fournit des instructions et un contexte mis en forme -
IsConnectedQuery: valide la connectivité du connecteur en fonction des données récentes
Exemple de structure (abrégée pour plus de clarté) :
{
"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"
}
}
]
}
]
}
}
}
Important
- L’élément
iddansconnectorUiConfigdoit être unique et correspondre aux références dans la configuration du connecteur de données. - Utiliser
IsConnectedQuerypour les connecteurs de production (valide les données récentes) ouhasDataConnectorspour une validation plus simple. - Les paramètres dans
fillWithsontCopyableLabelrenseignés automatiquement après le déploiement. - Les valeurs fixes, telles que le nom du flux, utilisent le
valueparamètre au lieu defillWith.
Configuration du connecteur Push
La configuration du connecteur Push est l’instance du connecteur de données qui lie la définition du connecteur aux ressources déployées.
Configuration du connecteur Push
- Lie la définition du connecteur (interface utilisateur) à l’application DCR et Entra déployée
- Stocke les détails de l’authentification (ID d’application, ID du principal de service)
- Enregistre la configuration DCR (point de terminaison, ID immuable, nom de flux)
- Permet à l’interface utilisateur de récupérer et d’afficher les détails de connexion aux utilisateurs
Propriétés de clé :
-
connectorDefinitionName: doit correspondre à laiddéfinition de votre connecteur -
dcrConfig: contient le point de terminaison DCR, l’ID de règle et le nom du flux -
auth: contient l’ID de l'application Entra et l’ID du principal du service -
kind: doit être « Push » pour les connecteurs de type « Push »
Exemple :
{
"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'))]"
}
}
Important
- Le
connectorDefinitionNamedoit correspondre exactement à la définition duidconnecteur. - L'élément
streamNamedoit correspondre au flux déclaré dans votre DCR. - Cette ressource est créée automatiquement pendant le déploiement lorsque les utilisateurs sélectionnent le bouton DeployPushConnector .
Création de votre premier connecteur Push
Dans cet exemple, vous créez un connecteur Push simple qui envoie des alertes de sécurité de votre application à Sentinel.
Objectif: Envoyer des alertes de sécurité de votre application à Sentinel en temps réel
Votre application envoie la structure d’événements :
{
"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"
}
Guide pas à pas pour créer le connecteur Push
Cloner le référentiel Azure-Sentinel
Fork clone ensuite le référentiel officiel Azure-Sentinel sur votre ordinateur local. Ce référentiel contient les outils d’empaquetage et fournit la structure de solution standard.
Cloner le référentiel
git clone https://github.com/<YOUR_FORK>/Azure-Sentinel.gitAccédez au répertoire Solutions
cd Azure-Sentinel/Solutions
La structure du référentiel comprend les éléments suivants :
- Outils/Créer-Azure-Sentinel-Solution/V3/
- Contient le script d’empaquetage de createSolutionV3.ps1
- Solutions/ Où vous allez créer votre solution de connecteur
Créez votre structure de dossiers de solution : créez un répertoire de solution dans le dossier Solutions/ suivant la convention d’affectation de noms standard. Créer des répertoires de solution (à partir d’Azure-Sentinel/Solutions/)
mkdir ContosoSecurityAlerts cd ContosoSecurityAlerts mkdir Data mkdir "Data Connectors" mkdir "Data Connectors/ContosoSecurityAlerts_ccf"Votre structure de dossiers ressemble à ce qui suit :
Azure-Sentinel/
└>> Solutions/
└>> ContosoSecurityAlerts/
├── Données/
└── Connecteurs de données/
└>> ContosoSecurityAlerts_ccf/Définissez votre table
Dans le dossier ContosoSecurityAlerts_ccf, créez un fichier nommé table.json avec votre définition de table personnalisée :
{ "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" } ] } } }Créer le DCR
Dans le dossier ContosoSecurityAlerts_ccf, créez un fichier nommé DCR.json qui définit le flux d’entrée et achemine les données vers votre table :
{ "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'))]" } }Créer la définition du connecteur
Dans le dossier ContosoSecurityAlerts_ccf créez un fichier nommé connectorDefinition.json qui définit la façon dont les utilisateurs interagissent avec le connecteur dans 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" } } ] } ] } } }Créer la configuration du connecteur de données
Dans le dossier ContosoSecurityAlerts_ccf, créez un fichier nommé dataConnector.json qui lie la définition du connecteur aux ressources déployées :
{ "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": [ "$" ] } } }Créer des fichiers de métadonnées de solution
Solution_ContosoSecurityAlerts.json Dans le dossier Données, créez
Solution_ContosoSecurityAlerts.jsonavec les détails de votre solution :{ "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 }Important
Exigences de champ critiques :
-
BasePath: Mettez à jour votre chemin d'accès local actuel vers le référentiel Azure-Sentinel -
Metadata: doit référencerSolutionMetadata.json(créée à l’étape 6B) -
Version: contrôle de version sémantique, par exemple,3.0.0 -
TemplateSpec: Toujourstruepour les solutions Content Hub -
Is1Pconnector: défini surfalsepour les connecteurs partenaires/personnalisés
-
Créer SolutionMetadata.json à la racine de la solution
Dans le dossier ContosoSecurityAlerts, créez SolutionMetadata.json au répertoire racine de la solution (même niveau que le dossier Données) :
{ "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" } }Vous avez besoin du fichier SolutionMetadata.json pour l’empaquetage du hub de contenu :
- L’outil d’empaquetage attend ce fichier à la racine de la solution
- Il contient les métadonnées du marketplace pour la distribution via le Content Hub.
Créer ReleaseNotes.md à la racine de la solution
Version Date de modification (DD-MM-YYYY) Historique des modifications 3.0.0 DD-MM-YYYY Exemple de solution
Liste de contrôle de validation
Avant de passer à l’étape suivante, vérifiez :
- Le nom du dossier n’a pas d’espaces, par exemple
ContosoSecurityAlerts -
Namechamp dans Solution_ContosoSecurityAlerts.json correspond exactement au nom du dossier -
SolutionMetadata.jsonexiste à la racine de la solution (pas dans le dossier Données) -
BasePathpointe vers votre chemin d’accès au référentiel Azure-Sentinel local réel -
Metadataréférence de champ « SolutionMetadata.json » - Les valeurs
publisherIdetofferIdcorrespondent dans les deux fichiers
Vérifier la structure de votre solution
Vérifiez que votre structure de dossiers correspond à la disposition requise avec tous les fichiers en place :
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 6Empaqueter votre solution
Utilisez l’outil d’empaquetage createSolutionV3.ps1 pour générer le modèle de déploiement 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.ps1Le script fonctionne automatiquement :
- Valide votre structure de données/dossiers
- Traite les artefacts du connecteur
Sortie attendue :
Le script d’empaquetage affiche une validation arm-ttk (Azure Resource Manager Template Toolkit) ayant échoué. Cet échec est attendu et normal pour les connecteurs Push 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!L’empaquetage a réussi si vous voyez les trois messages de validation JSON confirmant les fichiers valides. Vous pouvez ignorer l’échec
arm-ttkdes connecteurs Push CCF.Pour plus d’informations, consultez la documentation « Azure-Sentinel Solutions Tools ».
Déployer le package de solution
Déployez le modèle ARM généré (Package/mainTemplate.json) sur votre abonnement Azure.
- Dans le portail Azure, recherchez Déployer un modèle personnalisé
- Sélectionnez Créer votre propre modèle dans l’éditeur
- Sélectionnez Charger le fichier et sélectionnez
Package/mainTemplate.jsondans votre dossier de sortie. - Sélectionnez Enregistrer.
- Renseignez les paramètres de déploiement :
- Abonnement: Votre abonnement Azure
- Groupe de ressources : Groupe de ressources contenant votre espace de travail Sentinel
- Région: Même région que votre espace de travail Sentinel
- Espace: Nom de votre espace de travail Log Analytics
- Sélectionnez Vérifier + créer, puis Créer
Ce déploiement rend le connecteur disponible dans votre galerie de connecteurs de données Microsoft Sentinel.
Pour obtenir des instructions détaillées, consultez [Démarrage rapide : Créer et déployer des modèles ARM à l’aide du portail Azure](/azure/azure-resource-manager/templates/ quickstart-create-templates-use-the-portal).
Activer le connecteur de données
Après avoir déployé le package de solution, activez le connecteur pour provisionner des ressources et générer des informations d’identification.
- Dans le portail Azure, accédez à votre espace de travail Microsoft Sentinel
- Accéder à Configuration>Connecteurs de données
- Rechercher et sélectionner Alertes de sécurité Contoso (Push)
- Sélectionnez Ouvrir la page du connecteur
- Sélectionnez le bouton Déployer le connecteur Alertes de sécurité Contoso
- Attendez que le déploiement se termine (crée une table personnalisée, DCR, DCE, Entra application avec des informations d’identification)
- Copiez les détails de connexion qui s’affichent :
- ID du locataire
- ID d’application (client)
- Clé secrète client
- URI du point de terminaison de collecte de données
- Règle de collecte de données avec ID immuable
- Nom du flux :
Custom-ContosoSecurityAlerts
Configurer votre application
Mettez à jour le code de votre application avec les informations d’identification et les détails des ressources de l’étape 10. Le code utilise le flux d’informations d’identification du client OAuth 2.0 pour s’authentifier auprès d’Azure Monitor.
Caution
Protégez vos informations d’identification : ne jamais coder en dur les informations d’identification (ID de locataire, ID d’application, clé secrète client) directement dans votre code d’application ou les valider dans le contrôle de code source. Utilisez des solutions de stockage d’informations d’identification sécurisées telles que :
- Azure Key Vault pour les applications de production
- Variables d’environnement ou fichiers de configuration (exclus du contrôle de code source)
- Identités managées le cas échéant
- Outils de gestion des secrets qui chiffrent les informations d’identification au repos
Exemple de code d’application Python :
L’exemple suivant utilise des valeurs d’espace réservé telles que <Your-Tenant-ID>. Remplacez ces valeurs par des références sécurisées à vos informations d’identification réelles.
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!")Interroger vos données
Après l’envoi d’alertes, effectuez une requête dans Sentinel. Laissez 5 à 10 minutes pour la première ingestion.
// 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
Contenu connexe
Maintenant que vous comprenez les connecteurs Push CCF, procédez comme suit :
- Concevez votre schéma de données : identifiez les événements que vous souhaitez envoyer et leurs champs.
- Créer des artefacts de connecteur : générez les quatre fichiers JSON (table, DCR, définition du connecteur, connecteur de données).
- Organiser la structure de la solution : configurez les dossiers Data/ et Data Connectors/ en respectant les conventions de nommage appropriées.
-
Empaqueter votre solution : permet
createSolutionV3.ps1de générer des modèles de déploiement. - Déployer et tester - Déployer sur votre espace de travail Sentinel et valider le flux de données.
- Intégrer à votre application : ajoutez du code pour envoyer des événements en temps réel.
- Créer des alertes et des classeurs : utilisez vos données pour la surveillance de la sécurité.
Ressources additionnelles
Documentation CCF
- Créer un connecteur sans code (pull CCF) - Connecteurs basés sur le sondage.
- Référence de l’API des définitions de connecteurs de données - Guide de configuration de l’interface utilisateur.
- Référence des règles de connexion des connecteurs de données - Règles de connexion pour les connecteurs de sondage.
Azure Monitor et collecte de données
- API d’ingestion des journaux Azure Monitor : API principale pour l’envoi de données.
- Règles de collecte de données dans Azure Monitor - Comprendre les règles de collecte de données.
- Structure d’une règle de collecte de données : détails de la structure DCR.
- Points de terminaison de collecte de données dans Azure Monitor - Configuration DCE.
- Tutoriel : envoyer des données vers Azure Monitor Logs à l’aide de l’API d’ingestion des journaux - Tutoriel pas à pas.
- Créer une table personnalisée - Guide de création de table personnalisée.
Authentification et sécurité
- Flux d’informations d’identification du client OAuth 2.0 : fonctionnement de l’authentification d’application à service.
- Jetons d’accès à la plateforme d’identités Microsoft - Présentation des jetons OAuth.
- Inscrire une application dans Microsoft Entra ID - Comment inscrire une application dans Microsoft Entra ID.
- Bonnes pratiques pour l’inscription d’applications Azure AD - Entra app security.
- Attribuer des rôles Azure à l’aide de modèles Azure Resource Manager (ARM) : attribuez des rôles à l’aide de modèles.
- Recommandations de sécurité des modèles ARM - Sécurisation des modèles de déploiement.
- Limites du service Azure Monitor : limites et quotas de débit.
Microsoft Sentinel
- À propos des solutions Microsoft Sentinel - Empaquetage de connecteurs en tant que solutions.
- Surveillez l’intégrité de vos connecteurs de données - Surveillance de l’intégrité.
- Référence de modèle ARM pour les connecteurs de données - Référence d’API complète.
Obtenir de l’aide
- Pour les partenaires ISV qui développent des intégrations, contactez : azuresentinelpartner@microsoft.com
- Pour des questions techniques, utilisez Microsoft Q&A avec la balise « azure-sentinel ».