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.
Pour créer un connecteur de données avec CCF (Codeless Connector Framework), utilisez ce document en complément de la documentation de référence de l’API REST Microsoft Sentinel pour les définitions de connecteur de données. Plus précisément, ce document de référence développe la section suivante :
-
connectorUiConfig: définit les éléments visuels et le texte affichés sur la page du connecteur de données dans Microsoft Sentinel.
Pour plus d’informations, consultez Créer un connecteur sans code.
Définitions de connecteur de données - Créer ou mettre à jour
Reportez-vous à l’opération Créer ou mettre à jour dans la documentation de l’API REST pour trouver la dernière version stable ou préliminaire de l’API. Seule l’opération update nécessite la etag valeur .
PUT , méthode
https://management.azure.com/subscriptions/{{subscriptionId}}/resourceGroups/{{resourceGroupName}}/providers/Microsoft.OperationalInsights/workspaces/{{workspaceName}}/providers/Microsoft.SecurityInsights/dataConnectorDefinitions/{{dataConnectorDefinitionName}}?api-version={{apiVersion}}
Paramètres d’URI
Pour plus d’informations sur la dernière version de l’API, consultez Définitions de connecteur de données - Créer ou mettre à jour des paramètres d’URI
| Nom | Description |
|---|---|
| dataConnectorDefinitionName | La définition du connecteur de données doit être un nom unique et est identique au name paramètre dans le corps de la demande. |
| resourceGroupName | Nom du groupe de ressources, qui ne respecte pas la casse. |
| subscriptionId | ID de l’abonnement cible. |
| workspaceName |
Nom de l’espace de travail, pas l’ID. Modèle d’expression régulière : ^[A-Za-z0-9][A-Za-z0-9-]+[A-Za-z0-9]$ |
| api-version | Version de l’API à utiliser pour cette opération. |
Corps de la demande
Le corps de la demande pour la création d’une définition de connecteur de données CCF avec l’API a la structure suivante :
{
"kind": "Customizable",
"properties": {
"connectorUIConfig": {}
}
}
dataConnectorDefinition a les propriétés suivantes :
| Nom | Obligatoire | Type | Description |
|---|---|---|---|
| Kind | Vrai | String |
Customizable pour le connecteur de données d’interrogation d’API ou Static autrement |
| Propriétés. connectorUiConfig | Vrai | JSON imbriqué connectorUiConfig |
Propriétés de configuration de l’interface utilisateur du connecteur de données |
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.
La capture d’écran suivante montre un exemple de page de connecteur de données, mis en surbrillance avec des nombres qui correspondent à des zones notables de l’interface utilisateur.
Chacun des éléments suivants de la section nécessaire à la connectorUiConfig configuration de l’interface utilisateur correspond à la partie CustomizableConnectorUiConfig de l’API.
| Field | Obligatoire | Type | Description | Capture d’écran de la zone notable # |
|---|---|---|---|---|
| title | True | string | Titre affiché dans la page du connecteur de données | 1 |
| id | chaîne | Définit l’ID de connecteur personnalisé pour l’utilisation interne | ||
| logo | string | Chemin d’accès au fichier image au format SVG. Si aucune valeur n’est configurée, un logo par défaut est utilisé. | 2 | |
| Éditeur | True | string | Fournisseur du connecteur | 3 |
| descriptionMarkdown | Vrai | chaîne dans Markdown | Description du connecteur avec la possibilité d’ajouter le langage Markdown pour l’améliorer. | 4 |
| sampleQueries | Vrai | JSON imbriqué sampleQueries |
Interroge le client pour comprendre comment trouver les données dans le journal des événements. | |
| graphQueries | Vrai | JSON imbriqué graphQueries |
Requêtes qui présentent l’ingestion des données au cours des deux dernières semaines. 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. |
5 |
| graphQueriesTableName | Définit le nom de la table dans laquelle le connecteur insère les données. Ce nom peut être utilisé dans d’autres requêtes en spécifiant un {{graphQueriesTableName}} espace réservé dans graphQueries les valeurs et lastDataReceivedQuery . |
|||
| dataTypes | Vrai | JSON imbriqué 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. | 6 |
| connectivityCriteria | Vrai | JSON imbriqué connectivityCriteria |
Objet qui définit comment vérifier si le connecteur est connecté. | 7 |
| Disponibilité | JSON imbriqué Disponibilité |
Objet qui définit la status de disponibilité du connecteur. | ||
| autorisations | Vrai | JSON imbriqué autorisations |
Informations affichées sous la section Prérequis de l’interface utilisateur, qui répertorie les autorisations requises pour activer ou désactiver le connecteur. | 8 |
| instructionSteps | Vrai | JSON imbriqué Instructions |
Tableau de composants de widget qui expliquent comment installer le connecteur et les contrôles actionnables affichés sous l’onglet Instructions . | 9 |
| isConnectivityCriteriasMatchSome | Booléen | Boolean indiquant s’il faut utiliser 'OR'(SOME) ou 'AND' entre les éléments ConnectivityCriteria. |
connectivityCriteria
| Field | Obligatoire | Type | Description |
|---|---|---|---|
| Type | Vrai | String | Une des deux options suivantes : HasDataConnectors – cette valeur est idéale pour les connecteurs de données d’interrogation d’API tels que le CCF. Le connecteur est considéré comme connecté avec au moins une connexion active.isConnectedQuery : cette valeur est idéale pour d’autres types de connecteurs de données. Le connecteur est considéré comme connecté lorsque la requête fournie retourne des données. |
| Valeur | True lorsque le type est isConnectedQuery |
String | Requête permettant de déterminer si des données sont reçues au cours d’une certaine période. Par exemple : CommonSecurityLog | where DeviceVendor == \"Vectra Networks\"\n| where DeviceProduct == \"X Series\"\n | summarize LastLogReceived = max(TimeGenerated)\n | project IsConnected = LastLogReceived > ago(7d)" |
dataTypes
| Valeur du tableau | Type | Description |
|---|---|---|
| name | String | Description explicite de, y compris lalastDataReceivedQuery prise en charge de la graphQueriesTableName variable. Exemple : {{graphQueriesTableName}} |
| lastDataReceivedQuery | String | Requête KQL qui retourne une ligne et indique l’heure de la dernière réception des données, ou aucune donnée en l’absence de résultats. 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.
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 du tableau | Type | Description |
|---|---|---|
| metricName | String | Nom explicite pour votre graphe. Exemple : Total data received |
| Légende | String | Chaîne qui apparaît dans la légende à droite du graphique, y compris une référence de variable. Exemple : {{graphQueriesTableName}} |
| baseQuery | String | Requête qui filtre les événements pertinents, y compris une référence de variable. Exemple : TableName_CL | where ProviderName == "myprovider" ou {{graphQueriesTableName}} |
availability
| Field | Obligatoire | Type | Description |
|---|---|---|---|
| status | Entier | Status de disponibilité du connecteur. Disponible = 1 Indicateur de fonctionnalité = 2 Bientôt disponible = 3 Interne = 4 |
|
| isPreview | Booléen | Valeur booléenne indiquant si le connecteur est en mode aperçu. |
autorisations
| Valeur du tableau | Type | Description |
|---|---|---|
| Douanes | String | Décrit toutes les autorisations personnalisées requises pour votre connexion de données, dans la syntaxe suivante : {"name":chaîne,"description":String} Exemple : la valeur en douane s’affiche dans Microsoft Sentinel section Conditions préalables avec une icône d’information bleue. Dans l’exemple GitHub, cette valeur est corrélée à 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, 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 : obligatoire Azure AD Premium P2 |
| resourceProvider | resourceProvider | Décrit les prérequis pour votre ressource Azure. Exemple : La valeur resourceProvider s’affiche dans Microsoft Sentinel section Prérequis comme suit : Espace de travail : l’autorisation de lecture et d’écriture est requise. Clés : des autorisations de lecture sur 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, sous la forme d’une ou plusieurs des valeurs suivantes : "GlobalAdmin", "SecurityAdmin", , "SecurityReader""InformationProtection" Exemple : affiche la valeur du locataire dans Microsoft Sentinel comme suit : Autorisations de locataire : Nécessite Global Administrator ou Security Administrator sur le locataire de l’espace de travail |
Importante
Microsoft vous recommande d’utiliser des rôles disposant du moins d’autorisations. Cela contribue à renforcer la sécurité de votre organisation. Le rôle d’administrateur général dispose de privilèges élevés. Il doit être limité aux scénarios d’urgence lorsque vous ne pouvez pas utiliser un rôle existant.
resourceProvider
| sous-valeur de tableau | Type | 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 | String | Élément de liste sous Prérequis qui affiche une coche rouge « x » ou verte lorsque les autorisations requises sont validées dans la page du connecteur. Exemple "Workspace" |
| permissionsDisplayText | String | 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" |
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 inline à l’aide de Markdown, utilisez l’exemple suivant.
{
"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[]({URL to custom ARM template})"
}
instructionSteps
Cette section fournit des paramètres qui définissent l’ensemble d’instructions qui s’affichent sur la page de votre connecteur de données dans Microsoft Sentinel et qui ont la structure suivante :
"instructionSteps": [
{
"title": "",
"description": "",
"instructions": [
{
"type": "",
"parameters": {}
}
],
"innerSteps": {}
}
]
| Array, propriété | Obligatoire | Type | Description |
|---|---|---|---|
| title | String | Définit un titre pour vos instructions. | |
| description | String | Définit une description explicite pour vos instructions. | |
| innerSteps | Tableau | Définit un tableau d’étapes d’instruction internes. | |
| Instructions | Vrai | Tableau d’instructions | Définit un tableau d’instructions d’un type de paramètre spécifique. |
Instructions
Affiche un groupe d’instructions, avec différents paramètres et la possibilité d’imbriquer davantage d’instructionsSteps dans des groupes. Les paramètres définis ici correspondent
| Type | Array, propriété | Description |
|---|---|---|
| OAuthForm | OAuthForm | Se connecter avec OAuth |
| Textbox | Textbox | Cette paire est associée à ConnectionToggleButton. Il existe 4 types disponibles :passwordtextnumberemail |
| ConnectionToggleButton | ConnectionToggleButton | Déclenchez le déploiement de la DCR en fonction des informations de connexion fournies par le biais des paramètres d’espace réservé. Les paramètres suivants sont pris en charge :name :ObligatoiredisabledisPrimaryconnectLabeldisconnectLabel |
| CopyableLabel | CopyableLabel | Affiche un champ de texte avec un bouton Copier à la fin. Lorsque le bouton est sélectionné, la valeur du champ est copiée. |
| Dropdown | Dropdown | Affiche une liste déroulante des options que l’utilisateur peut sélectionner. |
| Markdown | Markdown | Affiche une section de texte mise en forme avec Markdown. |
| DataConnectorsGrid | DataConnectorsGrid | Affiche une grille de connecteurs de données. |
| ContextPane | ContextPane | Affiche un volet d’informations contextuelles. |
| InfoMessage | InfoMessage | Définit un message d’informations inline. |
| InstructionStepsGroup | InstructionStepsGroup | Affiche un groupe d’instructions, éventuellement développées ou réductibles, dans une section d’instructions distincte. |
| InstallAgent | InstallAgent | Affiche un lien vers d’autres parties de Azure pour répondre à différentes exigences d’installation. |
OAuthForm
Ce composant nécessite que le OAuth2 type soit présent dans la auth propriété du modèle de connecteur de données.
"instructions": [
{
"type": "OAuthForm",
"parameters": {
"clientIdLabel": "Client ID",
"clientSecretLabel": "Client Secret",
"connectButtonLabel": "Connect",
"disconnectButtonLabel": "Disconnect"
}
}
]
Zone de texte
Voici quelques exemples du Textbox type . Ces exemples correspondent aux paramètres utilisés dans la section exemple auth de référence des connecteurs de données pour l’infrastructure de connecteur sans code. Pour chacun des 4 types, chacun a label, placeholderet name.
"instructions": [
{
"type": "Textbox",
"parameters": {
{
"label": "User name",
"placeholder": "User name",
"type": "text",
"name": "username"
}
}
},
{
"type": "Textbox",
"parameters": {
"label": "Secret",
"placeholder": "Secret",
"type": "password",
"name": "password"
}
}
]
ConnectionToggleButton
"instructions": [
{
"type": "ConnectionToggleButton",
"parameters": {
"connectLabel": "toggle",
"name": "toggle"
}
}
]
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 du tableau | Obligatoire | Type | Description |
|---|---|---|---|
| fillWith | ENUM | 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, workspaceName, primaryKey, MicrosoftAwsAccount, subscriptionId |
|
| Étiquette | Vrai | String | Définit le texte de l’étiquette au-dessus d’une zone de texte. |
| value | Vrai | String | Définit la valeur à présenter dans la zone de texte, prend en charge les espaces réservés. |
| rows | Lignes | Définit les lignes dans la zone d’interface utilisateur. Par défaut, définissez sur 1. | |
| wideLabel | Booléen | Détermine une étiquette large pour les chaînes longues. Par défaut, définissez sur false. |
Liste déroulante
{
"parameters": {
"label": "Select an option",
"name": "dropdown",
"options": [
{
"key": "Option 1",
"text": "option1"
},
{
"key": "Option 2",
"text": "option2"
}
],
"placeholder": "Select an option",
"isMultiSelect": false,
"required": true,
"defaultAllSelected": false
},
"type": "Dropdown"
}
| Field | Obligatoire | Type | Description |
|---|---|---|---|
| Étiquette | Vrai | String | Définit le texte de l’étiquette au-dessus de la liste déroulante. |
| name | Vrai | String | Définit le nom unique de la liste déroulante. Il est utilisé dans la configuration d’interrogation. |
| options | Vrai | Tableau | Définit la liste des options de la liste déroulante. |
| Espace réservé | String | Définit le texte de l’espace réservé pour la liste déroulante. | |
| isMultiSelect | Booléen | Détermine si plusieurs options peuvent être sélectionnées. Par défaut, définissez sur false. |
|
| required | Booléen | Si truela valeur est , la liste déroulante doit être remplie. |
|
| defaultAllSelected | Booléen | Si la valeur est true, toutes les options sont sélectionnées par défaut. |
Markdown
{
"parameters": {
"content": "## This is a Markdown section\n\nYou can use **bold** text, _italic_ text, and even [links](https://www.example.com)."
},
"type": "Markdown"
}
DataConnectorsGrid
{
"type": "DataConnectorsGrid",
"parameters": {
"mapping": [
{
"columnName": "Column 1",
"columnValue": "Value 1"
},
{
"columnName": "Column 2",
"columnValue": "Value 2"
}
],
"menuItems": [
"MyConnector"
]
}
}
| Field | Obligatoire | Type | Description |
|---|---|---|---|
| Cartographie | Vrai | Tableau | Définit le mappage des colonnes dans la grille. |
| menuItems | Tableau | Définit les éléments de menu de la grille. |
ContextPane
{
"type": "ContextPane",
"parameters": {
"isPrimary": true,
"label": "Add Account",
"title": "Add Account",
"subtitle": "Add Account",
"contextPaneType": "DataConnectorsContextPane",
"instructionSteps": [
{
"instructions": [
{
"type": "Textbox",
"parameters": {
"label": "Snowflake Account Identifier",
"placeholder": "Enter Snowflake Account Identifier",
"type": "text",
"name": "accountId",
"validations": {
"required": true
}
}
},
{
"type": "Textbox",
"parameters": {
"label": "Snowflake PAT",
"placeholder": "Enter Snowflake PAT",
"type": "password",
"name": "apikey",
"validations": {
"required": true
}
}
}
]
}
]
}
}
| Field | Obligatoire | Type | Description |
|---|---|---|---|
| title | Vrai | String | Titre du volet contextuel. |
| sous-titre | Vrai | String | Sous-titre du volet de contexte. |
| contextPaneType | Vrai | String | Type du volet de contexte. |
| instructionSteps | Vrai | Tableau instructionSteps |
Étapes d’instructions pour le volet contextuel. |
| Étiquette | String | Étiquette du volet de contexte. | |
| isPrimary | Booléen | Indique s’il s’agit du volet de contexte principal. |
InfoMessage
Voici un exemple de message d’informations inline :
En revanche, l’image suivante montre un message d’information qui n’est pas inclus :
| Valeur du tableau | Type | Description |
|---|---|---|
| text | String | 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 :
| Valeur du tableau | Obligatoire | Type | Description |
|---|---|---|---|
| title | Vrai | String | Définit le titre de l’étape d’instruction. |
| description | String | Texte descriptif facultatif. | |
| canCollapseAllSections | Booléen | Détermine si la section est un accordéon réductible ou non. | |
| noFxPadding | Booléen | Si truela valeur est , réduit le remplissage en hauteur pour économiser de l’espace. |
|
| Élargi | Booléen | Si true, s’affiche comme développé par défaut. |
Pour obtenir un exemple détaillé, consultez la configuration JSON pour le connecteur DNS Windows.
InstallAgent
Certains types InstallAgent apparaissent sous la forme d’un bouton, d’autres sous forme de lien. Voici des exemples des deux :
| Valeurs de tableau | Obligatoire | Type | Description |
|---|---|---|---|
| linkType | Vrai | ENUM | Détermine le type de lien, comme l’une des valeurs suivantes : InstallAgentOnWindowsVirtualMachineInstallAgentOnWindowsNonAzureInstallAgentOnLinuxVirtualMachineInstallAgentOnLinuxNonAzureOpenSyslogSettingsOpenCustomLogsSettingsOpenWafOpenAzureFirewall
OpenMicrosoftAzureMonitoring
OpenFrontDoors OpenCdnProfile AutomaticDeploymentCEF OpenAzureInformationProtection OpenAzureActivityLog OpenIotPricingModel OpenPolicyAssignment OpenAllAssignmentsBlade OpenCreateDataCollectionRule |
| policyDefinitionGuid | True lors de l’utilisation de OpenPolicyAssignment linkType. |
String | 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 | Pour les connecteurs basés sur des stratégies, définit le mode d’attribution comme l’une des valeurs suivantes : Initiative, Policy |
|
| dataCollectionRuleType | ENUM | Pour les connecteurs basés sur DCR, définit le type de règle de collecte de données comme SecurityEvent, ou ForwardEvent. |
Exemple de définition de connecteur de données
L’exemple suivant rassemble certains des composants définis dans cet article en tant que format de corps JSON à utiliser avec l’API créer ou mettre à jour une définition de connecteur de données.
Pour obtenir d’autres exemples de connecteurs connectorUiConfig de données CCF, consultez autres connecteurs de données CCF. Même les connecteurs utilisant le CCF hérité ont des exemples valides de création d’interface utilisateur.
{
"kind": "Customizable",
"properties": {
"connectorUiConfig": {
"title": "Example CCF Data Connector",
"publisher": "My Company",
"descriptionMarkdown": "This is an example of data connector",
"graphQueriesTableName": "ExampleConnectorAlerts_CL",
"graphQueries": [
{
"metricName": "Alerts received",
"legend": "My data connector alerts",
"baseQuery": "{{graphQueriesTableName}}"
},
{
"metricName": "Events received",
"legend": "My data connector events",
"baseQuery": "ASIMFileEventLogs"
}
],
"sampleQueries": [
{
"description": "All alert logs",
"query": "{{graphQueriesTableName}} \n | take 10"
}
],
"dataTypes": [
{
"name": "{{graphQueriesTableName}}",
"lastDataReceivedQuery": "{{graphQueriesTableName}} \n | summarize Time = max(TimeGenerated)\n | where isnotempty(Time)"
},
{
"name": "ASIMFileEventLogs",
"lastDataReceivedQuery": "ASIMFileEventLogs \n | summarize Time = max(TimeGenerated)\n | where isnotempty(Time)"
}
],
"connectivityCriteria": [
{
"type": "HasDataConnectors"
}
],
"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": "Example Connector API Key",
"description": "The connector API key username and password is required"
}
]
},
"instructionSteps": [
{
"title": "Connect My Connector to Microsoft Sentinel",
"description": "To enable the connector provide the required information below and click on Connect.\n>",
"instructions": [
{
"type": "Textbox",
"parameters": {
"label": "User name",
"placeholder": "User name",
"type": "text",
"name": "username"
}
},
{
"type": "Textbox",
"parameters": {
"label": "Secret",
"placeholder": "Secret",
"type": "password",
"name": "password"
}
},
{
"type": "ConnectionToggleButton",
"parameters": {
"connectLabel": "toggle",
"name": "toggle"
}
}
]
}
]
}
}
}