Partage via


[Déconseillé] Créer un connecteur sans code hérité pour Microsoft Sentinel

Important

La collecte de logs à partir de nombreux appareils et équipements est désormais prise en charge dans Microsoft Sentinel par le Common Event Format (CEF) via AMA, par Syslog via AMA ou par les logs personnalisés via le connecteur de données AMA. 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 sur le nouveau CCP, 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 avancés et aux développeurs la possibilité de créer des connecteurs personnalisés, de les connecter et d’ingérer des données à Microsoft Sentinel. Les connecteurs créés via le CCP peuvent être déployés via l’API, un modèle ARM ou en tant que solution dans le hub de contenu Microsoft Sentinel.

Les connecteurs créés à l’aide de CCP sont entièrement basés sur le SaaS, sans aucune exigence pour les installations de service, et incluent également le suivi de l’état de santé ainsi que la prise en charge complète de Microsoft Sentinel.

Créez votre connecteur de données en définissant des configurations JSON, avec les paramètres de la page du connecteur de données dans Microsoft Sentinel, ainsi que les paramètres d’interrogation qui définissent la façon dont les fonctions de connexion sont définies.

Important

Cette version de Codeless Connector Platform (CCP) est en version préliminaire, mais elle est également considérée comme obsolète. 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.

Procédez comme suit pour créer votre connecteur CCP et vous connecter à votre source de données à partir de Microsoft Sentinel :

  • Configurer l’interface utilisateur du connecteur
  • Configurer les paramètres d’interrogation du connecteur
  • Déployer votre connecteur sur 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 et procédures CCP JSON pour déployer votre connecteur via l’API, un modèle ARM ou une solution Microsoft Sentinel.

Conditions préalables

Avant de créer un connecteur, nous vous recommandons de comprendre le comportement de votre source de données et exactement la façon dont Microsoft Sentinel doit se connecter.

Par exemple, vous devez connaître les types d’authentification, de pagination et de points de terminaison d’API requis pour les connexions réussies.

Créer un fichier de configuration JSON de connecteur

Votre connecteur CCP personnalisé comporte deux sections JSON principales nécessaires au déploiement. Renseignez ces zones pour définir la façon dont votre connecteur s’affiche dans le portail Azure et comment il connecte Microsoft Sentinel à votre source de données.

Ensuite, si vous déployez votre connecteur sans code via ARM, vous encapsulez ces sections dans le modèle ARM pour les connecteurs de données.

Passez en revue d’autres connecteurs de données CCP en tant qu’exemples ou téléchargez l’exemple de modèle ,DataConnector_API_CCP_template.json (aperçu).

Configurer l’interface utilisateur de votre connecteur

Cette section décrit les options de configuration disponibles pour personnaliser l’interface utilisateur de la page connecteur de données.

L’image suivante montre un exemple de page de connecteur de données, mise en surbrillance avec des nombres correspondant à des zones notables de l’interface utilisateur :

Capture d’écran d’un exemple de page connecteur de données.

  1. Titre. Titre affiché pour votre connecteur de données.
  2. Logo. Icône affichée pour votre connecteur de données. La personnalisation de ce paramètre n’est possible que lors du déploiement dans le cadre d’une solution.
  3. Status. Indique si votre connecteur de données est connecté à Microsoft Sentinel ou non.
  4. 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.
  5. Onglet Instructions. Inclut une section Conditions préalables , avec une liste de validations minimales avant que l’utilisateur puisse activer le connecteur, et instructions, pour guider l’activation de l’utilisateur du connecteur. Cette section peut inclure du texte, des boutons, des formulaires, des tableaux et d’autres widgets courants pour simplifier le processus.
  6. Onglet Étapes suivantes. Inclut des informations utiles pour comprendre comment rechercher des données dans les journaux des événements, telles que des exemples de requêtes.

Voici les sections et la connectorUiConfig syntaxe nécessaires pour configurer l’interface utilisateur :

Nom de la propriété Catégorie Description
disponibilité {
"status": 1,
"isPreview": Booléen
}

