Freigeben über


RestApiPoller-Datenkonnektorreferenz für das Codeless Connector Framework

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.

Name Beschreibung
dataConnectorId Die Datenconnector-ID muss ein eindeutiger Name sein und ist identisch mit dem name Parameter im Anforderungstext.
resourceGroupName Der Name der Ressourcengruppe, nicht die Groß-/Kleinschreibung.
subscriptionId Hierbei handelt es sich um die ID des Zielabonnements.
workspaceName Der Name des Arbeitsbereichs, nicht die ID.
RegEx-Muster: ^[A-Za-z0-9][A-Za-z0-9-]+[A-Za-z0-9]$
API-Version Hierbei handelt es sich um die für diesen Vorgang zu verwendende API-Version.

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-Typ
optional 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:

  1. Senden von Anmeldeinformationen zum TokenEndpoint Abrufen des JWT-Tokens

    • Wenn IsCredentialsInHeaders: true: Sendet den Standardauthentifizierungsheader mit benutzername:password
    • Wenn IsCredentialsInHeaders: false: Sendet Anmeldeinformationen im POST-Textkörper
  2. Extrahieren eines Tokens mithilfe JwtTokenJsonPath oder aus dem Antwortheader

  3. Verwenden des Tokens in nachfolgenden API-Anforderungen mit ApiKeyName Header

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:

  1. Senden von Anmeldeinformationen zum TokenEndpoint Abrufen des JWT-Tokens

    • Wenn IsCredentialsInHeaders: true: Sendet den Standardauthentifizierungsheader mit benutzername:password
    • Wenn IsCredentialsInHeaders: false: Sendet Anmeldeinformationen im POST-Textkörper
  2. Extrahieren eines Tokens mithilfe JwtTokenJsonPath oder aus dem Antwortheader

  3. Verwenden des Tokens in nachfolgenden API-Anforderungen mit ApiKeyName Header

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:ss
Standard 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 = from
  • EndTimeAttributeName = until
  • ApiEndpoint = 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 = interval
  • QueryTimeIntervalPrepend = 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 Link HTTP-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": ["$"]
      }
   }
}