Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Um einen RestApiPoller Datenconnector mit dem Codeless Connector Framework (CCF) zu erstellen, verwenden Sie diesen Verweis als Ergänzung zur Microsoft Sentinel-REST-API für Datenconnectors-Dokumente .
Jede dataConnector stellt eine bestimmte Verbindung eines Microsoft Sentinel-Datenconnectors dar. Ein Datenconnector verfügt möglicherweise über mehrere Verbindungen, die Daten aus verschiedenen Endpunkten abrufen. Die json-Konfiguration, die mit diesem Referenzdokument erstellt wurde, wird verwendet, um die Bereitstellungsvorlage für den CCF-Datenconnector abzuschließen.
Weitere Informationen finden Sie unter Erstellen eines codelosen Connectors für Microsoft Sentinel.
Datenconnectors – Erstellen oder Aktualisieren
Verweisen Sie auf den Erstellungs- oder Aktualisierungsvorgang in den REST-API-Dokumenten, um die neueste stabile oder Vorschau-API-Version zu finden. Der Unterschied zwischen dem Erstellungs - und dem Aktualisierungsvorgang ist die Aktualisierung, die den etag-Wert erfordert.
PUT-Methode
https://management.azure.com/subscriptions/{{subscriptionId}}/resourceGroups/{{resourceGroupName}}/providers/Microsoft.OperationalInsights/workspaces/{{workspaceName}}/providers/Microsoft.SecurityInsights/dataConnectors/{{dataConnectorId}}?api-version={{apiVersion}}
URI-Parameter
Weitere Informationen zur neuesten API-Version finden Sie unter Data Connectors – Create or Update URI Parameters.
Anforderungstext
Der Anforderungstext für einen RestApiPoller CCF-Datenkonnektor weist die folgende Struktur auf:
{
"name": "{{dataConnectorId}}",
"kind": "RestApiPoller",
"etag": "",
"properties": {
"connectorDefinitionName": "",
"auth": {},
"request": {},
"response": {},
"paging": "",
"dcrConfig": ""
}
}
RestApiPoller
RestApiPoller stellt einen API Poller CCF-Datenconnector dar, in dem Sie Paging-, Autorisierungs- und Anforderungs-/Antwortnutzlasten für Ihre Datenquelle anpassen.
| Name | Erforderlich | Typ | Beschreibung |
|---|---|---|---|
| Name | Richtig | Zeichenfolge | Der eindeutige Name der Verbindung, die mit dem URI-Parameter übereinstimmen |
| Art | Richtig | Zeichenfolge | Muss gleich RestApiPoller sein. |
| etag | Globale eindeutige Kennung (GUID) | Lassen Sie leer, um neue Connectors zu erstellen. Bei Aktualisierungsvorgängen muss das Etag mit dem Etag (GUID) des vorhandenen Connectors übereinstimmen. | |
| properties.connectorDefinitionName | Zeichenfolge | Der Name der DataConnectorDefinition-Ressource, die die UI-Konfiguration des Datenconnectors definiert. Weitere Informationen finden Sie unter Data Connector Definition. | |
| Eigenschaften.Auth | Richtig | Geschachteltes JSON | Beschreibt die Authentifizierungseigenschaften zum Abfragen der Daten. Weitere Informationen finden Sie unter Authentifizierungskonfiguration. |
| Eigenschaften.bitten | Richtig | Geschachteltes JSON | Beschreibt die Anforderungsnutzdaten zum Abrufen der Daten, z. B. den API-Endpunkt. Weitere Informationen finden Sie unter Anforderungskonfiguration. |
| Eigenschaften.Antwort | Richtig | Geschachteltes JSON | Beschreibt das Antwortobjekt und die geschachtelte Nachricht, die beim Abrufen der Daten von der API zurückgegeben werden. Weitere Informationen finden Sie unter Antwortkonfiguration. |
| Eigenschaften.Seitenüberlagerung | Geschachteltes JSON | Beschreibt die Paginierungsnutzdaten beim Abfragen der Daten. Weitere Informationen finden Sie unter Auslagerungskonfiguration. | |
| Eigenschaften.dcrConfig | Geschachteltes JSON | Erforderliche Parameter, wenn die Daten an eine Datensammlungsregel (Data Collection Rule, DCR) gesendet werden. Weitere Informationen finden Sie unter DCR-Konfiguration. |
Authentifizierungskonfiguration
Die CCF unterstützt die folgenden Authentifizierungstypen:
Hinweis
Die CCF OAuth2-Implementierung unterstützt keine Clientzertifikatanmeldeinformationen.
Verwenden Sie als bewährte Methode Parameter im Authentifizierungsabschnitt anstelle von hartcodierenden Anmeldeinformationen. Weitere Informationen finden Sie unter Sichere vertrauliche Eingaben.
Um die Bereitstellungsvorlage zu erstellen, die auch Parameter verwendet, müssen Sie die Parameter in diesem Abschnitt mit einem zusätzlichen Start [escapeen. Dadurch können die Parameter einen Wert zuweisen, der auf der Interaktion des Benutzers mit dem Konnektor beruht. Weitere Informationen finden Sie unter Escapezeichen für Vorlagenausdrücke.
Damit die Anmeldeinformationen über die Benutzeroberfläche eingegeben werden können, benötigt connectorUIConfig der instructions Abschnitt die gewünschten Parameter. Weitere Informationen finden Sie in der Datenkonnektordefinitionsreferenz für das Codeless Connector Framework.
Standardauthentifizierung
| Feld | Erforderlich | Typ |
|---|---|---|
| Nutzername | Richtig | Zeichenfolge |
| Kennwort | Richtig | Zeichenfolge |
Beispiel für eine einfache Authentifizierung mithilfe von Parametern, die in connectorUIconfig:
"auth": {
"type": "Basic",
"UserName": "[[parameters('username')]",
"Password": "[[parameters('password')]"
}
APIKey
| Feld | Erforderlich | Typ | Beschreibung | Standardwert |
|---|---|---|---|---|
| ApiKey (Englisch) | Richtig | Zeichenfolge | Geheimer Benutzerschlüssel | |
| ApiKeyName | Zeichenfolge | Name des URI-Headers, der den ApiKey-Wert enthält | Authorization |
|
| ApiKeyIdentifier | Zeichenfolge | Zeichenfolgenwert, um das Token vorab zu stellen | token |
|
| IsApiKeyInPostPayload | Boolescher Wert | Senden eines geheimen Schlüssels im POST-Textkörper anstelle der Kopfzeile | false |
APIKey-Authentifizierungsbeispiele:
"auth": {
"type": "APIKey",
"ApiKey": "[[parameters('apikey')]",
"ApiKeyName": "X-MyApp-Auth-Header",
"ApiKeyIdentifier": "Bearer"
}
Dieses Beispiel führt zu dem aus Benutzereingaben definierten Geheimnis, das im folgenden Header gesendet wird: X-MyApp-Auth-Header: Bearer apikey
"auth": {
"type": "APIKey",
"ApiKey": "123123123",
}
In diesem Beispiel werden die Standardwerte und Ergebnisse im folgenden Header verwendet: Autorisierung: Token 123123123
"auth": {
"type": "APIKey",
"ApiKey": "123123123",
"ApiKeyName": ""
}
Da die ApiKeyName Eigenschaft explizit auf "" festgelegt ist, ist das Ergebnis der folgende Kopfzeile: Autorisierung: 123123123
OAuth2
Das Codeless Connector Framework unterstützt die OAuth 2.0-Autorisierungscodezuteilung und Clientanmeldeinformationen. Der Autorisierungscode-Genehmigungstyp wird von vertraulichen und öffentlichen Clients verwendet, um einen Autorisierungscode für ein Zugriffstoken austauschen. Nachdem der Benutzer über die Umleitungs-URL an den Client zurückkehrt, ruft die Anwendung den Autorisierungscode aus der URL ab und verwendet sie, um ein Zugriffstoken anzufordern.
| Feld | Erforderlich | Typ | Beschreibung |
|---|---|---|---|
| ClientId- | Richtig | Schnur | Die Client-ID |
| ClientSecret | Richtig | Schnur | Den geheimen Clientschlüssel |
| AuthorizationCode | True, wenn grantType = authorization_code |
Schnur | Wenn der Grant-Typ dieser Feldwert ist authorization_code , ist der Autorisierungscode, der von der Authentifizierungsfunktion zurückgegeben wird. |
| Umfang | True für authorization_code Den Grant-Typoptional für client_credentials den Grant-Typ |
Schnur | Eine durch Leerzeichen getrennte Liste von Bereichen für die Zustimmung des Benutzers. Weitere Informationen finden Sie unter OAuth2-Bereiche und -Berechtigungen. |
| Umleitungs-URL | True, wenn grantType = authorization_code |
Schnur | DIE URL für die Umleitung muss sein. https://portal.azure.com/TokenAuthorize/ExtensionName/Microsoft_Azure_Security_Insights |
| GrantType | Richtig | Schnur |
authorization_code oder client_credentials |
| TokenEndpoint | Richtig | Schnur | URL zum Austauschen von Code mit gültigem Token in authorization_code "Grant" oder "Client-ID" und "Geheimer Schlüssel" mit gültigem Token in client_credentials "Grant". |
| TokenEndpointHeaders | Objekt | Ein optionales Schlüsselwertobjekt zum Senden von benutzerdefinierten Headern an den Tokenserver | |
| TokenEndpointQueryParameters | Objekt | Ein optionales Schlüsselwertobjekt zum Senden von benutzerdefinierten Abfrageparametern an den Tokenserver | |
| Autorisierungsendpunkt | Richtig | Schnur | URL für die Zustimmung des Benutzers für authorization_code den Fluss |
| AuthorizationEndpointHeaders | Objekt | Ein optionales Schlüsselwertobjekt zum Senden von benutzerdefinierten Headern an den Authentifizierungsserver | |
| Autorisierungsendpunkt-Abfrageparameter | Objekt | Ein optionales Schlüsselwertpaar, das in der OAuth2-Autorisierungscodeflussanforderung verwendet wird |
Der Authentifizierungscodefluss dient zum Abrufen von Daten im Auftrag der Berechtigungen eines Benutzers und der Clientanmeldeinformationen zum Abrufen von Daten mit Anwendungsberechtigungen. Der Datenserver gewährt Zugriff auf die Anwendung. Da kein Benutzer im Clientanmeldeinformationsfluss vorhanden ist, ist kein Autorisierungsendpunkt erforderlich, nur ein Tokenendpunkt.
Beispiel: OAuth2-Erteilungstyp authorization_code
"auth": {
"type": "OAuth2",
"ClientId": "[[parameters('appId')]",
"ClientSecret": "[[parameters('appSecret')]",
"tokenEndpoint": "https://login.microsoftonline.com/{{tenantId}}/oauth2/v2.0/token",
"authorizationEndpoint": "https://login.microsoftonline.com/{{tenantId}}/oauth2/v2.0/authorize",
"authorizationEndpointHeaders": {},
"authorizationEndpointQueryParameters": {
"prompt": "consent"
},
"redirectUri": "https://portal.azure.com/TokenAuthorize/ExtensionName/Microsoft_Azure_Security_Insights",
"tokenEndpointHeaders": {
"Accept": "application/json",
"Content-Type": "application/x-www-form-urlencoded"
},
"TokenEndpointQueryParameters": {},
"scope": "openid offline_access some_scope",
"grantType": "authorization_code"
}
Beispiel: OAuth2-Erteilungstyp client_credentials
"auth": {
"type": "OAuth2",
"ClientId": "[[parameters('appId')]",
"ClientSecret": "[[parameters('appSecret')]",
"tokenEndpoint": "https://login.microsoftonline.com/{{tenantId}}/oauth2/v2.0/token",
"tokenEndpointHeaders": {
"Accept": "application/json",
"Content-Type": "application/x-www-form-urlencoded"
},
"TokenEndpointQueryParameters": {},
"scope": "openid offline_access some_scope",
"grantType": "client_credentials"
}
JWT
Die JSON-Webtokenauthentifizierung (JWT) unterstützt das Abrufen von Token über Benutzernamen-/Kennwortanmeldeinformationen und die Verwendung für API-Anforderungen.
Einfaches Beispiel:
"auth": {
"type": "JwtToken",
"userName": {
"key": "username",
"value": "[[parameters('UserName')]"
},
"password": {
"key": "password",
"value": "[[parameters('Password')]"
},
"TokenEndpoint": "https://token_endpoint.contoso.com",
"IsJsonRequest": true,
"JwtTokenJsonPath": "$.access_token"
}
Anmeldeinformationen im POST-Textkörper (Standard):
"auth": {
"type": "JwtToken",
"userName": {
"key": "username",
"value": "[[parameters('UserName')]"
},
"password": {
"key": "password",
"value": "[[parameters('Password')]"
},
"TokenEndpoint": "https://api.example.com/token",
"Headers": {
"Accept": "application/json",
"Content-Type": "application/json"
},
"IsCredentialsInHeaders": false,
"IsJsonRequest": true,
"JwtTokenJsonPath": "$.access_token"
}
Anmeldeinformationen in Kopfzeilen (Standardauthentifizierung):
"auth": {
"type": "JwtToken",
"userName": {
"key": "client_id",
"value": "[[parameters('ClientId')]"
},
"password": {
"key": "client_secret",
"value": "[[parameters('ClientSecret')]"
},
"TokenEndpoint": "https://api.example.com/oauth/token",
"Headers": {
"Accept": "application/json"
},
"IsCredentialsInHeaders": true,
"IsJsonRequest": true,
"JwtTokenJsonPath": "$.access_token",
"RequestTimeoutInSeconds": 30
}
Anmeldeinformationen in Kopfzeilen (Benutzertoken):
"auth": {
"type": "JwtToken",
"UserToken": "[[parameters('userToken')]",
"UserTokenPrepend": "Bearer",
"TokenEndpoint": "https://api.example.com/oauth/token",
"Headers": {
"Accept": "application/json"
},
"TokenEndpointHttpMethod": "GET",
"NoAccessTokenPrepend": true,
"JwtTokenJsonPath": "$.systemToken"
}
Authentifizierungsfluss:
Senden von Anmeldeinformationen zum
TokenEndpointAbrufen des JWT-Tokens- Wenn
IsCredentialsInHeaders: true: Sendet den Standardauthentifizierungsheader mit benutzername:password - Wenn
IsCredentialsInHeaders: false: Sendet Anmeldeinformationen im POST-Textkörper
- Wenn
Extrahieren eines Tokens mithilfe
JwtTokenJsonPathoder aus dem AntwortheaderVerwenden des Tokens in nachfolgenden API-Anforderungen mit
ApiKeyNameHeader
Eigenschaften:
| Feld | Erforderlich | Typ | Beschreibung |
|---|---|---|---|
| type | Richtig | Schnur | Muss gleich JwtToken sein. |
| Nutzername | True (wenn userToken nicht verwendet wird) | Objekt | Schlüssel-Wert-Paar für Benutzernamenanmeldeinformationen. Wenn userName sie password in der Kopfzeilenanforderung gesendet werden, geben Sie die value Eigenschaft mit dem Benutzernamen an. Wenn userName und password gesendet in der Textkörperanforderung, geben Sie die Key und Value |
| Passwort | True (wenn userToken nicht verwendet wird) | Objekt | Schlüssel-Wert-Paar für Kennwortanmeldeinformationen. Wenn userName sie password in der Kopfzeilenanforderung gesendet werden, geben Sie die value Eigenschaft mit dem Benutzernamen an. Wenn userName und password gesendet in der Textkörperanforderung, geben Sie die Key und Value |
| userToken | True (wenn "userName " nicht verwendet wird) | Schnur | Vom Client generiertes Benutzertoken zum Abrufen des Systemtokens für die Authentifizierung |
| UserTokenPrepend | Falsch | Schnur | Vorangestellter Text vor dem Token. Beispiel: Bearer |
| NoAccessTokenPrepend | Falsch | Boolescher Typ (Boolean) | Zugriffskennzeichnung zum Angeben des Tokens sollte nichts vorangestellt werden |
| TokenEndpointHttpMethod | Falsch | Schnur | HTTP-Methode zum Tokenendpunkt. Kann Get oder Post sein. Standard: Post |
| TokenEndpoint | Richtig | Schnur | URL-Endpunkt zum Abrufen des JWT-Tokens |
| IsCredentialsInHeaders | Boolescher Typ (Boolean) | Senden von Anmeldeinformationen als Standardauthentifizierungsheader (true) und POST-Textkörper (false). Standard: false |
|
| IsJsonRequest | Boolescher Typ (Boolean) | Senden Sie die Anfrage als JSON (Header Content-Type = application/json) vs. formcodiert (Header Content-Type = application/x-www-form-urlencoded). Standard: false |
|
| JwtTokenJsonPath | Schnur | JSONPath zum Extrahieren des Tokens aus der Antwort (z. B. "$.access_token") |
|
| JwtTokenInResponseHeader | Boolescher Typ (Boolean) | Extrahieren Sie das Token aus dem Antwortheader im Vergleich zum Textkörper. Standard: false |
|
| JwtTokenHeaderName | Schnur | Headername, wenn sich das Token im Antwortheader befindet. Standard: "Authorization" |
|
| JwtTokenIdentifier | Schnur | Bezeichner, der zum Extrahieren des JWT aus einer präfixierten Tokenzeichenfolge verwendet wird | |
| QueryParameters | Objekt | Benutzerdefinierte Abfrageparameter, die beim Senden der Anforderung an den Tokenendpunkt eingeschlossen werden sollen | |
| Kopfzeilen | Objekt | Benutzerdefinierte Header, die beim Senden der Anforderung an den Tokenendpunkt eingeschlossen werden sollen | |
| RequestTimeoutInSeconds | Ganzzahl | Anforderungstimeout in Sekunden. Standard: 100, Max 180 |
Authentifizierungsfluss:
Senden von Anmeldeinformationen zum
TokenEndpointAbrufen des JWT-Tokens- Wenn
IsCredentialsInHeaders: true: Sendet den Standardauthentifizierungsheader mit benutzername:password - Wenn
IsCredentialsInHeaders: false: Sendet Anmeldeinformationen im POST-Textkörper
- Wenn
Extrahieren eines Tokens mithilfe
JwtTokenJsonPathoder aus dem AntwortheaderVerwenden des Tokens in nachfolgenden API-Anforderungen mit
ApiKeyNameHeader
Hinweis
Limitations:
- Erfordert die Authentifizierung mit Benutzername/Kennwort für die Tokenakquise
- Unterstützt keine API-schlüsselbasierten Tokenanforderungen.
- Benutzerdefinierte Headerauthentifizierung (ohne Benutzername/Kennwort) wird nicht unterstützt.
Anforderungskonfiguration
Der Anforderungsabschnitt definiert, wie der CCF-Datenconnector Anforderungen an Ihre Datenquelle sendet, z. B. den API-Endpunkt und wie oft dieser Endpunkt abgerufen werden soll.
| Feld | Erforderlich | Typ | Beschreibung |
|---|---|---|---|
| ApiEndpoint | Richtig | Schnur | URL für Remoteserver. Definiert den Endpunkt, aus dem Daten gepullt werden sollen. |
| RateLimitQPS | Ganzzahl | Definiert die Anzahl der Aufrufe oder Abfragen, die in einer Sekunde zulässig sind. | |
| RateLimitConfig | Objekt | Definiert die Rate-Limit-Konfiguration für die RESTful API. Siehe Beispiel | |
| QueryWindowInMin | Ganzzahl | Definiert das verfügbare Abfragefenster in Minuten. Der Mindestwert beträgt 1 Minute. Die Standardeinstellung ist 5 Minuten. | |
| HttpMethod | Schnur | Definiert die API-Methode: GET(Standard) oder POST |
|
| QueryTimeFormat | Schnur | Definiert das Datums- und Uhrzeitformat, das der Endpunkt (Remoteserver) erwartet. Die CCF verwendet das aktuelle Datum und die aktuelle Uhrzeit, wo diese Variable verwendet wird. Mögliche Werte sind die Konstanten: UnixTimestamp, UnixTimestampInMills oder eine andere gültige Darstellung der Datumszeit, z. B.: yyyy-MM-dd, MM/dd/yyyy HH:mm:ssStandard ist ISO 8601 UTC |
|
| RetryCount | Ganze Zahl (1...6) | Definiert die 1 Wiederholungsversuche6, die von einem Fehler wiederhergestellt werden dürfen. Der Standardwert ist 3. |
|
| TimeoutInSeconds | Ganze Zahl (1...180) | Definiert das Anforderungstimeout in Sekunden. Der Standardwert ist 20 |
|
| IsPostPayloadJson | Boolescher Typ (Boolean) | Bestimmt, ob die POST-Nutzdaten im JSON-Format vorliegen. Der Standardwert ist false |
|
| Kopfzeilen | Objekt | Schlüsselwertpaare, die die Anforderungsheader definieren. | |
| QueryParameters | Objekt | Schlüsselwertpaare, die die Anforderungsabfrageparameter definieren. | |
| StartTimeAttributeName | True, wenn EndTimeAttributeName festgelegt wird |
Schnur | Definiert den Abfrageparameternamen für die Startzeit der Abfrage. Siehe Beispiel |
| EndTimeAttributeName | True, wenn StartTimeAttributeName festgelegt wird |
Schnur | Definiert den Abfrageparameternamen für die Endzeit der Abfrage. |
| QueryTimeIntervalAttributeName | Schnur | Wenn für den Endpunkt ein spezielles Format zum Abfragen der Daten in einem Zeitrahmen erforderlich ist, verwenden Sie diese Eigenschaft mit den QueryTimeIntervalPrepend Parametern und den QueryTimeIntervalDelimiter Parametern. Siehe Beispiel |
|
| QueryTimeIntervalPrepend | True, wenn QueryTimeIntervalAttributeName festgelegt wird |
Schnur | Siehe QueryTimeIntervalAttributeName. |
| QueryTimeIntervalDelimiter | True, wenn QueryTimeIntervalAttributeName festgelegt wird |
Schnur | Siehe QueryTimeIntervalAttributeName. |
| QueryParametersTemplate | Schnur | Abfragevorlage, die beim Übergeben von Parametern in erweiterten Szenarien verwendet werden soll. br>Beispiel: "queryParametersTemplate": "{'cid': 1234567, 'cmd': 'reporting', 'format': 'siem', 'data': { 'from': '{_QueryWindowStartTime}', 'to': '{_QueryWindowEndTime}'}, '{_APIKeyName}': '{_APIKey}'}" |
Wenn die API komplexe Parameter erfordert, verwenden Sie die queryParameters oder queryParametersTemplate die einige integrierte Variablen enthalten.
| Integrierte Variable | für die Verwendung in queryParameters |
für die Verwendung in queryParametersTemplate |
|---|---|---|
_QueryWindowStartTime |
ja | ja |
_QueryWindowEndTime |
ja | ja |
_APIKeyName |
Nein | ja |
_APIKey |
Nein | ja |
StartTimeAttributeName-Beispiel
Betrachten Sie das folgende Beispiel:
StartTimeAttributeName=fromEndTimeAttributeName=untilApiEndpoint=https://www.example.com
Die an den Remoteserver gesendete Abfrage lautet: https://www.example.com?from={QueryTimeFormat}&until={QueryTimeFormat + QueryWindowInMin}
QueryTimeIntervalAttributeName-Beispiel
Betrachten Sie das folgende Beispiel:
QueryTimeIntervalAttributeName=intervalQueryTimeIntervalPrepend=time:QueryTimeIntervalDelimiter=..ApiEndpoint=https://www.example.com
Die an den Remoteserver gesendete Abfrage lautet: https://www.example.com?interval=time:{QueryTimeFormat}..{QueryTimeFormat + QueryWindowInMin}
Beispiel RateLimitConfig
Betrachten Sie das folgende Beispiel:
ApiEndpoint=https://www.example.com
"rateLimitConfig": {
"evaluation": {
"checkMode": "OnlyWhen429"
},
"extraction": {
"source": "CustomHeaders",
"headers": {
"limit": {
"name": "X-RateLimit-Limit",
"format": "Integer"
},
"remaining": {
"name": "X-RateLimit-Remaining",
"format": "Integer"
},
"reset": {
"name": "X-RateLimit-RetryAfter",
"format": "UnixTimeSeconds"
}
}
},
"retryStrategy": {
"useResetOrRetryAfterHeaders": true
}
}
Wenn die Antwort Rate-Limit-Header enthält, kann der Connector diese Informationen nutzen, um seine Anfragerate anzupassen.
Anfordern von Beispielen mithilfe von Microsoft Graph als Datenquellen-API
In diesem Beispiel werden Nachrichten mit einem Filterabfrageparameter abfragen. Weitere Informationen finden Sie unter Microsoft Graph-API-Abfrageparameter.
"request": {
"apiEndpoint": "https://graph.microsoft.com/v1.0/me/messages",
"httpMethod": "Get",
"queryTimeFormat": "yyyy-MM-ddTHH:mm:ssZ",
"queryWindowInMin": 10,
"retryCount": 3,
"rateLimitQPS": 20,
"headers": {
"Accept": "application/json",
"User-Agent": "Example-app-agent"
},
"QueryTimeIntervalAttributeName": "filter",
"QueryTimeIntervalPrepend": "receivedDateTime gt ",
"QueryTimeIntervalDelimiter": " and receivedDateTime lt "
}
Im vorherigen Beispiel wird eine GET Anforderung an https://graph.microsoft.com/v1.0/me/messages?filter=receivedDateTime gt {time of request} and receivedDateTime lt 2019-09-01T17:00:00.0000000. Der Zeitstempel wird für jedes queryWindowInMin Mal aktualisiert.
Die gleichen Ergebnisse werden in diesem Beispiel erzielt:
"request": {
"apiEndpoint": "https://graph.microsoft.com/v1.0/me/messages",
"httpMethod": "Get",
"queryTimeFormat": "yyyy-MM-ddTHH:mm:ssZ",
"queryWindowInMin": 10,
"retryCount": 3,
"rateLimitQPS": 20,
"headers": {
"Accept": "application/json",
},
"queryParameters": {
"filter": "receivedDateTime gt {_QueryWindowStartTime} and receivedDateTime lt {_QueryWindowEndTime}"
}
}
Eine weitere Option ist, wenn die Datenquelle 2 Abfrageparameter erwartet, eine für die Startzeit und eine für die Endzeit.
Beispiel:
"request": {
"apiEndpoint": "https://graph.microsoft.com/v1.0/me/calendarView",
"httpMethod": "Get",
"queryTimeFormat": "yyyy-MM-ddTHH:mm:ssZ",
"queryWindowInMin": 10,
"retryCount": 3,
"rateLimitQPS": 20,
"headers": {
"Accept": "application/json",
},
"StartTimeAttributeName": "startDateTime",
"EndTimeAttributeName": "endDateTime",
}
Dadurch wird eine GET Anforderung an https://graph.microsoft.com/me/calendarView?startDateTime=2019-09-01T09:00:00.0000000&endDateTime=2019-09-01T17:00:00.0000000
Verwenden Sie QueryParametersTemplatefür komplexe Abfragen . Im nächsten Beispiel wird eine POST Anforderung mit Parametern im Textkörper gesendet.
Beispiel:
"request": {
"apiEndpoint": "https://graph.microsoft.com/v1.0/me/messages",
"httpMethod": "POST",
"queryTimeFormat": "yyyy-MM-ddTHH:mm:ssZ",
"queryWindowInMin": 10,
"retryCount": 3,
"rateLimitQPS": 20,
"headers": {
"Accept": "application/json",
},
"isPostPayloadJson": true,
"queryParametersTemplate": "{\"query":"TableName | where createdTimestamp between (datetime({_QueryWindowStartTime}) .. datetime({_QueryWindowEndTime}))\"}"
}
Antwortkonfiguration
Definieren Sie die Antwortbehandlung Ihres Datenconnectors mit den folgenden Parametern:
| Feld | Erforderlich | Typ | Beschreibung |
|---|---|---|---|
| EventsJsonPaths | Richtig | Liste der Zeichenfolgen | Definiert den Pfad zur Meldung in der JSON-Antwort. Ein JSON-Pfadausdruck gibt einen Pfad zu einem Element oder einer Gruppe von Elementen in einer JSON-Struktur an. |
| SuccessStatusJsonPath | Schnur | Definiert den Pfad zur Erfolgsmeldung in der JSON-Antwort. Wenn dieser Parameter definiert ist, sollte der SuccessStatusValue Parameter ebenfalls definiert werden. |
|
| SuccessStatusValue | Schnur | Definiert den Pfad zum Erfolgsmeldungswert in der JSON-Antwort. | |
| IsGzipCompressed | Boolescher Typ (Boolean) | Bestimmt, ob die Antwort in einer Gzip-Datei komprimiert wird. | |
| Format | Richtig | Schnur |
json oder csv oder xml |
| CompressionAlgo | Schnur | Der Komprimierungsalgorithmus, entweder multi-gzip oder deflate. Für den Gzip-Komprimierungsalgorithmus konfigurieren Sie IsGzipCompressed einfach einen True Wert für diesen Parameter. |
|
| CsvDelimiter | Schnur | Wenn das Antwortformat CSV ist und Sie das standardmäßige CSV-Trennzeichen von "," |
|
| HasCsvBoundary | Boolescher Typ (Boolean) | Angeben, ob CSV-Daten eine Grenze haben | |
| HasCsvHeader | Boolescher Typ (Boolean) | Geben Sie an, ob CSV-Daten über eine Kopfzeile verfügen. Der Standardwert ist True |
|
| CsvEscape | Schnur | Escapezeichen für eine Feldgrenze, Standard ist "Beispielsweise erfordert eine CSV-Datei mit Kopfzeilen id,name,avg und einer Datenzeile, die Leerzeichen enthält, wie 1,"my name",5.5 die " Feldgrenze. |
|
| ConvertChildPropertiesToArray | Boolescher Typ (Boolean) | Sonderfall, in dem der Remoteserver ein Objekt anstelle einer Liste von Ereignissen zurückgibt, in denen jede Eigenschaft Daten enthält. |
Hinweis
Der CSV-Formattyp wird von der RFC4180 Spezifikation analysiert.
Beispiele für die Antwortkonfiguration
Es wird eine Serverantwort im JSON-Format erwartet, wobei die angeforderten Daten im Eigenschaftswert enthalten sind. Der Status der Antworteigenschaft gibt an, dass die Daten nur aufgenommen werden, wenn der Wert istsuccess.
"response": {
"EventsJsonPaths ": ["$.value"],
"format": "json",
"SuccessStatusJsonPath": "$.status",
"SuccessStatusValue": "success",
"IsGzipCompressed": true
}
Die erwartete Antwort in diesem Beispiel bereitet sich auf eine CSV ohne Header vor.
"response": {
"EventsJsonPaths ": ["$"],
"format": "csv",
"HasCsvHeader": false
}
Auslagerungskonfiguration
Wenn die Datenquelle die gesamte Antwortnutzlast nicht gleichzeitig senden kann, muss der CCF-Datenconnector wissen, wie Teile der Daten auf Antwortseiten empfangen werden. Die paging-Typen, aus denen Sie wählen können, sind:
| Seitentyp | Entscheidungsfaktor |
|---|---|
| Enthält die API-Antwort Links zu nächsten und vorherigen Seiten? | |
| Verfügt die API-Antwort über ein Token oder Cursor für die nächsten und vorherigen Seiten? | |
| Unterstützt die API-Antwort einen Parameter für die Anzahl der Objekte, die beim Paging übersprungen werden sollen? | |
| Unterstützt die API-Antwort einen Parameter für die Anzahl der zurückzugebenden Objekte? |
Konfigurieren von LinkHeader oder PersistentLinkHeader
Der am häufigsten verwendete Pagingtyp ist, wenn eine Serverdatenquelle-API URLs für die nächsten und vorherigen Seiten von Daten bereitstellt. Weitere Informationen zur Spezifikation des Linkheaders finden Sie unter RFC 5988.
LinkHeader Paging bedeutet, dass die API-Antwort eine der folgenden Elemente umfasst:
- der
LinkHTTP-Antwortheader - oder einen JSON-Pfad, um den Link aus dem Antworttext abzurufen.
PersistentLinkHeader Paging hat die gleichen Eigenschaften wie LinkHeader, außer der Linkheader bleibt im Back-End-Speicher erhalten. Diese Option ermöglicht das Paging von Verknüpfungen über Abfragefenster hinweg. Beispielsweise unterstützen einige APIs keine Start- oder Endzeiten der Abfrage. Stattdessen unterstützen sie einen serverseitigen Cursor. Beständige Seitentypen können verwendet werden, um den serverseitigen Cursor zu merken. Weitere Informationen finden Sie unter Was ist ein Cursor?.
Hinweis
Es kann nur eine Abfrage für den Connector mit PersistentLinkHeader ausgeführt werden, um Rennbedingungen auf dem serverseitigen Cursor zu vermeiden. Dies kann sich auf die Latenz auswirken.
| Feld | Erforderlich | Typ | Beschreibung |
|---|---|---|---|
| LinkHeaderTokenJsonPath | Falsch | Schnur | Verwenden Sie diese Eigenschaft, um anzugeben, wo der Wert im Antworttext abgerufen werden soll. Wenn die Datenquelle beispielsweise den folgenden JSON-Code zurückgibt: { nextPage: "foo", value: [{data}]}LinkHeaderTokenJsonPath$.nextPage |
| Pagesize | Falsch | Ganzzahl | Anzahl von Ereignissen pro Seite |
| PageSizeParameterName | Falsch | Schnur | Abfrageparametername für die Seitengröße |
| PagingInfoPlacement | Falsch | Schnur | Wie Paging-Informationen ausgefüllt werden. Akzeptiert entweder "QueryString" oder "RequestBody" |
| PagingQueryParamOnly | Falsch | Boolescher Typ (Boolean) | Wenn auf true gesetzt, werden alle anderen Abfrageparameter außer Paging-Abfrageparametern weggelassen. |
Im Folgenden finden Sie einige Beispiele:
"paging": {
"pagingType": "LinkHeader",
"linkHeaderTokenJsonPath" : "$.metadata.links.next"
}
"paging": {
"pagingType" : "PersistentLinkHeader",
"pageSizeParameterName" : "limit",
"pageSize" : 500
}
Konfigurieren von NextPageUrl
NextPageUrl Paging bedeutet, dass die API-Antwort einen komplexen Link im Antworttext LinkHeaderähnlich enthält, aber die URL ist im Antworttext anstelle des Headers enthalten.
| Feld | Erforderlich | Typ | Beschreibung |
|---|---|---|---|
| Pagesize | Falsch | Ganzzahl | Anzahl von Ereignissen pro Seite |
| PageSizeParameterName | Falsch | Schnur | Abfrageparametername für die Seitengröße |
| NextPageUrl | Falsch | Schnur | Nur, wenn der Connector für Coralogix-API gilt |
| NextPageUrlQueryParameters | Falsch | Object Key-Wertpaare – Hinzufügen eines benutzerdefinierten Abfrageparameters zu jeder Anforderung für die nächste Seite | |
| NextPageParaName | Falsch | Schnur | Bestimmt den Namen der nächsten Seite in der Anforderung. |
| HasNextFlagJsonPath | Falsch | Schnur | Definiert den Pfad zum HasNextPage-Flag-Attribut. |
| NextPageRequestHeader | Falsch | Schnur | Bestimmt den Headernamen der nächsten Seite in der Anforderung. |
| NextPageUrlQueryParametersTemplate | Falsch | Schnur | Nur, wenn der Connector für Coralogix-API gilt |
| PagingInfoPlacement | Falsch | Schnur | Wie Paging-Informationen ausgefüllt werden. Akzeptiert entweder "QueryString" oder "RequestBody" |
| PagingQueryParamOnly | Falsch | Boolescher Typ (Boolean) | Wenn auf true gesetzt, werden alle anderen Abfrageparameter außer Paging-Abfrageparametern weggelassen. |
Beispiel:
"paging": {
"pagingType" : "NextPageUrl",
"nextPageTokenJsonPath" : "$.data.repository.pageInfo.endCursor",
"hasNextFlagJsonPath" : "$.data.repository.pageInfo.hasNextPage",
"nextPageUrl" : "https://api.github.com/graphql",
"nextPageUrlQueryParametersTemplate" : "{'query':'query{repository(owner:\"xyz\")}"
}
Konfigurieren von NextPageToken oder PersistentToken
NextPageToken Die Paginierung verwendet ein Token (ein Hash oder ein Cursor), der den Status der aktuellen Seite darstellt. Das Token ist in der API-Antwort enthalten, und der Client fügt es an die nächste Anforderung an, um die nächste Seite abzurufen. Diese Methode wird häufig verwendet, wenn der Server den genauen Zustand zwischen Anforderungen beibehalten muss.
PersistentToken Paginierung verwendet ein Token, das serverseitig beibehalten wird. Der Server merkt sich das letzte vom Client abgerufene Token und stellt das nächste Token in nachfolgenden Anforderungen bereit. Der Client wird weiterhin an der Stelle fortgesetzt, an der er aufgehört hat, auch wenn er später neue Anforderungen sendet.
| Feld | Erforderlich | Typ | Beschreibung |
|---|---|---|---|
| Pagesize | Falsch | Ganzzahl | Anzahl von Ereignissen pro Seite |
| PageSizeParameterName | Falsch | Zeichenfolge | Abfrageparametername für die Seitengröße |
| NextPageTokenJsonPath | Falsch | Zeichenfolge | JSON-Pfad für das nächste Seitentoken im Antworttext. |
| NextPageTokenResponseHeader | Falsch | Zeichenfolge | Wenn NextPageTokenJsonPath sie leer ist, verwenden Sie das Token in diesem Headernamen für die nächste Seite. |
| NextPageParaName | Falsch | Zeichenfolge | Bestimmt den Namen der nächsten Seite in der Anforderung. |
| HasNextFlagJsonPath | Falsch | Zeichenfolge | Definiert den Pfad zu einem HasNextPage-Flag-Attribut , wenn ermittelt wird, ob mehr Seiten in der Antwort verbleiben. |
| NextPageRequestHeader | Falsch | Zeichenfolge | Bestimmt den Headernamen der nächsten Seite in der Anforderung. |
| PagingInfoPlacement | Falsch | Schnur | Wie Paging-Informationen ausgefüllt werden. Akzeptiert entweder "QueryString" oder "RequestBody" |
| PagingQueryParamOnly | Falsch | Boolescher Typ (Boolean) | Wenn auf true gesetzt, werden alle anderen Abfrageparameter außer Paging-Abfrageparametern weggelassen. |
Beispiele:
"paging": {
"pagingType" : "NextPageToken",
"nextPageRequestHeader" : "ETag",
"nextPageTokenResponseHeader" : "ETag"
}
"paging": {
"pagingType" : "PersistentToken",
"nextPageParaName" : "gta",
"nextPageTokenJsonPath" : "$.alerts[-1:]._id"
}
Konfigurieren des Offsets
Offset Die Paginierung gibt die Anzahl der zu überspringenden Seiten und einen Grenzwert für die Anzahl der Ereignisse an, die pro Seite in der Anforderung abgerufen werden sollen. Clients rufen einen bestimmten Bereich von Elementen aus dem Dataset ab.
| Feld | Erforderlich | Typ | Beschreibung |
|---|---|---|---|
| Pagesize | Falsch | Ganzzahl | Anzahl von Ereignissen pro Seite |
| PageSizeParameterName | Falsch | Schnur | Abfrageparametername für die Seitengröße |
| OffsetParaName | Falsch | Schnur | Der name des nächsten Anforderungsabfrageparameters. Der CCF berechnet den Offsetwert für jede Anforderung (alle ereignisse, die aufgenommen wurden + 1) |
| PagingInfoPlacement | Falsch | Schnur | Wie Paging-Informationen ausgefüllt werden. Akzeptiert entweder "QueryString" oder "RequestBody" |
| PagingQueryParamOnly | Falsch | Boolescher Typ (Boolean) | Wenn auf true gesetzt, werden alle anderen Abfrageparameter außer Paging-Abfrageparametern weggelassen. |
Beispiel:
"paging": {
"pagingType": "Offset",
"offsetParaName": "offset",
"pageSize": 50,
"pagingQueryParamOnly": true,
"pagingInfoPlacement": "QueryString"
}
Konfigurieren von CountBasedPaging
CountBasedPaging ermöglicht dem Client, die Anzahl der Elemente anzugeben, die in der Antwort zurückgegeben werden sollen. Dies ist nützlich für APIs, die die Paginierung basierend auf einem Anzahlparameter als Teil der Antwortnutzlast unterstützen.
| Feld | Erforderlich | Typ | Beschreibung |
|---|---|---|---|
| pageNumberParaName | Richtig | Schnur | Parametername der Seitenzahl in HTTP-Anforderung |
| Pagesize | Falsch | Ganzzahl | Anzahl von Ereignissen pro Seite |
| ZeroBasedIndexing | Falsch | Boolescher Typ (Boolean) | Kennzeichen, das angibt, ob die Anzahl nullbasiert ist |
| HasNextFlagJsonPath | Falsch | Schnur | JSON-Pfad des Flags in HTTP-Antwortnutzlast, um anzugeben, dass weitere Seiten vorhanden sind |
| TotalResultsJsonPath | Falsch | Schnur | JSON-Pfad der Gesamtanzahl der Ergebnisse in der HTTP-Antwortnutzlast |
| PageNumberJsonPath | Falsch | Schnur | Erforderlich, wenn totalResultsJsonPath bereitgestellt wird. JSON-Pfad der Seitenzahl in DER HTTP-Antwortnutzlast |
| PageCountJsonPath | Falsch | Schnur | Erforderlich, wenn totalResultsJsonPath bereitgestellt wird. JSON-Pfad der Seitenanzahl in HTTP-Antwortnutzlast |
| PagingInfoPlacement | Falsch | Schnur | Wie Paging-Informationen ausgefüllt werden. Akzeptiert entweder "QueryString" oder "RequestBody" |
| PagingQueryParamOnly | Falsch | Boolescher Typ (Boolean) | Wenn auf true gesetzt, werden alle anderen Abfrageparameter außer Paging-Abfrageparametern weggelassen. |
Beispiel:
"paging": {
"pagingType" : "CountBasedPaging",
"pageNumberParaName" : "page",
"pageSize" : 10,
"zeroBasedIndexing" : true,
"hasNextFlagJsonPath" : "$.hasNext",
"totalResultsJsonPath" : "$.totalResults",
"pageNumberJsonPath" : "$.pageNumber",
"pageCountJsonPath" : "$.pageCount"
}
DCR-Konfiguration
| Feld | Erforderlich | Typ | Beschreibung |
|---|---|---|---|
| DataCollectionEndpoint | Richtig | Schnur | DCE (Data Collection Endpoint) zum Beispiel: https://example.ingest.monitor.azure.com. |
| DataCollectionRuleImmutableId | Richtig | Schnur | Die unveränderliche DCR-ID. Suchen Sie sie, indem Sie die DCR-Erstellungsantwort anzeigen oder die DCR-API verwenden. |
| StreamName | Richtig | Zeichenfolge | Dieser Wert ist der streamDeclaration im DCR definierte Wert (Präfix muss mit "Benutzerdefiniert") beginnen. |
Beispiel für einen CCF-Datenkonnektor
Hier ist ein Beispiel für alle Komponenten des CCF-Datenkonnektors JSON zusammen.
{
"kind": "RestApiPoller",
"properties": {
"connectorDefinitionName": "ConnectorDefinitionExample",
"dcrConfig": {
"streamName": "Custom-ExampleConnectorInput",
"dataCollectionEndpoint": "https://example-dce-sbsr.location.ingest.monitor.azure.com",
"dataCollectionRuleImmutableId": "dcr-32_character_hexadecimal_id"
},
"dataType": "ExampleLogs",
"auth": {
"type": "Basic",
"password": "[[parameters('username')]",
"userName": "[[parameters('password')]"
},
"request": {
"apiEndpoint": "https://rest.contoso.com/example",
"rateLimitQPS": 10,
"rateLimitConfig": {
"evaluation": {
"checkMode": "OnlyWhen429"
},
"extraction": {
"source": "CustomHeaders",
"headers": {
"limit": {
"name": "X-RateLimit-Limit",
"format": "Integer"
},
"remaining": {
"name": "X-RateLimit-Remaining",
"format": "Integer"
},
"reset": {
"name": "X-RateLimit-RetryAfter",
"format": "UnixTimeSeconds"
}
}
},
"retryStrategy": {
"useResetOrRetryAfterHeaders": true
}
},
"queryWindowInMin": 5,
"httpMethod": "POST",
"queryTimeFormat": "UnixTimestamp",
"startTimeAttributeName": "t0",
"endTimeAttributeName": "t1",
"retryCount": 3,
"timeoutInSeconds": 60,
"headers": {
"Accept": "application/json",
"User-Agent": "Example-app-agent"
}
},
"paging": {
"pagingType": "LinkHeader",
"pagingInfoPlacement": "RequestBody",
"pagingQueryParamOnly": true
},
"response": {
"eventsJsonPaths": ["$"]
}
}
}