état : 1 Indique que le connecteur est généralement disponible pour les clients.
isPreview Indique s’il faut inclure le suffixe "(Preview)" au nom du connecteur.
CritèresDeConnectivité {
"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 permettant d’extraire l’heure du dernier événement pour chaque type de données.
descriptionMarkdown Chaîne 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 une requête pour tous les types de données du connecteur de données ou une requête différente pour chaque type de données.
graphQueriesTableName Chaîne 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 composants 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 dans la section Conditions préalables de l’interface utilisateur qui répertorie les autorisations requises pour activer ou désactiver le connecteur.
éditeur Chaîne Il s’agit du texte affiché 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 sous l’onglet Étapes suivantes .
titre Chaîne Titre affiché dans la page du connecteur de données.

Mettre tous ces morceaux ensemble est compliqué. Utilisez l’outil de validation de l’expérience utilisateur de la page du connecteur pour tester les composants que vous avez réunis.

types de données

Valeur de tableau Catégorie Description
nom Chaîne Description explicite pour le lastDataReceivedQuery, y compris la prise en charge d'une variable.

Exemple : {{graphQueriesTableName}}
requêteDernièresDonnéesReçues Chaîne Requête KQL qui retourne une ligne et indique la dernière fois que les données ont été reçues, ou aucune donnée s’il n’y a pas 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 une requête pour tous les types de données du connecteur de données ou une requête différente pour chaque type de données.

Valeur de tableau Catégorie Description
metricName Chaîne Nom significatif pour votre graphe.

Exemple : Total data received
légende Chaîne Chaîne qui apparaît dans la légende à droite du graphique, y compris une référence de variable.

Exemple : {{graphQueriesTableName}}
baseQuery Chaîne Requête qui filtre les événements pertinents, y compris une référence de variable.

Par exemple : TableName_CL | where ProviderName == "myprovider"  ou {{graphQueriesTableName}}

instructionSteps

Cette section fournit des paramètres qui définissent l’ensemble d’instructions qui s’affichent sur votre page de connecteur de données dans Microsoft Sentinel.

Propriété de tableau Catégorie Description
titre Chaîne Optionnel. Définit un titre pour vos instructions.
description Chaîne Optionnel. Définit une description explicite pour vos instructions.
innerSteps Tableau Optionnel. Définit un tableau d’étapes d’instruction internes.
instructions Tableau d’instructions Obligatoire. Définit un tableau d’instructions d’un type de paramètre spécifique.
bottomBorder Booléen Optionnel. Quand true est utilisé, ajoute une bordure inférieure à la zone d'instructions de la page du connecteur dans Microsoft Sentinel.
isComingSoon Booléen Optionnel. Lorsqu’il est activé true, ajoute un titre Prochainement 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 Array, propriété Description
APIKey APIKey Ajoutez des espaces réservés au fichier de configuration JSON de votre connecteur.
CopyableLabel CopyableLabel Affiche un champ de texte avec un bouton de copie à la fin. Lorsque le bouton est sélectionné, la valeur du champ est copiée.
Message d'information Message d'information Définit un message d’informations inline.
InstructionStepsGroup InstructionStepsGroup Affiche un groupe d’instructions, pouvant être développé ou rétractable, 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 de configuration JSON, avec des paramètres d’espaces réservés, à réutiliser sur plusieurs connecteurs, ou même pour créer un connecteur avec des données que vous n’avez pas actuellement.

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 de configuration CCP JSON , à l’aide de la syntaxe suivante :

"instructions": [
                {
                  "parameters": {
                    "enable": "true",
                    "userRequestPlaceHoldersInput": [
                      {
                        "displayText": "Organization Name",
                        "requestObjectKey": "apiEndpoint",
                        "placeHolderName": "{{placeHolder}}"
                      }
                    ]
                  },
                  "type": "APIKey"
                }
              ]

Le userRequestPlaceHoldersInput paramètre inclut les attributs suivants :

Nom Catégorie Description
DisplayText Chaîne Définit la valeur d’affichage de la zone de texte, qui est affichée à l’utilisateur lors de la connexion.
RequestObjectKey Chaîne Définit l'ID dans la section de requête de sondageConfig pour remplacer la valeur fictive par la valeur fournie par l'utilisateur.

Si vous n’utilisez pas cet attribut, utilisez plutôt l’attribut PollingKeyPaths .
PollingKeyPaths Chaîne Définit un tableau d’objets JsonPath qui dirige l’appel d’API n’importe où dans le modèle pour 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 Chaîne Définit le nom du paramètre d’espace réservé dans le fichier de modèle JSON. Il peut s’agir de n’importe quelle valeur unique, telle que {{placeHolder}}.

Étiquette Copiable

Exemple:

Capture d’écran d’un bouton copier une valeur dans un champ.

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 Catégorie Description
fillWith ENUM Optionnel. Tableau de variables d’environnement utilisées 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, , workspaceNameprimaryKey, MicrosoftAwsAccountsubscriptionId
label Chaîne Définit le texte de l’étiquette au-dessus d’une zone de texte.
valeur Chaîne Définit la valeur à présenter dans la zone de texte, prend en charge les espaces réservés.
Lignes Lignes Optionnel. Définit les lignes de la zone d’interface utilisateur. Par défaut, définissez sur 1.
wideLabel Booléen Optionnel. Détermine une étiquette large pour les chaînes longues. Par défaut, définissez la falsevaleur .

InfoMessage

Voici un exemple de message d’informations inline :

Capture d’écran d’un message d’informations inline.

À l'inverse, l'image suivante montre un message d'information non en ligne :

Capture d’écran d’un message d’informations non inclus.

Valeur de tableau Catégorie Description
texte Chaîne Définissez le texte à afficher dans le message.
visible Booléen Détermine si le message est affiché.
Inline Booléen Détermine la façon dont le message d’informations est affiché.

- true: (Recommandé) Affiche le message d’informations incorporé dans les instructions.
- false: ajoute un arrière-plan bleu.

InstructionStepsGroup

Voici un exemple de groupe d’instructions extensible :

Capture d’écran d’un groupe d’instructions supplémentaire extensible.

Valeur de tableau Catégorie Description
titre Chaîne Définit le titre de l’étape d’instruction.
canCollapseAllSections Booléen Optionnel. Détermine si la section est un accordéon pliable ou non.
noFxPadding Booléen Optionnel. Si true, réduit le remplissage de hauteur pour économiser de l’espace.
expansé Booléen Optionnel. Si true, s’affiche comme développé par défaut.

Pour obtenir un exemple détaillé, consultez le json de configuration pour le connecteur DNS Windows.

InstallAgent

Certains types InstallAgent apparaissent sous la forme d’un bouton, d’autres apparaissent sous forme de lien. Voici des exemples des deux :

Capture d’écran d’un lien ajouté en tant que bouton.

Capture d’écran d’un lien ajouté en tant que texte inline.

Valeurs de tableau Catégorie Description
linkType ENUM Détermine le type de lien, comme 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 lors de l’utilisation du linkType OpenPolicyAssignment . 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’affectation, comme l’une des valeurs suivantes : Initiative, Policy
dataCollectionRuleType ENUM Optionnel. Pour les connecteurs basés sur DCR, définit le type de règle de collecte de données comme l’un des éléments suivants : SecurityEventForwardEvent

métadonnées

Cette section fournit des métadonnées dans l’interface utilisateur du connecteur de données sous la zone Description .

Valeur de collection Catégorie Description
kind Chaîne Définit le type de modèle ARM que vous créez. Toujours utiliser dataConnector.
source Chaîne Décrit votre source de données à l’aide de la syntaxe suivante :
{
"kind":chaîne
"name":chaîne
}
auteur Chaîne Décrit l’auteur du connecteur de données à l’aide de la syntaxe suivante :
{
"name":chaîne
}
soutien Chaîne Décrivez la prise en charge fournie pour le connecteur de données à l’aide de la syntaxe suivante :
{
"tier":chaîne
"name":chaîne de caractères
"email":chaîne de caractères
"link":Chaîne d’URL
}

autorisations

Valeur de tableau Catégorie Description
douane Chaîne Décrit les autorisations personnalisées requises pour votre connexion de données, dans la syntaxe suivante :
{
"name":chaîne,
"description":chaîne de caractères
}

Exemple : La valeur douanière s’affiche dans la section Conditions préalables de Microsoft Sentinel avec une icône d’information bleue. Dans l’exemple GitHub, cela correspond à la clé de jeton personnel de l’API GitHub de ligne : vous devez accéder au jeton personnel GitHub...
licenses ENUM Définit les licences requises comme l’une des valeurs suivantes : OfficeIRM,OfficeATP, Office365, AadP1P2, Mcas, Aatp, , Mdatp, , , MtpIoT

Exemple : La valeur des licences s’affiche dans Microsoft Sentinel comme suit : Licence : Azure AD Premium P2 requis
resourceProvider resourceProvider Décrit les conditions préalables pour votre ressource Azure.

Exemple : La valeur resourceProvider s’affiche dans la section Conditions préalables de Microsoft Sentinel comme suit :
Espace de travail : l’autorisation de lecture et d’écriture est requise.
Clés : les autorisations de lecture pour les clés partagées pour l’espace de travail sont requises.
tenant 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 du locataire dans Microsoft Sentinel en tant que : Autorisations de locataire : Nécessite Global Administrator ou Security Administrator sur le locataire de l’espace de travail

fournisseur de ressources

valeur de sous-tableau Catégorie Description
fournisseur 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 Chaîne Élément de liste sous Conditions préalables qui affiche un "x" rouge ou une coche verte lorsque les requiredPermissions sont validés dans la page du connecteur. Exemple "Workspace"
Texte d'affichage des autorisations Chaîne Afficher 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":Booléen
}
Décrit les autorisations minimales requises pour le connecteur.
étendue ENUM Décrit l’étendue du connecteur de données, comme l’une des valeurs suivantes : "Subscription", "ResourceGroup", "Workspace"

