[Déconseillé] Créer un connecteur sans code hérité pour Microsoft Sentinel
Important
La collecte de journaux dans un grand nombre d’appliances et d’appareils est désormais prise en charge par le CEF (Common Event Format) via AMA, Syslog via AMA ou les journaux personnalisés via le connecteur de données AMA dans Microsoft Sentinel. Pour plus d’informations, consultez Rechercher votre connecteur de données Microsoft Sentinel.
Important
Il existe une version plus récente de la plateforme de connecteurs sans code (CCP). Pour plus d’informations concernant le nouveau connecteur sans code , consultez Créer un connecteur sans code (préversion).
Référencez ce document si vous devez gérer ou mettre à jour un connecteur de données en fonction de cette version héritée antérieure du CCP.
Le CCP fournit aux partenaires, aux utilisateurs expérimentés et aux développeurs la possibilité de créer des connecteurs personnalisés, de les connecter et d’ingérer des données sur Microsoft Sentinel. Les connecteurs créés par le biais de la CCP peuvent être déployés via une API, un modèle ARM ou une solution dans le hub de contenu de Microsoft Sentinel.
Les connecteurs créés à l’aide de la CCP sont entièrement SaaS, sans aucune exigence en matière d’installation de service, et comprennent également un monitoring de l’intégrité et une assistance complète fournis par Microsoft Sentinel.
Créez votre connecteur de données en définissant des configurations JSON, avec des paramètres qui déterminent l’apparence de la page du connecteur de données dans Microsoft Sentinel ainsi que des paramètres d’interrogation qui définissent le fonctionnement de la connexion.
Important
Cette version de la plateforme de connecteurs sans code (CCP) est en PRÉVERSION, mais elle est également considérée comme héritée. Les Conditions d’utilisation supplémentaires des préversions Microsoft Azure incluent des conditions légales supplémentaires qui s’appliquent aux fonctionnalités Azure en version bêta, en préversion ou pas encore disponibles dans la version en disponibilité générale.
Pour créer votre connecteur CCP et vous connecter à votre source de données à partir de Microsoft Sentinel, procédez comme suit :
- Configurer l’interface utilisateur du connecteur
- Configurer les paramètres d’interrogation du connecteur
- Déployer votre connecteur dans votre espace de travail Microsoft Sentinel
- Connecter Microsoft Sentinel à votre source de données et commencer à ingérer des données
Cet article décrit la syntaxe utilisée dans les configurations JSON de la plateforme CCP et les procédures de déploiement de votre connecteur via une API, un modèle ARM ou une solution Microsoft Sentinel.
Prérequis
Avant de générer un connecteur, nous vous recommandons de comprendre le comportement de votre source de données et la manière exacte dont Microsoft Sentinel devra se connecter.
Par exemple, vous devez connaître les différents types d’authentification, de pagination et de points de terminaison d’API nécessaires à l’établissement des connexions.
Créer un fichier config JSON de connecteur
Votre connecteur CCP personnalisé comporte deux sections JSON principales nécessaires au déploiement. Complétez ces zones pour définir la façon dont votre connecteur s’affiche sur le portail Azure et comment il connecte Microsoft Sentinel à votre source de données.
connectorUiConfig
. Définit les éléments visuels et le texte affiché sur la page du connecteur de données dans Microsoft Sentinel. Pour plus d’informations, consultez Configurer l’interface utilisateur de votre connecteur.pollingConfig
. Définit la façon dont Microsoft Sentinel recueille les données de votre source de données. Pour plus d’informations, consultez Configurer les paramètres d’interrogation de votre connecteur.
Ensuite, si vous déployez votre connecteur sans code via ARM, vous devrez inclure ces sections dans le modèle ARM pour les connecteurs de données.
Examinez les autres exemples de connecteurs de données CCP ou téléchargez l’exemple de modèle DataConnector_API_CCP_template.json (préversion).
Configurer l’interface utilisateur de votre connecteur
Cette section décrit les options de configuration disponibles pour personnaliser l’interface utilisateur de la page du connecteur de données.
L’illustration suivante montre la page d’un exemple de connecteur de données, où sont mis en évidence des numéros qui correspondent aux zones importantes de l’interface utilisateur :
- Titre. Titre affiché pour votre connecteur de données.
- Logo. Icône affichée pour votre connecteur de données. Sa personnalisation n’est possible que si le déploiement s’effectue dans le cadre d’une solution.
- Status. Indique si votre connecteur de données est connecté ou pas à Microsoft Sentinel.
- Graphiques de données. Affiche les requêtes pertinentes et la quantité de données ingérées au cours des deux dernières semaines.
- Onglet Instructions. Comporte une section Prérequis, avec une liste de validations minimales à opérer par l’utilisateur avant qu’il puisse activer le connecteur, et une section Instructions pour guider l’utilisateur dans l’activation du connecteur. Cette section peut inclure du texte, des boutons, des formulaires, des tableaux et d’autres widgets courants pour simplifier le processus.
- Onglet Étapes suivantes. Contient des informations utiles pour comprendre comment rechercher des données dans les journaux des événements, tels que des exemples de requêtes.
Voici les sections connectorUiConfig
et la syntaxe nécessaire pour configurer l’interface utilisateur :
Nom de la propriété | Type | Description |
---|---|---|
availability | { "status": 1, "isPreview": Booléen} |
status : 1 Indique que le connecteur est en disponibilité générale pour les clients. isPreview Indique s’il faut inclure le suffixe (Preview) au nom du connecteur. |
connectivityCriteria | { "type": SentinelKindsV2, "value": APIPolling } |
Objet qui définit comment vérifier si le connecteur est correctement défini. Utilisez les valeurs indiquées ici. |
dataTypes | dataTypes[] | Liste de tous les types de données pour votre connecteur et requête pour récupérer l’heure du dernier événement pour chaque type de données. |
descriptionMarkdown | String | Description du connecteur avec la possibilité d’ajouter le langage Markdown pour l’améliorer. |
graphQueries | graphQueries[] | Requêtes qui présentent l’ingestion des données au cours des deux dernières semaines dans le volet Graphiques de données. Fournissez soit une requête pour tous les types de données du connecteur de données, soit une requête différente pour chaque type de données. |
graphQueriesTableName | String | Définit le nom de la table Log Analytics à partir de laquelle les données de vos requêtes sont extraites. Le nom de la table peut être n’importe quelle chaîne, mais doit se terminer par _CL . Par exemple : TableName_CL |
instructionsSteps | instructionSteps[] | Tableau de parties de widget qui expliquent comment installer le connecteur, affiché sous l’onglet Instructions. |
métadonnées | métadonnées | Métadonnées affichées sous la description du connecteur. |
autorisations | permissions[] | Informations affichées sous la section Prérequis de l’interface utilisateur qui indiquent les autorisations nécessaires pour activer ou désactiver le connecteur. |
publisher | String | Texte figurant dans la section Fournisseur. |
sampleQueries | sampleQueries[] | Exemples de requêtes permettant au client de comprendre comment rechercher les données dans le journal des événements, à afficher dans l’onglet Étapes suivantes. |
title | String | Titre affiché dans la page du connecteur de données. |
Il est compliqué d’assembler tous ces éléments. Utilisez l’outil de validation de l’expérience utilisateur de la page du connecteur pour tester les composants que vous assemblez.
dataTypes
Valeur de tableau | Type | Description |
---|---|---|
name | String | Description explicite de lastDataReceivedQuery , avec la prise en charge d’une variable. Exemple : {{graphQueriesTableName}} |
lastDataReceivedQuery | String | Requête KQL qui retourne une seule ligne avec l’heure à laquelle les données ont été reçues pour la dernière fois, ou pas de données en l’absence de données pertinentes. Exemple : {{graphQueriesTableName}}\n | summarize Time = max(TimeGenerated)\n | where isnotempty(Time) |
graphQueries
Définit une requête qui présente l’ingestion des données au cours des deux dernières semaines dans le volet Graphiques de données.
Fournissez soit une requête pour tous les types de données du connecteur de données, soit une requête différente pour chaque type de données.
Valeur de tableau | Type | Description |
---|---|---|
metricName | String | Nom explicite de votre graphique. Exemple : Total data received |
legend | String | Chaîne qui apparaît dans la légende à droite du graphique, y compris une référence à une variable. Exemple : {{graphQueriesTableName}} |
baseQuery | String | Requête qui filtre les événements pertinents, y compris une référence à une variable. Par exemple : TableName_CL | where ProviderName == "myprovider" ou {{graphQueriesTableName}} |
instructionSteps
Cette section fournit des paramètres qui définissent l’ensemble des instructions qui s’affichent sur la page de votre connecteur de données dans Microsoft Sentinel.
Propriété de tableau | Type | Description |
---|---|---|
title | String | Facultatif. Définit un titre pour vos instructions. |
description | String | Facultatif. Définit une description explicite de vos instructions. |
innerSteps | Array | Optionnel. Définit un tableau d’étapes d’instructions internes. |
instructions | Tableau d’instructions | Obligatoire. Définit un tableau d’instructions d’un type de paramètre spécifique. |
bottomBorder | Boolean | Optionnel. Si true , ajoute une bordure inférieure à la zone des instructions sur la page du connecteur dans Microsoft Sentinel. |
isComingSoon | Boolean | Optionnel. Si true , ajoute un titre Bientôt disponible sur la page du connecteur dans Microsoft Sentinel. |
instructions
Affiche un groupe d’instructions, avec différentes options en tant que paramètres et la possibilité d’imbriquer davantage d’instructionsSteps dans des groupes.
Paramètre | Propriété de tableau | Description |
---|---|---|
APIKey | APIKey | Ajoute des espaces réservés au fichier config JSON de votre connecteur. |
CopyableLabel | CopyableLabel | Affiche un champ de texte avec un bouton de copier à l’extrémité. Lorsque le bouton est sélectionné, la valeur du champ est copiée. |
InfoMessage | InfoMessage | Définit un message d’information inlined. |
InstructionStepsGroup | InstructionStepsGroup | Affiche un groupe d’instructions, éventuellement développé ou réductible, dans une section d’instructions distincte. |
InstallAgent | InstallAgent | Affiche un lien vers d’autres parties d’Azure pour répondre à diverses exigences d’installation. |
APIKey
Vous pouvez créer un modèle de fichier config JSON, avec des paramètres d’espace réservé, afin de le réutiliser pour plusieurs connecteurs ou même pour créer un connecteur avec des données que vous n’avez pas encore.
Pour créer des paramètres d’espace réservé, définissez un tableau supplémentaire nommé userRequestPlaceHoldersInput
dans la section Instructions de votre fichier config JSON de la CCP en utilisant la syntaxe suivante :
"instructions": [
{
"parameters": {
"enable": "true",
"userRequestPlaceHoldersInput": [
{
"displayText": "Organization Name",
"requestObjectKey": "apiEndpoint",
"placeHolderName": "{{placeHolder}}"
}
]
},
"type": "APIKey"
}
]
Le paramètre userRequestPlaceHoldersInput
comprend les attributs suivants :
Name | Type | Description |
---|---|---|
DisplayText | String | Définit la valeur d’affichage de la zone de texte, qui est affichée à l’utilisateur lors de la connexion. |
RequestObjectKey | String | Définit l’ID dans la section request de pollingConfig pour remplacer la valeur de l’espace réservé par la valeur fournie par l’utilisateur. Si vous n’utilisez pas cet attribut, utilisez plutôt l’attribut PollingKeyPaths . |
PollingKeyPaths | String | Définit un tableau d’objets JsonPath qui dirige l’appel d’API vers n’importe quel endroit du modèle, afin de remplacer une valeur d’espace réservé par une valeur utilisateur. Exemple : "pollingKeyPaths":["$.request.queryParameters.test1"] Si vous n’utilisez pas cet attribut, utilisez plutôt l’attribut RequestObjectKey . |
PlaceHolderName | String | Définit le nom du paramètre d’espace réservé dans le fichier du modèle JSON. Il peut s’agir de n’importe quelle valeur unique, telle que {{placeHolder}} . |
CopyableLabel
Exemple :
Exemple de code :
{
"parameters": {
"fillWith": [
"WorkspaceId",
"PrimaryKey"
],
"label": "Here are some values you'll need to proceed.",
"value": "Workspace is {0} and PrimaryKey is {1}"
},
"type": "CopyableLabel"
}
Valeur de tableau | Type | Description |
---|---|---|
fillWith | ENUM | Optionnel. Tableau de variables d’environnement utilisé pour remplir un espace réservé. Séparez plusieurs espaces réservés par des virgules. Par exemple : {0},{1} Valeurs prises en charge : workspaceId , workspaceName , primaryKey , MicrosoftAwsAccount , subscriptionId |
label | String | Définit le texte de l’étiquette au-dessus d’une zone de texte. |
value | String | Définit la valeur à présenter dans la zone de texte, prend en charge les espaces réservés. |
rows | Lignes | Optionnel. Définit les lignes dans la zone de l’interface utilisateur. Par défaut, définissez sur 1. |
wideLabel | Boolean | Optionnel. Détermine une étiquette large pour les chaînes longues. Par défaut, définissez sur false . |
InfoMessage
Voici un exemple de message d’information inclus :
À l’inverse, l’illustration suivante montre un message d’information non inlined :
Valeur de tableau | Type | Description |
---|---|---|
text | String | Définit le texte à afficher dans le message. |
visible | Boolean | Détermine si le message s’affiche. |
inline | Boolean | Détermine le mode d’affichage du message d’information. - true : (Recommandé) Affiche le message d’information incorporé dans les instructions. - false : Ajoute un arrière-plan bleu. |
InstructionStepsGroup
Voici un exemple de groupe d’instructions pouvant être développé :
Valeur de tableau | Type | Description |
---|---|---|
title | String | Définit le titre de l’étape d’instruction. |
canCollapseAllSections | Boolean | Optionnel. Détermine si la section est un accordéon réductible ou non. |
noFxPadding | Boolean | Optionnel. Si true , réduit le remplissage en hauteur pour gagner de l’espace. |
expanded | Boolean | Optionnel. Si true , développé par défaut. |
Pour obtenir un exemple détaillé, consultez le JSON de configuration du connecteur DNS Windows.
InstallAgent
Certains types InstallAgent apparaissent sous la forme d’un bouton, d’autres sous la forme d’un lien. Voici des exemples des deux :
Valeurs de tableau | Type | Description |
---|---|---|
linkType | ENUM | Détermine le type de lien avec l’une des valeurs suivantes : InstallAgentOnWindowsVirtualMachine InstallAgentOnWindowsNonAzure InstallAgentOnLinuxVirtualMachine InstallAgentOnLinuxNonAzure OpenSyslogSettings OpenCustomLogsSettings OpenWaf OpenAzureFirewall OpenMicrosoftAzureMonitoring OpenFrontDoors OpenCdnProfile AutomaticDeploymentCEF OpenAzureInformationProtection OpenAzureActivityLog OpenIotPricingModel OpenPolicyAssignment OpenAllAssignmentsBlade OpenCreateDataCollectionRule |
policyDefinitionGuid | Chaîne | Obligatoire lorsque le linkType OpenPolicyAssignment est utilisé. Pour les connecteurs basés sur des stratégies, définit le GUID de la définition de stratégie intégrée. |
assignMode | ENUM | Optionnel. Pour les connecteurs basés sur des stratégies, définit le mode d’attribution avec l’une des valeurs suivantes : Initiative , Policy |
dataCollectionRuleType | ENUM | Optionnel. Pour les connecteurs DCR, définit le type de règle de collecte de données avec l’une des valeurs suivantes : SecurityEvent , ForwardEvent |
metadata
Cette section fournit des métadonnées dans l’interface utilisateur du connecteur de données sous la zone Description.
Valeur de collection | Type | Description |
---|---|---|
kind | String | Définit le type de modèle ARM que vous êtes en train de créer. Utilisez toujours dataConnector . |
source | String | Décrit votre source de données en utilisant la syntaxe suivante : { "kind": chaîne"name": chaîne} |
author | String | Décrit l’auteur du connecteur de données en utilisant la syntaxe suivante : { "name": chaîne} |
support | String | Décrit la prise en charge fournie pour le connecteur de données en utilisant la syntaxe suivante : { "tier": chaîne,"name": chaîne,"email": chaîne,"link": chaîne d’URL} |
autorisations
Valeur de tableau | Type | Description |
---|---|---|
customs | String | Décrit toutes les autorisations personnalisées requises pour votre connexion de données, dans la syntaxe suivante : { "name": string, "description": chaîne} Exemple : La valeur de customs s’affiche dans la section Prérequis de Microsoft Sentinel avec une icône d’information bleue. Dans l’exemple GitHub, cela correspond à la ligne Clé de jeton personnel de l’API GitHub : Vous devez accéder au jeton personnel GitHub... |
licences | ENUM | Définit les licences requises, avec l’une des valeurs suivantes : OfficeIRM , OfficeATP , Office365 , AadP1P2 , Mcas , Aatp , Mdatp , Mtp , IoT Exemple : La valeur de licenses s’affiche dans Microsoft Sentinel comme suit : Licence : Azure AD Premium P2 obligatoire. |
resourceProvider | resourceProvider | Décrit les conditions préalables pour votre ressource Azure. Exemple : La valeur de resourceProvider s’affiche dans la section Prérequis de Microsoft Sentinel comme suit : Espace de travail : L’autorisation d’accès en lecture et écriture est nécessaire. Clés : Des autorisations d’accès en lecture sur les clés partagées pour l’espace de travail sont requises. |
client | tableau de valeurs ENUM Exemple : "tenant": [ "GlobalADmin", "SecurityAdmin" ] |
Définit les autorisations requises, comme une ou plusieurs des valeurs suivantes : "GlobalAdmin" , "SecurityAdmin" , "SecurityReader" , "InformationProtection" Exemple : Affiche la valeur de tenant dans Microsoft Sentinel comme suit : Autorisations du locataire : Nécessite Global Administrator ou Security Administrator sur le locataire de l’espace de travail. |
resourceProvider
valeur de sous-tableau | Type | Description |
---|---|---|
provider | ENUM | Décrit le fournisseur de ressources, avec l’une des valeurs suivantes : - Microsoft.OperationalInsights/workspaces - Microsoft.OperationalInsights/solutions - Microsoft.OperationalInsights/workspaces/datasources - microsoft.aadiam/diagnosticSettings - Microsoft.OperationalInsights/workspaces/sharedKeys - Microsoft.Authorization/policyAssignments |
providerDisplayName | String | Élément de liste sous Prérequis qui affiche un « x » rouge ou une coche verte lorsque les requiredPermissions sont validées dans la page du connecteur. Par exemple, "Workspace" |
permissionsDisplayText | String | Affiche du texte pour les autorisations Lecture, Écriture ou Lecture et écriture qui doivent correspondre aux valeurs configurées dans requiredPermissions |
requiredPermissions | { "action": Booléen, "delete": Booléen, "read": Booléen, "write": Boolean} |
Décrit les autorisations minimales nécessaires pour le connecteur. |
scope | ENUM | Décrit l’étendue du connecteur de données avec l’une des valeurs suivantes : "Subscription" , "ResourceGroup" , "Workspace" |
sampleQueries
valeur de tableau | Type | Description |
---|---|---|
description | String | Description explicite de l’exemple de requête. Exemple : Top 10 vulnerabilities detected |
requête | String | Exemple de requête utilisé pour extraire les données du type de données. Exemple : {{graphQueriesTableName}}\n | sort by TimeGenerated\n | take 10 |
Configurer d’autres options de lien
Pour définir un lien inclus en utilisant Markdown, servez-vous de l’exemple suivant. Ici, un lien est fourni dans la description d’une instruction :
{
"title": "",
"description": "Make sure to configure the machine's security according to your organization's security policy\n\n\n[Learn more >](https://aka.ms/SecureCEF)"
}
Pour définir un lien comme modèle ARM, utilisez l’exemple suivant comme guide :
{
"title": "Azure Resource Manager (ARM) template",
"description": "1. Click the **Deploy to Azure** button below.\n\n\t[![Deploy To Azure](https://aka.ms/deploytoazurebutton)]({URL to custom ARM template})"
}
Valider l’expérience utilisateur de la page du connecteur de données
Suivez ces étapes pour afficher et valider l’expérience utilisateur du connecteur.
- L’utilitaire de test est accessible via l’URL https://aka.ms/sentineldataconnectorvalidateurl
- Accédez à Microsoft Sentinel -> Connecteurs de données
- Cliquez sur le bouton « importer » et sélectionnez un fichier JSON qui contient uniquement la section
connectorUiConfig
de votre connecteur de données.
Pour plus d’informations sur cet outil de validation, consultez les instructions Générer le connecteur dans notre guide de génération GitHub.
Notes
Sachant que le paramètre d’instruction APIKey est propre au connecteur sans code, supprimez provisoirement cette section avant d’utiliser l’outil de validation pour éviter un échec de celui-ci.
Configurer les paramètres d’interrogation de votre connecteur
Cette section décrit la configuration de l’interrogation des données de votre source de données pour un connecteur de données sans code.
Le code suivant illustre la syntaxe de la section pollingConfig
du fichier config de la CCP.
"pollingConfig": {
"auth": {
},
"request": {
},
"response": {
},
"paging": {
}
}
La section pollingConfig
comprend les propriétés suivantes :
Name | Type | Description |
---|---|---|
auth | String | Décrit les propriétés d’authentification pour l’interrogation des données. Pour plus d’informations, consultez Configuration d’auth. |
auth.authType | String | Mandatory. Définit le type d’authentification, imbriqué à l’intérieur de l’objet auth , avec l’une des valeurs suivantes : Basic , APIKey , OAuth2 |
requête | JSON imbriqué | Mandatory. Décrit la charge utile de la requête pour interroger les données, telles que le point de terminaison de l’API. Pour plus d’informations, consultez Configuration de request. |
response | JSON imbriqué | Mandatory. Décrit l’objet de réponse et le message imbriqué renvoyés par l’API lors de l’interrogation des données. Pour plus d’informations, consultez Configuration de response. |
paging | JSON imbriqué | Optionnel. Décrit la charge utile de la pagination lors de l’interrogation des données. Pour plus d’informations, consultez Configuration de paging. |
Pour plus d’informations, consultez Exemple de code pollingConfig.
Configuration d’auth
La section auth
de la configuration pollingConfig comprend les paramètres suivants, selon le type défini dans l’élément authType :
Paramètres authType de base
Nom | Type | Description |
---|---|---|
Nom d’utilisateur | String | Mandatory. Définit le nom d’utilisateur. |
Mot de passe | String | Mandatory. Définit le mot de passe de l’utilisateur. |
Paramètres authType pour APIKey
Name | Type | Description |
---|---|---|
APIKeyName | Chaîne | facultatif. Définit le nom de votre clé API, avec l’une des valeurs suivantes : - XAuthToken - Authorization |
IsAPIKeyInPostPayload | Boolean | Détermine l’emplacement où votre clé API est définie. True : La clé API est définie dans la charge utile de la requête POST False : La clé API est définie dans l’en-tête |
APIKeyIdentifier | Chaîne | Facultatif. Définit le nom de l’identificateur pour la clé API. Par exemple, lorsque l’autorisation est définie sur "Authorization": "token <secret>" , ce paramètre est défini comme suit : {APIKeyIdentifier: “token”}) |
Paramètres d’authType OAuth2
La plateforme du connecteur sans code prend en charge l’octroi de code d’autorisation OAuth 2.0.
Le type d’autorisation du code d’autorisation est utilisé par les clients confidentiels et publics pour échanger un code d’autorisation pour un jeton d’accès.
Une fois que l’utilisateur est retourné au client via l’URL de redirection, l’application obtient le code d’autorisation de l’URL et l’utilise pour demander un jeton d’accès.
Nom | Type | Description |
---|---|---|
FlowName | String | Mandatory. Définit un flux OAuth2. Valeur prise en charge : AuthCode - nécessite un flux d’autorisation |
AccessToken | String | Facultatif. Définit un jeton d’accès OAuth2, pertinent lorsque le jeton d’accès n’expire pas. |
AccessTokenPrepend | String | Facultatif. Définit un jeton d’accès OAuth2 ajouté. La valeur par défaut est Bearer . |
RefreshToken | String | Obligatoire pour les types d’authentification OAuth2. Définit le jeton d’actualisation OAuth2. |
TokenEndpoint | String | Obligatoire pour les types d’authentification OAuth2. Définit le point de terminaison du service de jeton OAuth2. |
AuthorizationEndpoint | String | Facultatif. Définit le point de terminaison du service d’autorisation OAuth2. Utilisé uniquement lors de l’intégration ou lors du renouvellement d’un jeton d’actualisation. |
RedirectionEndpoint | String | Facultatif. Définit un point de terminaison de redirection lors de l’intégration. |
AccessTokenExpirationDateTimeInUtc | String | Facultatif. Définit une date/heure d’expiration du jeton d’accès au format UTC. Pertinent lorsque le jeton d’accès n’expire pas, et a donc une date importante en UTC, ou lorsque le jeton d’accès a une date d’expiration importante. |
RefreshTokenExpirationDateTimeInUtc | String | Obligatoire pour les types d’authentification OAuth2. Définit la date d’expiration du jeton d’actualisation au format UTC. |
TokenEndpointHeaders | Dictionnaire<chaîne, objet> | facultatif. Définit les en-têtes lors de l’appel d’un point de terminaison de service de jeton OAuth2. Définissez une chaîne au format dictionary<string, string> sérialisé : {'<attr_name>': '<val>', '<attr_name>': '<val>'... } |
AuthorizationEndpointHeaders | Dictionnaire<chaîne, objet> | facultatif. Définit les en-têtes lors de l’appel d’un point de terminaison de service d’autorisation OAuth2. Utilisé uniquement lors de l’intégration ou lors du renouvellement d’un jeton d’actualisation. Définissez une chaîne au format dictionary<string, object> sérialisé : {'<attr_name>': <serialized val>, '<attr_name>': <serialized val>, ... } |
AuthorizationEndpointQueryParameters | Dictionnaire<chaîne, objet> | facultatif. Définit les paramètres de requête lors de l’appel d’un point de terminaison de service d’autorisation OAuth2. Utilisé uniquement lors de l’intégration ou lors du renouvellement d’un jeton d’actualisation. Définissez une chaîne au format dictionary<string, object> sérialisé : {'<attr_name>': <serialized val>, '<attr_name>': <serialized val>, ... } |
TokenEndpointQueryParameters | Dictionnaire<chaîne, objet> | facultatif. Définissez les paramètres de requête lors de l’appel du point de terminaison du service de jeton OAuth2. Définissez une chaîne au format dictionary<string, object> sérialisé : {'<attr_name>': <serialized val>, '<attr_name>': <serialized val>, ... } |
IsTokenEndpointPostPayloadJson | Booléen | facultatif. La valeur par défaut est false. Détermine si les paramètres de requête sont au format JSON et définis dans la charge utile POST de requête. |
IsClientSecretInHeader | Booléen | facultatif. La valeur par défaut est false. Détermine si les valeurs client_id et client_secret valeurs sont définies dans l’en-tête, comme dans le schéma d’authentification de base, et non pas dans la charge utile POST. |
RefreshTokenLifetimeinSecAttributeName | String | Facultatif. Définit le nom d’attribut de la réponse du point de terminaison de jeton, en spécifiant la durée de vie du jeton d’actualisation, en secondes. |
IsJwtBearerFlow | Booléen | facultatif. La valeur par défaut est false. Détermine si vous utilisez JWT. |
JwtHeaderInJson | Dictionnaire<chaîne, objet> | facultatif. Définissez les en-têtes JWT au format JSON. Définissez une chaîne au format dictionary<string, object> sérialisé : {'<attr_name>': <serialized val>, '<attr_name>': <serialized val>...} |
JwtClaimsInJson | Dictionnaire<chaîne, objet> | facultatif. Définit les revendications JWT au format JSON. Définissez une chaîne au format dictionary<string, object> sérialisé : {'<attr_name>': <serialized val>, '<attr_name>': <serialized val>, ...} |
JwtPem | String | Facultatif. Définit une clé secrète, au format PEM Pkcs1 : '-----BEGIN RSA PRIVATE KEY-----\r\n{privatekey}\r\n-----END RSA PRIVATE KEY-----\r\n' Veillez à conserver le code '\r\n' en lieu sûr. |
RequestTimeoutInSeconds | Integer | Optionnel. Détermine le délai d’expiration en secondes lors de l’appel du point de terminaison de service de jeton. La valeur par défaut est de 180 secondes |
Voici un exemple de la façon dont une configuration OAuth2 peut se présenter :
"pollingConfig": {
"auth": {
"authType": "OAuth2",
"authorizationEndpoint": "https://accounts.google.com/o/oauth2/v2/auth?access_type=offline&prompt=consent",
"redirectionEndpoint": "https://portal.azure.com/TokenAuthorize",
"tokenEndpoint": "https://oauth2.googleapis.com/token",
"authorizationEndpointQueryParameters": {},
"tokenEndpointHeaders": {
"Accept": "application/json"
},
"TokenEndpointQueryParameters": {},
"isClientSecretInHeader": false,
"scope": "https://www.googleapis.com/auth/admin.reports.audit.readonly",
"grantType": "authorization_code",
"contentType": "application/x-www-form-urlencoded",
"FlowName": "AuthCode"
},
Paramètres authType pour Session
Name | Type | Description |
---|---|---|
QueryParameters | Dictionnaire<chaîne, objet> | facultatif. Liste des paramètres de requête, au format dictionary<string, string> sérialisé : {'<attr_name>': '<val>', '<attr_name>': '<val>'... } |
IsPostPayloadJson | Boolean | Optionnel. Détermine si les paramètres de requête sont au format JSON. |
En-têtes | Dictionnaire<chaîne, objet> | facultatif. Définit l’en-tête utilisé lors de l’appel du point de terminaison pour obtenir l’ID de session et lors de l’appel de l’API du point de terminaison. Définissez la chaîne au format dictionary<string, string> sérialisé : {'<attr_name>': '<val>', '<attr_name>': '<val>'... } . |
SessionTimeoutInMinutes | Chaîne | Facultatif. Définit un délai d’expiration de session, en minutes. |
SessionIdName | Chaîne | Facultatif. Définit un nom d’ID pour la session. |
SessionLoginRequestUri | Chaîne | Facultatif. Définit une URI de requête de connexion de session. |
Configuration de requête
La section request
de la configuration pollingConfig comprend les paramètres suivants :
Name | Type | Description |
---|---|---|
apiEndpoint | String | Mandatory. Définit le point de terminaison à partir duquel extraire les données. |
httpMethod | String | Mandatory. Définit la méthode d’API : GET ou POST |
queryTimeFormat | Chaîne ou UnixTimestamp ou UnixTimestampInMills | Mandatory. Définit le format utilisé pour définir l’heure de la requête. Cette valeur peut être une chaîne ou être au format UnixTimestamp ou UnixTimestampInMills pour indiquer l’heure de début et de fin de la requête au format UnixTimestamp. |
startTimeAttributeName | Chaîne | Facultatif. Définit le nom de l’attribut qui définit l’heure de début de la requête. |
endTimeAttributeName | Chaîne | Facultatif. Définit le nom de l’attribut qui définit l’heure de fin de la requête. |
queryTimeIntervalAttributeName | String | Optionnel. Définit le nom de l’attribut qui définit l’intervalle de temps de la requête. |
queryTimeIntervalDelimiter | Chaîne | Facultatif. Définit le délimiteur de l’intervalle de temps de la requête. |
queryWindowInMin | Integer | Optionnel. Définit la fenêtre de requête disponible, en minutes. Valeur minimale : 5 |
queryParameters | Dictionnaire<chaîne, objet> | facultatif. Définit les paramètres transmis dans la requête dans le chemin d’accès eventsJsonPaths . Définissez la chaîne au format dictionary<string, string> sérialisé : {'<attr_name>': '<val>', '<attr_name>': '<val>'... } . |
queryParametersTemplate | String | Optionnel. Définit le modèle de paramètres de requête à utiliser lors de la transmission de paramètres de requête dans des scénarios avancés. Par exemple : "queryParametersTemplate": "{'cid': 1234567, 'cmd': 'reporting', 'format': 'siem', 'data': { 'from': '{_QueryWindowStartTime}', 'to': '{_QueryWindowEndTime}'}, '{_APIKeyName}': '{_APIKey}'}" {_QueryWindowStartTime} et {_QueryWindowEndTime} sont uniquement pris en charge dans les paramètres de requête queryParameters et queryParametersTemplate . {_APIKeyName} et {_APIKey} sont uniquement pris en charge dans le paramètre de requête queryParametersTemplate . |
isPostPayloadJson | Boolean | Optionnel. Détermine si la charge utile POST est au format JSON. |
rateLimitQPS | Double | Optionnel. Définit le nombre d’appels ou de requêtes autorisés en une seconde. |
timeoutInSeconds | Integer | Optionnel. Définit le délai d’expiration de la requête, en secondes. |
retryCount | Integer | Optionnel. Définit le nombre de nouvelles tentatives de la requête, le cas échéant. |
headers | Dictionnaire<chaîne, objet> | facultatif. Définit la valeur d’en-tête de demande au format dictionary<string, object> sérialisé : {'<attr_name>': '<serialized val>', '<attr_name>': '<serialized val>'... } . |
Configuration de réponse
La section response
de la configuration pollingConfig comprend les paramètres suivants :
Le code suivant illustre un exemple de la valeur eventsJsonPaths pour un message de niveau supérieur :
"eventsJsonPaths": [
"$"
]
Configuration de pagination
La section paging
de la configuration pollingConfig comprend les paramètres suivants :
Name | Type | Description |
---|---|---|
pagingType | String | Mandatory. Détermine le type de pagination à utiliser dans les résultats, avec l’une des valeurs suivantes : None , LinkHeader , NextPageToken , NextPageUrl , Offset |
linkHeaderTokenJsonPath | Chaîne | Facultatif. Définit le chemin d’accès JSON vers l’en-tête de lien dans le JSON de la réponse, si le LinkHeader n’est pas défini dans l’en-tête de la réponse. |
nextPageTokenJsonPath | Chaîne | Facultatif. Définit le chemin d’accès à un jeton JSON de page suivante. |
hasNextFlagJsonPath | Chaîne | Facultatif. Définit le chemin d’accès vers l’attribut de l’indicateur HasNextPage . |
nextPageTokenResponseHeader | Chaîne | Facultatif. Définit le nom de l’en-tête du jeton de page suivante dans la réponse. |
nextPageParaName | Chaîne | Facultatif. Détermine le nom de la page suivante dans la requête. |
nextPageRequestHeader | Chaîne | Facultatif. Détermine le nom de l’en-tête de la page suivante dans la requête. |
nextPageUrl | Chaîne | Facultatif. Détermine l’URL de la page suivante, si elle est différente de l’URL de la requête initiale. |
nextPageUrlQueryParameters | Chaîne | Facultatif. Détermine les paramètres de requête de l’URL de la page suivante s’ils sont différents de ceux de l’URL de la requête initiale. Définissez la chaîne au format dictionary<string, object> sérialisé : {'<attr_name>': <val>, '<attr_name>': <val>... } . |
offsetParaName | Chaîne | Facultatif. Définit le nom du paramètre de décalage. |
pageSizeParaName | Chaîne | Facultatif. Définit le nom du paramètre de taille de page. |
PageSize | Integer | Définit la taille de la pagination. |
Exemple de code pollingConfig
Le code suivant illustre un exemple de la section pollingConfig
du fichier config de la CCP :
"pollingConfig": {
"auth": {
"authType": "APIKey",
"APIKeyIdentifier": "token",
"APIKeyName": "Authorization"
},
"request": {
"apiEndpoint": "https://api.github.com/../{{placeHolder1}}/audit-log",
"rateLimitQPS": 50,
"queryWindowInMin": 15,
"httpMethod": "Get",
"queryTimeFormat": "yyyy-MM-ddTHH:mm:ssZ",
"retryCount": 2,
"timeoutInSeconds": 60,
"headers": {
"Accept": "application/json",
"User-Agent": "Scuba"
},
"queryParameters": {
"phrase": "created:{_QueryWindowStartTime}..{_QueryWindowEndTime}"
}
},
"paging": {
"pagingType": "LinkHeader",
"pageSizeParaName": "per_page"
},
"response": {
"eventsJsonPaths": [
"$"
]
}
}
Déployer votre connecteur dans Microsoft Sentinel et démarrer l’ingestion des données
Après avoir créé votre fichier config JSON, comprenant à la fois l’interface utilisateur et la configuration d’interrogation, déployez votre connecteur dans votre espace de travail Microsoft Sentinel.
Utilisez l’une des options suivantes pour déployer votre connecteur de données.
Conseil
L’avantage du déploiement par le biais d’un modèle Azure Resource Manager (ARM) est que plusieurs valeurs sont intégrées au modèle et que vous n’avez pas besoin de les définir manuellement dans un appel d’API.
Encapsulez vos collections de configurations JSON dans un modèle ARM pour déployer votre connecteur. Pour garantir un déploiement de votre connecteur de données dans l’espace de travail approprié, veillez à définir ce dernier dans le modèle ARM ou à le sélectionner au moment de déployer le modèle ARM.
Préparez un fichier JSON de modèle ARM pour votre connecteur. Par exemple, consultez les fichiers JSON de modèle ARM suivants :
- Connecteur de données dans la solution Slack
- Connecteur de données dans la solution GitHub
Dans le portail Azure, recherchez Déployer un modèle personnalisé.
Sur la page Déploiement personnalisé, sélectionnez Créer votre propre modèle dans l’éditeur>Charger un fichier. Naviguez jusqu’à votre modèle ARM local et sélectionnez-le, puis enregistrez vos modifications.
Sélectionnez votre abonnement et votre groupe de ressources, puis entrez dans l’espace de travail Log Analytics où vous souhaitez déployer votre connecteur personnalisé.
Sélectionnez Vérifier + créer pour déployer votre connecteur personnalisé sur Microsoft Sentinel.
Dans Microsoft Sentinel, accédez à la page Connecteurs de données, puis recherchez votre nouveau connecteur. Configurez-le pour démarrer l’ingestion des données.
Pour plus d’informations, consultez Déployer un modèle local dans la documentation d’Azure Resource Manager.
Configurez votre connecteur de données pour connecter votre source de données et commencer à ingérer des données dans Microsoft Sentinel. Vous pouvez vous connecter à votre source de données soit via le portail, comme avec les connecteurs de données prêts à l’emploi, soit via une API.
Lorsque vous utilisez le portail Azure pour vous connecter, les données utilisateur sont envoyées automatiquement. Lorsque vous vous connectez via l’API, vous devez envoyer les paramètres d’authentification pertinents dans l’appel d’API.
Dans la page de votre connecteur de données Microsoft Sentinel, suivez les instructions que vous avez fournies pour vous connecter au connecteur de données.
La page du connecteur de données dans Microsoft Sentinel est contrôlée par la configuration InstructionSteps dans l’élément
connectorUiConfig
du fichier config JSON de la plateforme CCP. Si vous rencontrez des problèmes avec la connexion à l’interface utilisateur, assurez-vous que vous disposez de la bonne configuration pour votre type d’authentification.Dans Microsoft Sentinel, accédez à la page Journaux et vérifiez que les journaux de votre source de données arrivent dans votre espace de travail.
Si vous ne voyez pas de données affluer dans Microsoft Sentinel, consultez la documentation et les ressources de dépannage de votre source de données, vérifiez les détails de la configuration et vérifiez la connectivité. Pour plus d’informations, consultez Superviser l’intégrité de vos connecteurs de données.
Déconnecter votre connecteur
Si vous n’avez plus besoin des données de votre connecteur, déconnectez-le pour arrêter le flux de données.
Appliquez l'une des méthodes suivantes :
Portail Azure : Dans la page de votre connecteur de données Microsoft Sentinel, sélectionnez Déconnexion.
API : Utilisez l’API DISCONNECT pour envoyer un appel PUT avec un corps vide à l’URL suivante :
https://management.azure.com /subscriptions/{{SUB}}/resourceGroups/{{RG}}/providers/Microsoft.OperationalInsights/workspaces/{{WS-NAME}}/providers/Microsoft.SecurityInsights/dataConnectors/{{Connector_Id}}/disconnect?api-version=2021-03-01-preview
Étapes suivantes
Si vous ne l’avez pas encore fait, partagez votre nouveau connecteur de données sans code avec la communauté Microsoft Sentinel ! Créez une solution pour votre connecteur de données et partagez-la sur le marketplace de Microsoft Sentinel.
Pour plus d'informations, consultez la rubrique