exemplesDeRequêtes

valeur du tableau Catégorie Description
description Chaîne Description explicite de l’exemple de requête.

Exemple : Top 10 vulnerabilities detected
requête Chaîne Exemple de requête utilisé pour extraire les données du type de données.

Exemple : {{graphQueriesTableName}}\n | sort by TimeGenerated\n | take 10

Pour définir un lien inline à l’aide de Markdown, utilisez l’exemple suivant. Ici, un lien est fourni dans une description d’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 en tant que 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 connecteur de données

Suivez ces étapes pour afficher et valider l’expérience utilisateur du connecteur.

  1. L’utilitaire de test est accessible par cette URL : https://aka.ms/sentineldataconnectorvalidateurl
  2. Accéder à Microsoft Sentinel -> Connecteurs de données
  3. Cliquez sur le bouton « Importer » et sélectionnez un fichier json qui contient uniquement la connectorUiConfig section de votre connecteur de données.

Pour plus d’informations sur cet outil de validation, consultez les instructions de génération du connecteur dans notre guide de build GitHub.

Remarque

Étant donné que le paramètre d’instruction APIKey est spécifique au connecteur sans code, supprimez temporairement cette section pour utiliser l’outil de validation ou échouera.

Configurer les paramètres d’interrogation de votre connecteur

Cette section décrit la configuration de la façon dont les données sont interrogées à partir de votre source de données pour un connecteur de données sans code.

Le code suivant montre la syntaxe de la pollingConfig section du fichier de configuration CCP .

"pollingConfig": {
    "auth": {
    },
    "request": {
    },
    "response": {
    },
    "paging": {
    }
 }

La pollingConfig section inclut les propriétés suivantes :

Nom Catégorie Description
Auth Chaîne Décrit les propriétés d’authentification pour l’interrogation des données. Pour plus d’informations, consultez la configuration de l’authentification.
auth.authType Chaîne Obligatoire. Définit le type d’authentification, imbriqué à l’intérieur de l’objetauth, comme l’une des valeurs suivantes : Basic, , APIKeyOAuth2
requête JSON imbriqué Obligatoire. 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 requête.
response JSON imbriqué Obligatoire. 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 réponse.
pagination 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 l’exemple de code pollingConfig.

Configuration de l’authentification

La auth section de la configuration pollingConfig inclut les paramètres suivants, en fonction du type défini dans l’élément authType :

Paramètres authType de base

Nom Catégorie Description
Nom d’utilisateur Chaîne Obligatoire. Définit le nom d’utilisateur.
Mot de passe Chaîne Obligatoire. Définit le mot de passe de l’utilisateur.

Paramètres d’authType APIKey

Nom Catégorie Description
APIKeyName Chaîne Optionnel. Définit le nom de votre clé API, comme l’une des valeurs suivantes :

- XAuthToken
- Authorization
IsAPIKeyInPostPayload Booléen 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 Optionnel. Définit le nom de l’identificateur de la clé API.

Par exemple, où l’autorisation est définie comme "Authorization": "token <secret>", ce paramètre est défini comme suit : {APIKeyIdentifier: “token”})

Paramètres du type d'authentification OAuth2

La plateforme du connecteur sans code prend en charge l’octroi de code d’autorisation OAuth 2.0.

Le type de code d’autorisation est utilisé par les clients confidentiels et publics afin d'échanger un code d’autorisation contre 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 Catégorie Description
FlowName Chaîne Obligatoire. Définit un flux OAuth2.

Valeur prise en charge : AuthCode - nécessite un flux d’autorisation
AccessToken Chaîne Optionnel. Définit un jeton d’accès OAuth2, pertinent lorsque le jeton d’accès n’expire pas.
AccessTokenPrepend Chaîne Optionnel. Définit un préfixe pour le jeton d’accès OAuth2. La valeur par défaut est Bearer.
RefreshToken Chaîne Obligatoire pour les types d’authentification OAuth2. Définit le jeton de rafraîchissement OAuth2.
TokenEndpoint Chaîne Obligatoire pour les types d’authentification OAuth2. Définit le point de terminaison du service de jeton OAuth2.
PointDeFinD'Autorisation Chaîne Optionnel. 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 Chaîne Optionnel. Définit un point de terminaison de redirection pendant l’intégration.
Date et heure d'expiration du token d'accès en UTC Chaîne Optionnel. Définit une date d’expiration du jeton d’accès au format UTC. Pertinent pour le moment où le jeton d’accès n’expire pas, et a donc une datetime importante au format UTC, ou lorsque le jeton d’accès a une date d’expiration importante.
RefreshTokenExpirationDateTimeInUtc Chaîne Obligatoire pour les types d’authentification OAuth2. Définit la date d’expiration du jeton d’actualisation au format UTC.
TokenEndpointHeaders Dictionnaire<string, objet> Optionnel. Définit les en-têtes pour l'accès à un point de terminaison du service de jetons OAuth2.

Définissez une chaîne au format sérialisé dictionary<string, string> : {'<attr_name>': '<val>', '<attr_name>': '<val>'... }
AuthorizationEndpointHeaders Chaîne de<dictionnaire, objet> Optionnel. Définit les en-têtes lorsqu'on appelle un point de terminaison du 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 sérialisé dictionary<string, object> : {'<attr_name>': <serialized val>, '<attr_name>': <serialized val>, ... }
ParamètresDeRequêteDuPointDeTerminaisonD'Autorisation Chaîne de<dictionnaire, objet> Optionnel. 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 sérialisé dictionary<string, object> : {'<attr_name>': <serialized val>, '<attr_name>': <serialized val>, ... }
TokenEndpointQueryParameters Chaîne<de caractères, objet> Optionnel. 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 sérialisé dictionary<string, object> : {'<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 la requête.
IsClientSecretInHeader Booléen Facultatif, la valeur par défaut est false. Détermine si les valeurs client_id et client_secret sont définies dans l’en-tête, comme dans le schéma d’authentification de base, au lieu de la charge utile POST.
RefreshTokenLifetimeinSecAttributeName Chaîne Optionnel. Définit le nom de l’attribut à partir 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 Chaîne de<dictionnaire, objet> Optionnel. Définissez les en-têtes JWT au format JSON.

Définissez une chaîne au format sérialisé dictionary<string, object> : {'<attr_name>': <serialized val>, '<attr_name>': <serialized val>...}
JwtClaimsInJson Chaîne de<dictionnaire, objet> Optionnel. Définit les revendications JWT au format JSON.

Définissez une chaîne au format sérialisé dictionary<string, object> : {'<attr_name>': <serialized val>, '<attr_name>': <serialized val>, ...}
JwtPem Chaîne Optionnel. 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 place.
RequestTimeoutInSeconds Nombre entier 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 ressembler :

"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 de session

Nom Catégorie Description
QueryParameters Chaîne de<dictionnaire, objet> Optionnel. Liste des paramètres de requête, au format sérialisé dictionary<string, string> :

{'<attr_name>': '<val>', '<attr_name>': '<val>'... }
IsPostPayloadJson Booléen Optionnel. Détermine si les paramètres de requête sont au format JSON.
En-têtes Dictionnaire<chaîne, objet> Optionnel. 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 de point de terminaison.

Définissez la chaîne au format sérialisé dictionary<string, string> : {'<attr_name>': '<val>', '<attr_name>': '<val>'... }
SessionTimeoutInMinutes Chaîne Optionnel. Définit un délai d’expiration de session, en minutes.
SessionIdName Chaîne Optionnel. Définit un nom d’ID pour la session.
SessionLoginRequestUri Chaîne Optionnel. Définit un URI de demande de connexion de session.

Configuration de requête

La request section de la configuration pollingConfig inclut les paramètres suivants :

Nom Catégorie Description
apiEndpoint Chaîne Obligatoire. Définit le point de terminaison à partir duquel extraire les données.
httpMethod Chaîne Obligatoire. Définit la méthode d’API : GET ou POST
queryTimeFormat String, ou UnixTimestamp ou UnixTimestampInMills Obligatoire. Définit le format utilisé pour définir l’heure de la requête.

Cette valeur peut être une chaîne, ou au format UnixTimestamp ou UnixTimestampInMills pour indiquer l’heure de début et de fin de la requête dans UnixTimestamp.
startTimeAttributeName Chaîne Optionnel. Définit le nom de l’attribut qui définit l’heure de début de la requête.
endTimeAttributeName Chaîne Optionnel. Définit le nom de l’attribut qui définit l’heure de fin de la requête.
queryTimeIntervalAttributeName Chaîne Optionnel. Définit le nom de l’attribut qui définit l’intervalle de temps de requête.
queryTimeIntervalDelimiter Chaîne Optionnel. Définit le délimiteur d’intervalle de temps de requête.
queryWindowInMin Nombre entier Optionnel. Définit la fenêtre de requête disponible, en minutes.

Valeur minimale : 5
queryParameters Dictionnaire<chaîne, objet> Optionnel. Définit les paramètres passés dans la requête sur le chemin eventsJsonPaths.

Définissez la chaîne au format sérialisé dictionary<string, string> : {'<attr_name>': '<val>', '<attr_name>': '<val>'... }.
queryParametersTemplate Chaîne Optionnel. Définit le modèle de paramètres de requête à utiliser lors du passage des 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 queryParametersTemplate paramètre de requête.
isPostPayloadJson Booléen 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 Nombre entier Optionnel. Définit le délai d’expiration de la requête, en secondes.
retryCount Nombre entier Optionnel. Définit le nombre de nouvelles tentatives de requête à essayer si nécessaire.
headers Chaîne de<dictionnaire, objet> Optionnel. Définit la valeur d’en-tête de requête, au format sérialisé dictionary<string, object> : {'<attr_name>': '<serialized val>', '<attr_name>': '<serialized val>'... }

Configuration de réponse

La response section de la configuration pollingConfig inclut les paramètres suivants :

Nom Catégorie Description
eventsJsonPaths Liste de chaînes de caractères Obligatoire. Définit le chemin d’accès au message dans la réponse JSON.

Une expression de chemin d’accès JSON spécifie un chemin d’accès à un élément, ou à un ensemble d’éléments, dans une structure JSON
successStatusJsonPath Chaîne Optionnel. Définit le chemin d’accès au message de réussite dans la réponse JSON.
successStatusValue Chaîne Optionnel. Définit le chemin d’accès vers la valeur du message de réussite dans la réponse JSON.
isGzipCompressed Booléen Optionnel. Détermine si la réponse est compressée dans un fichier gzip.

Le code suivant montre un exemple de valeur eventsJsonPaths pour un message de niveau supérieur :

"eventsJsonPaths": [
              "$"
            ]

Configuration de pagination

La paging section de la configuration pollingConfig inclut les paramètres suivants :

Nom Catégorie Description
pagingType Chaîne Obligatoire. Détermine le type de pagination à utiliser dans les résultats, comme l’une des valeurs suivantes : None, , LinkHeaderNextPageToken, , NextPageUrl,Offset
linkHeaderTokenJsonPath Chaîne Optionnel. Définit le chemin JSON pour lier l’en-tête dans le JSON de réponse, si LinkHeader n’est pas défini dans l’en-tête de réponse.
nextPageTokenJsonPath Chaîne Optionnel. Définit le chemin d’accès à un jeton JSON de la page suivante.
hasNextFlagJsonPath Chaîne Optionnel. Définit le chemin d’accès à l’attribut d’indicateur HasNextPage .
nextPageTokenResponseHeader Chaîne Optionnel. Définit le nom d’en-tête du jeton de page suivant dans la réponse.
nextPageParaName Chaîne Optionnel. Détermine le nom de la page suivante dans la requête.
nextPageRequestHeader Chaîne Optionnel. Détermine le nom d’en-tête de page suivant dans la requête.
nextPageUrl Chaîne Optionnel. Détermine l’URL de la page suivante , si elle est différente de l’URL de la requête initiale.
nextPageUrlQueryParameters Chaîne Optionnel. Détermine les paramètres de requête de l’URL de la page suivante s’il est différent de l’URL de la requête initiale.

Définissez la chaîne au format sérialisé dictionary<string, object> : {'<attr_name>': <val>, '<attr_name>': <val>... }
offsetParaName Chaîne Optionnel. Définit le nom du paramètre de décalage.
pageSizeParaName Chaîne Optionnel. Définit le nom du paramètre de taille de page.
Taille de la Page Nombre entier Définit la taille de pagination.

Exemple de code pollingConfig

Le code suivant montre un exemple de section pollingConfig du fichier de configuration 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 commencer à ingérer des données

Après avoir créé votre fichier de configuration JSON, y compris l’interface utilisateur et la configuration d’interrogation , déployez votre connecteur dans votre espace de travail Microsoft Sentinel.

  1. Utilisez l’une des options suivantes pour déployer votre connecteur de données.

    Conseil / Astuce

    L’avantage du déploiement via 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.

    Mettez vos collections de configuration JSON dans un modèle ARM pour déployer votre connecteur. Pour vous assurer que votre connecteur de données est déployé sur l’espace de travail approprié, veillez à définir l’espace de travail dans le modèle ARM ou à sélectionner l’espace de travail lors du déploiement du modèle ARM.

    1. Préparez un fichier JSON de modèle ARM pour votre connecteur. Par exemple, consultez les fichiers JSON de modèle ARM suivants :

    2. Dans le portail Azure, recherchez Déployer un modèle personnalisé.

    3. Dans la page Déploiement personnalisé, sélectionnez Générer votre propre modèle dans lefichier de chargement de l’éditeur>. Accédez à votre modèle ARM local et sélectionnez-le, puis enregistrez vos modifications.

    4. Sélectionnez votre abonnement et votre groupe de ressources, puis entrez l’espace de travail Log Analytics dans lequel vous souhaitez déployer votre connecteur personnalisé.

    5. Sélectionnez Vérifier + créer pour déployer votre connecteur personnalisé sur Microsoft Sentinel.

    6. Dans Microsoft Sentinel, accédez à la page Connecteurs de données , recherchez votre nouveau connecteur. Configurez-le pour commencer à ingérer des données.

    Pour plus d’informations, consultez Déployer un modèle local dans la documentation Azure Resource Manager.

  2. 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 via le portail, comme avec les connecteurs de données prêtes à l’emploi ou via l’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 appropriés dans l’appel d’API.

    Dans votre page de connecteur de données Microsoft Sentinel, suivez les instructions que vous avez fournies pour vous connecter à votre 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 de configuration CCP JSON . Si vous rencontrez des problèmes avec la connexion de l’interface utilisateur, vérifiez que vous disposez de la configuration appropriée pour votre type d’authentification.

  3. Dans Microsoft Sentinel, accédez à la page Journaux et vérifiez que les journaux de votre source de données sont transférés vers votre espace de travail.

Si vous ne voyez pas les données qui circulent dans Microsoft Sentinel, consultez la documentation de votre source de données et les ressources de dépannage, 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 connecteur pour arrêter le flux de données.

Utilisez l’une des méthodes suivantes :

  • Portail Azure : dans votre page de connecteur de données Microsoft Sentinel, sélectionnez Déconnecter.

  • 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 dans la Place de marché Microsoft Sentinel.

Pour plus d'informations, consultez la rubrique