RestApiPoller-Datenconnectorreferenz für das Codeless Connector Framework

Sie können einen RestApiPoller Datenconnector mit dem Codeless Connector Framework (CCF) erstellen, indem Sie diesen Artikel als Ergänzung zur Dokumentation zur Microsoft Sentinel REST-API für Datenconnectors verwenden.

Jeder Datenconnector stellt eine bestimmte Verbindung eines Microsoft Sentinel-Datenconnectors dar. Ein Datenconnector kann über mehrere Verbindungen verfügen, die Daten von verschiedenen Endpunkten abrufen. Sie können die Bereitstellungsvorlage für den CCF-Datenconnector mithilfe der JSON-Konfiguration abschließen, die Sie mit diesem Artikel erstellen.

Weitere Informationen finden Sie unter Erstellen eines Connectors ohne Code für Microsoft Sentinel.

Erstellen oder Aktualisieren von Datenconnectors

Suchen Sie die neueste stabile oder Vorschauversion der API, indem Sie auf die create Vorgänge oder update in der REST-API-Dokumentation verweisen. Der Unterschied zwischen den Vorgängen create und update besteht darin, dass update der etag -Wert erforderlich ist.

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 Datenconnectors: Erstellen oder Aktualisieren von URI-Parametern.

Name Beschreibung
dataConnectorId Die Datenconnector-ID. Es muss sich um einen eindeutigen Namen handeln, der mit dem name Parameter im Anforderungstext identisch ist.
resourceGroupName Der Name der Ressourcengruppe, wobei die Groß-/Kleinschreibung nicht beachtet wird.
subscriptionId Die ID des Zielabonnements.
workspaceName Der Name des Arbeitsbereichs, nicht die ID.
Das RegEx-Muster ist ^[A-Za-z0-9][A-Za-z0-9-]+[A-Za-z0-9]$.
api-version Die API-Version, die für diesen Vorgang verwendet werden soll.

Anforderungstext

Der Anforderungstext für einen RestApiPoller CCF-Datenconnector weist die folgende Struktur auf:

{
   "name": "{{dataConnectorId}}",
   "kind": "RestApiPoller",
   "etag": "",
   "properties": {
        "connectorDefinitionName": "",
        "auth": {},
        "request": {},
        "response": {},
        "paging": "",
        "dcrConfig": ""
   }
}

RestApiPoller

RestApiPoller ist ein API-Abruf-CCF-Datenconnector, mit dem Sie Paging, Autorisierung und Anforderungs-/Antwortnutzlasten für Ihre Datenquelle anpassen können.

Name Erforderlich Typ Beschreibung
name Wahr Zeichenfolge Der eindeutige Name der Verbindung, die dem URI-Parameter entspricht.
kind Wahr Zeichenfolge Der kind -Wert. Dieses Feld muss auf RestApiPollerfestgelegt werden.
etag GUID Der etag -Wert. Dieses Feld muss für die Erstellung eines neuen Connectors leer bleiben. Für Updatevorgänge etag muss mit dem vorhandenen Connector etag (GUID) übereinstimmen.
properties.connectorDefinitionName Zeichenfolge Der Name der DataConnectorDefinition Ressource, die die Ui-Konfiguration des Datenconnectors definiert. Weitere Informationen findest du unter Datenconnectordefinition.
properties.auth Wahr Geschachtelter JSON-Code Die Authentifizierungseigenschaften zum Abrufen der Daten. Weitere Informationen findest du unter Authentifizierungskonfiguration.
properties.request Wahr Geschachtelter JSON-Code Die Anforderungsnutzlast zum Abrufen der Daten, z. B. der API-Endpunkt. Weitere Informationen findest du unter Anforderungskonfiguration.
properties. response Wahr Geschachtelter JSON-Code Das Antwortobjekt und die geschachtelte Nachricht, die die API beim Abfragen der Daten zurückgibt. Weitere Informationen findest du unter Antwortkonfiguration.
properties.paging Geschachtelter JSON-Code Die Paginierungsnutzlast beim Abrufen der Daten. Weitere Informationen findest du unter Pagingkonfiguration.
properties.dcrConfig Geschachtelter JSON-Code Die erforderlichen Parameter, wenn die Daten an eine Datensammlungsregel (Data Collection Rule, DCR) gesendet werden. Weitere Informationen findest du unter DCR-Konfiguration.

Authentifizierungskonfiguration

Die CCF unterstützt die folgenden Authentifizierungstypen:

Hinweis

Die CCF OAuth2-Implementierung unterstützt keine Anmeldeinformationen für Clientzertifikate.

Als bewährte Methode sollten Sie Parameter im Authentifizierungsabschnitt verwenden, anstatt Anmeldeinformationen hart zu codieren. Weitere Informationen finden Sie unter Schützen vertraulicher Eingaben.

Zum Erstellen der Bereitstellungsvorlage, die auch Parameter verwendet, müssen Sie die Parameter in diesem Abschnitt mit einem zusätzlichen Startzeichen versehen [. In diesem Schritt können die Parameter einen Wert basierend auf der Benutzerinteraktion mit dem Connector zuweisen. Weitere Informationen finden Sie unter Escapezeichen für Vorlagenausdrücke.

Damit die Anmeldeinformationen über die Benutzeroberfläche eingegeben werden können, connectorUIConfig müssen Sie im Abschnitt die gewünschten Parameter in instructionseingeben. Weitere Informationen finden Sie unter Referenz zu Datenconnectordefinitionen für das Codeless Connector Framework.

Standardauthentifizierung

Feld Erforderlich Typ
UserName Wahr Zeichenfolge
Password Wahr Zeichenfolge

Hier sehen Sie ein Beispiel für die Standardauthentifizierung, die in connectorUIconfigdefinierte Parameter verwendet:

"auth": {
    "type": "Basic",
    "UserName": "[[parameters('username')]",
    "Password": "[[parameters('password')]"
}

API-Schlüssel

Feld Erforderlich Typ Beschreibung Standardwert
ApiKey Wahr Zeichenfolge Geheimer Schlüssel des Benutzers.
ApiKeyName Zeichenfolge Name des URI-Headers, der den ApiKey Wert enthält. Authorization
ApiKeyIdentifier Zeichenfolge Zeichenfolgenwert, der dem Token vorangestellt werden soll. token
IsApiKeyInPostPayload Boolean Wert, der bestimmt, ob das Geheimnis im Text statt im POST Header gesendet werden soll. false

APIKey Authentifizierungsbeispiele:

"auth": {
    "type": "APIKey",
    "ApiKey": "[[parameters('apikey')]",
    "ApiKeyName": "X-MyApp-Auth-Header",
    "ApiKeyIdentifier": "Bearer"
}

Das Ergebnis dieses Beispiels ist das Geheimnis, das aus der Benutzereingabe definiert wird, die im folgenden Header gesendet wird: X-MyApp-Auth-Header: Bearer apikey.

"auth": { 
    "type": "APIKey",
    "ApiKey": "123123123",
}

In diesem Beispiel werden die Standardwerte verwendet und der folgende Header zurückgegeben: Authorization: token 123123123.

"auth": { 
    "type": "APIKey",
    "ApiKey": "123123123",
    "ApiKeyName": ""
}

Da ApiKeyName explizit auf ""festgelegt ist, ist das Ergebnis der folgende Header: Authorization: 123123123.

OAuth2

Das Codeless Connector Framework unterstützt die OAuth 2.0-Autorisierungscodezuweisung und Clientanmeldeinformationen. Der Autorisierungscode-Gewährungstyp wird von vertraulichen und öffentlichen Clients verwendet, um einen Autorisierungscode gegen ein Zugriffstoken auszutauschen.

Nachdem der Benutzer über die Umleitungs-URL zum Client zurückkehrt, ruft die Anwendung den Autorisierungscode von der URL ab und verwendet ihn, um ein Zugriffstoken anzufordern.

Feld Erforderlich Typ Beschreibung
ClientId Richtig. Zeichenfolge Die Client-ID.
ClientSecret Richtig. Zeichenfolge Der geheime Clientschlüssel.
AuthorizationCode True, wenn der grantType Wert ist authorization_code. Zeichenfolge Wenn der Gewährungstyp ist authorization_code, ist dieser Feldwert der Autorisierungscode, den der Authentifizierungsserver zurückgegeben hat.
Scope True für den Gewährungstyp authorization_code .
Optional für den Gewährungstyp client_credentials .
Zeichenfolge Eine durch Leerzeichen getrennte Liste von Bereichen für die Zustimmung des Benutzers. Weitere Informationen finden Sie unter OAuth2-Bereiche und -Berechtigungen.
RedirectUri True, wenn der grantType Wert ist authorization_code. Zeichenfolge Die URL für die Umleitung muss sein https://portal.azure.com/TokenAuthorize/ExtensionName/Microsoft_Azure_Security_Insights.
GrantType Richtig. Zeichenfolge Der Gewährungstyp. Kann authorization_code oder client_credentials sein.
TokenEndpoint Richtig. Zeichenfolge Die URL zum Austauschen von Code mit einem gültigen Token in der authorization_code Gewährung oder eine Client-ID und ein geheimnis mit einem gültigen Token in der client_credentials Gewährung.
TokenEndpointHeaders Objekt Ein optionales Schlüssel-Wert-Objekt zum Senden benutzerdefinierter Header an den Tokenserver.
TokenEndpointQueryParameters Objekt Ein optionales Schlüssel-Wert-Objekt zum Senden benutzerdefinierter Abfrageparameter an den Tokenserver.
AuthorizationEndpoint Richtig. Zeichenfolge Die URL für die Zustimmung des Benutzers für den authorization_code Flow.
AuthorizationEndpointHeaders Objekt Ein optionales Schlüssel-Wert-Objekt zum Senden benutzerdefinierter Header an den Authentifizierungsserver.
AuthorizationEndpointQueryParameters Objekt Ein optionales Schlüssel-Wert-Paar, das in einer OAuth2-Autorisierungscodeflussanforderung verwendet wird.

Sie können den Authentifizierungscodeflow verwenden, um Daten im Namen der Berechtigungen eines Benutzers abzurufen. Sie können Clientanmeldeinformationen verwenden, um Daten mit Anwendungsberechtigungen abzurufen. Der Datenserver gewährt Zugriff auf die Anwendung. Da es keinen Benutzer im Clientanmeldeinformationsflow gibt, ist kein Autorisierungsendpunkt erforderlich, nur ein Tokenendpunkt.

Hier sehen Sie ein Beispiel für den OAuth2-Gewährungstyp 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"
}

Hier sehen Sie ein Beispiel für den OAuth2-Gewährungstyp 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- und Kennwortanmeldeinformationen und deren 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-Text (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 Headern (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 Headern (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"
}

Befolgen Sie diesen Authentifizierungsflow:

  1. Senden von Anmeldeinformationen an TokenEndpoint zum Abrufen des JWT-Tokens, wenn userName und passwordverwendet wird, IsCredentialsInHeaders wird verwendet, um zu bestimmen, wo Anmeldeinformationen in die Anforderung eingefügt werden sollen.

    • Wenn IsCredentialsInHeaders: true: Sendet einen Standardauthentifizierungsheader mit username:password.
    • Wenn IsCredentialsInHeaders: false: Sendet Anmeldeinformationen in einem POST Textkörper.
  2. Extrahieren Sie das Token mithilfe JwtTokenJsonPath von oder aus dem Antwortheader.

  3. Der Autorisierungsheader für die JWT-Token ist eine Konstante und lautet immer "Authorization".

Feld Erforderlich Typ Beschreibung
type Wahr Zeichenfolge Der Typ. Muss JwtToken sein.
userName True (wenn userToken nicht verwendet wird) Objekt Das Schlüssel-Wert-Paar für die userName Anmeldeinformationen. Wenn userName und password in der Headeranforderung gesendet werden, geben Sie die value Eigenschaft mit dem Benutzernamen an. Wenn userName und password in der Textanforderung gesendet werden, geben Sie und ValueanKey.
password True (wenn userToken nicht verwendet wird) Objekt Das Schlüssel-Wert-Paar für die Kennwortanmeldeinformationen. Wenn userName und password in der Headeranforderung gesendet werden, geben Sie die value -Eigenschaft mit dem an userName. Wenn userName und password in der Textanforderung gesendet werden, geben Sie und ValueanKey.
userToken True (wenn userName nicht verwendet wird) Zeichenfolge Das vom Client generierte Benutzertoken, um das Systemtoken für die Authentifizierung abzurufen.
UserTokenPrepend False Zeichenfolge Der Wert, der angibt, ob Text vor dem Token vorangestellt werden soll. Standard: Bearer.
NoAccessTokenPrepend False Boolean Ein Zugriffsflag, das angibt, dass dem Token nichts vorangestellt werden soll.
TokenEndpointHttpMethod False Zeichenfolge Die HTTP-Methode für den Tokenendpunkt. Dies kann oder PostseinGet. Der Standardwert lautet Post.
TokenEndpoint Wahr Zeichenfolge Der URL-Endpunkt, der zum Abrufen des JWT-Tokens verwendet wird.
IsCredentialsInHeaders Boolean Der Wert, der angibt, ob Anmeldeinformationen als Standardauthentifizierungsheader (true) im Vergleich zu einem POST Text (false) gesendet werden sollen, der bei Verwendung von userTokenignoriert wird. Der Standardwert lautet false.
IsJsonRequest Boolean Der Wert, der angibt, ob die Anforderung in JSON (Header Content-Type = application/json) im Vergleich zu formcodierten (Header Content-Type = application/x-www-form-urlencoded) gesendet werden soll. Der Standardwert lautet false.
JwtTokenJsonPath Zeichenfolge Der Wert, der den JSONPath Wert angibt, der zum Extrahieren des Tokens aus der Antwort verwendet werden soll. Beispiel: $.access_token.
JwtTokenInResponseHeader Boolean Der Wert, der angibt, ob das Token aus dem Antwortheader im Vergleich zum Text extrahiert werden soll. Der Standardwert lautet false.
JwtTokenHeaderName. Zeichenfolge Der Wert, der den Headernamen angibt, wenn sich das Token im Antwortheader befindet. Der Standardwert lautet Authorization.
JwtTokenIdentifier Zeichenfolge Der Bezeichner, der zum Extrahieren des JWT aus einer Tokenzeichenfolge mit präfix verwendet wird.
QueryParameters Objekt Die benutzerdefinierten Abfrageparameter, die beim Senden der Anforderung an den Tokenendpunkt eingeschlossen werden sollen.
Headers Objekt Die benutzerdefinierten Header, die beim Senden der Anforderung an den Tokenendpunkt eingeschlossen werden sollen.
RequestTimeoutInSeconds Integer Das Anforderungstimeout in Sekunden. Der Standardwert ist 100, mit einem Höchstwert von 180.

Hinweis

Begrenzungen

  • Erfordert die Authentifizierung mit Benutzername und Kennwort für den Tokenabruf.
  • Unterstützt keine API-schlüsselbasierte Tokenanforderungen.
  • Unterstützt keine benutzerdefinierte Headerauthentifizierung (ohne Benutzername und Kennwort)

Anforderungskonfiguration

Im Anforderungsabschnitt wird 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. Zeichenfolge Dieses Feld bestimmt die URL für den Remoteserver und definiert den Endpunkt, von dem Daten abgerufen werden sollen.
RateLimitQPS Integer Dieses Feld definiert die Anzahl der Aufrufe oder Abfragen, die in einer Sekunde für die erste Anforderung zulässig sind. Sie gilt nicht für paginierte Anforderungen. Um die Paginierung zu drosseln, legen Sie auch fest PaginatedCallsPerSecond.
PaginatedCallsPerSecond Double (0...1000) Dieses Feld definiert die Anzahl der Aufrufe pro Sekunde, die für paginierte Anforderungen an die RESTful-API zulässig sind. Es führt eine Verzögerung von (1000 / paginatedCallsPerSecond) Millisekunden zwischen jedem paginierten API-Aufruf ein. Diese Drosselung gilt nur für Paginierungsanforderungen und ist von RateLimitQPSgetrennt, wodurch die anfängliche Anforderungsrate gesteuert wird. In der Regel wird dies mit demselben Wert wie RateLimitQPS festgelegt, um das Ratenlimit der Datenquelle für alle Anforderungen zu berücksichtigen. 0 value bedeutet, dass keine Paginierungsdrosselung angewendet wird.
RateLimitConfig Objekt Dieses Feld definiert die Konfiguration der Ratenbegrenzung für die RESTful-API. Weitere Informationen findest du unter RateLimitConfig Beispiel.
QueryWindowInMin Integer Dieses Feld definiert das verfügbare Abfragefenster in Minuten. Der Mindestwert beträgt 1 Minute. Der Standardwert beträgt 5 Minuten.
HttpMethod Zeichenfolge Dieses Feld definiert die API-Methode: GET(Standard) oder POST.
QueryTimeFormat Zeichenfolge Dieses Feld 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, UnixTimestampInMillsoder eine andere gültige Darstellung von Datum und Uhrzeit. Beispiel: yyyy-MM-dd, MM/dd/yyyy HH:mm:ss.
Der Standardwert lautet ISO 8601 UTC.
RetryCount Ganze Zahl (1...6) In diesem Feld wird definiert, dass Werte von 1 nach 6 einem Fehler wiederhergestellt werden dürfen. Der Standardwert ist 3.
TimeoutInSeconds Ganze Zahl (1...180) Dieses Feld definiert das Anforderungstimeout in Sekunden. Der Standardwert ist 20.
IsPostPayloadJson Boolean Dieses Feld bestimmt, ob die POST Nutzlast im JSON-Format vorliegt. Der Standardwert ist false.
Headers Objekt Dieses Feld enthält Schlüssel-Wert-Paare, die die Anforderungsheader definieren.
QueryParameters Objekt Dieses Feld enthält Schlüssel-Wert-Paare, die die Abfrageparameter der Anforderung definieren.
StartTimeAttributeName True, wenn der EndTimeAttributeName Wert festgelegt wird. Zeichenfolge Dieses Feld definiert den Abfrageparameternamen für die Startzeit der Abfrage. Weitere Informationen findest du unter StartTimeAttributeName Beispiel.
EndTimeAttributeName True, wenn StartTimeAttributeName festgelegt ist. Zeichenfolge Dieses Feld definiert den Abfrageparameternamen für die Abfrageendzeit.
QueryTimeIntervalAttributeName Zeichenfolge Dieses Feld wird verwendet, wenn der Endpunkt ein spezielles Format zum Abfragen der Daten in einem Zeitrahmen erfordert. Verwenden Sie diese Eigenschaft mit den QueryTimeIntervalPrepend Parametern und QueryTimeIntervalDelimiter . Weitere Informationen findest du unter QueryTimeIntervalAttributeName Beispiel.
QueryTimeIntervalPrepend True, wenn QueryTimeIntervalAttributeName festgelegt ist. Zeichenfolge Verweisen Sie auf QueryTimeIntervalAttributeName.
QueryTimeIntervalDelimiter True, wenn QueryTimeIntervalAttributeName festgelegt ist. Zeichenfolge Verweisen Sie auf QueryTimeIntervalAttributeName.
QueryParametersTemplate Zeichenfolge Dieses Feld verweist auf die Abfragevorlage, die bei der Übergabe von Parametern in erweiterten Szenarien verwendet werden soll.

Beispiel: "queryParametersTemplate": "{'cid': 1234567, 'cmd': 'reporting', 'format': 'siem', 'data': { 'from': '{_QueryWindowStartTime}', 'to': '{_QueryWindowEndTime}'}, '{_APIKeyName}': '{_APIKey}'}".
InitialCheckpointTimeUtc DateTime (UTC) Gibt die Startzeit der Abfrage für die erste Abfrage an, wenn kein gespeicherter Prüfpunkt vorhanden ist. Sobald ein Prüfpunkt nach der ersten erfolgreichen Abfrage beibehalten wird, wird dieser Wert ignoriert. Diese Einstellung wird nur wirksam, wenn die Anforderungskonfiguration des Connectors einen Startzeitabfrageparameter (z startTimeAttributeName . B. oder das {_QueryWindowStartTime} Ersetzungstoken) ohne einen entsprechenden Endzeitparameter definiert. Es hat keine Auswirkungen auf Connectors, die ausschließlich auf Paginierungscursor oder Token basieren. Format: ISO 8601 UTC datetime (z. B 2024-01-15T00:00:00Z. ).

Wenn die API komplexe Parameter erfordert, verwenden Sie queryParameters oder queryParametersTemplate. Diese Befehle enthalten einige integrierte Variablen.

Integrierte Variable Zur Verwendung in queryParameters Zur Verwendung in queryParametersTemplate
_QueryWindowStartTime Ja Ja
_QueryWindowEndTime Ja Ja
_APIKeyName Nein Ja
_APIKey Nein Ja

StartTimeAttributeName-Beispiel

Betrachten Sie dieses Beispiel:

  • StartTimeAttributeName = from
  • EndTimeAttributeName = until
  • ApiEndpoint = https://www.example.com

Die Abfrage, die an den Remoteserver gesendet wird, lautet: https://www.example.com?from={QueryTimeFormat}&until={QueryTimeFormat + QueryWindowInMin}.

QueryTimeIntervalAttributeName-Beispiel

Betrachten Sie dieses Beispiel:

  • QueryTimeIntervalAttributeName = interval
  • QueryTimeIntervalPrepend = time:
  • QueryTimeIntervalDelimiter = ..
  • ApiEndpoint = https://www.example.com

Die Abfrage, die an den Remoteserver gesendet wird, lautet: https://www.example.com?interval=time:{QueryTimeFormat}..{QueryTimeFormat + QueryWindowInMin}.

RateLimitConfig-Beispiel

Betrachten Sie dieses 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 Ratenbegrenzungsheader enthält, kann der Connector diese Informationen verwenden, um seine Anforderungsrate anzupassen.

Anfordern von Beispielen, die Microsoft Graph als Datenquellen-API verwenden

In diesem Beispiel werden Nachrichten mit einem Filterabfrageparameter abfragt. 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.0000000gesendet. Der Zeitstempel wird für jedes queryWindowInMin Mal aktualisiert.

Mit diesem Beispiel erzielen Sie die gleichen Ergebnisse:

"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}"
  }
}

Es gibt eine weitere Option für Situationen, in der die Datenquelle zwei Abfrageparameter erwartet (einen für die Startzeit und einen 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",
}

Diese Option sendet 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 . In diesem Beispiel wird eine POST Anforderung mit Parametern im Text gesendet:

"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, wie Ihr Datenconnector Antworten verarbeitet, indem Sie die folgenden Parameter verwenden:

Feld Erforderlich Typ Beschreibung
EventsJsonPaths Wahr Liste der Zeichenfolgen Definiert den Pfad zur Nachricht im ANTWORT-JSON-Code. Ein JSON-Pfadausdruck gibt einen Pfad zu einem Element oder einer Gruppe von Elementen in einer JSON-Struktur an.
SuccessStatusJsonPath Zeichenfolge Definiert den Pfad zur Erfolgsmeldung im ANTWORT-JSON-Code. Wenn dieser Parameter definiert ist, sollte auch der SuccessStatusValue Parameter definiert werden.
SuccessStatusValue Zeichenfolge Definiert den Pfad zum Erfolgsmeldungswert im ANTWORT-JSON-Code.
IsGzipCompressed Boolean Bestimmt, ob die Antwort in einer GZIP-Datei komprimiert wird.
format Wahr Zeichenfolge Bestimmt, ob das Format , csvoder xmlistjson.
CompressionAlgo Zeichenfolge Definiert den Komprimierungsalgorithmus, entweder multi-gzip oder deflate. Konfigurieren Sie IsGzipCompressed für den GZIP-Komprimierungsalgorithmus auf True , anstatt einen Wert für diesen Parameter festzulegen.
CsvDelimiter Zeichenfolge Verweist auf , wenn das Antwortformat CSV ist und Sie das CSV-Standardtrennzeichen von ","ändern möchten.
HasCsvBoundary Boolean Gibt an, ob die CSV-Daten eine Grenze haben.
HasCsvHeader Boolean Gibt an, ob die CSV-Daten über einen Header verfügen. Der Standardwert lautet True.
CsvEscape Zeichenfolge Definiert ein Escapezeichen für eine Feldgrenze. Der Standardwert ist "

Beispielsweise erfordert eine CSV-Datei mit Kopfzeilen id,name,avg und einer Datenzeile, die Leerzeichen wie 1,"my name",5.5 enthält, die " Feldgrenze.
ConvertChildPropertiesToArray Boolean Verweist auf einen Sonderfall, in dem der Remoteserver ein -Objekt anstelle einer Liste von Ereignissen zurückgibt, bei denen jede Eigenschaft Daten enthält.

Hinweis

Der CSV-Formattyp wird von der RFC4180 Spezifikation analysiert.

Antwortkonfigurationsbeispiele

Es wird eine Serverantwort im JSON-Format erwartet. Die Antwort enthält die angeforderten Daten im Eigenschaftswert. Die Antworteigenschaft status gibt an, dass die Daten nur erfasst werden, wenn der Wert istsuccess.

"response": {
  "EventsJsonPaths ": ["$.value"],
  "format": "json",
  "SuccessStatusJsonPath": "$.status",
  "SuccessStatusValue": "success",
  "IsGzipCompressed": true
 }

Die erwartete Antwort in diesem Beispiel bereitet eine CSV-Datei ohne Header vor.

"response": {
  "EventsJsonPaths ": ["$"],
  "format": "csv",
  "HasCsvHeader": false
 }

Pagingkonfiguration

Wenn die Datenquelle nicht die gesamte Antwortnutzlast auf einmal senden kann, muss der CCF-Datenconnector wissen, wie Teile der Daten auf Antwortseiten empfangen werden. Folgende Pagingtypen stehen zur Auswahl:

Auslagerungstyp Entscheidungsfaktor
Enthält die API-Antwort Links zu den nächsten und vorherigen Seiten?
Verfügt die API-Antwort über ein Token oder einen Cursor für die nächste und vorherige Seite?
Unterstützt die API-Antwort einen Parameter für die Anzahl von Objekten, 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 häufigste Pagingtyp ist, wenn eine Serverdatenquellen-API URLs für die nächste und vorherige Datenseite bereitstellt. Weitere Informationen zur Linkheaderspezifikation finden Sie unter RFC 5988.

LinkHeader Paging bedeutet, dass die API-Antwort eine der folgenden Optionen enthält:

  • Der Link HTTP-Antwortheader.
  • Ein JSON-Pfad zum Abrufen des Links aus dem Antworttext.

PersistentLinkHeader-type paging hat die gleichen Eigenschaften wie LinkHeader, mit der Ausnahme, dass der Linkheader im Back-End-Speicher beibehalten wird. Diese Option ermöglicht das Auslagern von Links über Abfragefenster hinweg.

Einige APIs unterstützen beispielsweise keine Start- oder Endzeiten für Abfragen. Stattdessen unterstützen sie einen serverseitigen Cursor. Sie können persistente Seitentypen verwenden, um den serverseitigen Cursor zu speichern. Weitere Informationen finden Sie unter Was ist ein Cursor?.

Hinweis

Nur eine Abfrage für den Connector kann mit PersistentLinkHeader ausgeführt werden, um Racebedingungen auf dem serverseitigen Cursor zu vermeiden. Dieses Problem kann sich auf die Latenz auswirken.

Feld Erforderlich Typ Beschreibung
LinkHeaderTokenJsonPath False Zeichenfolge 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}]}, ist $.nextPageder LinkHeaderTokenJsonPath Wert .
PageSize False Integer Verwenden Sie diese Eigenschaft, um die Anzahl der Ereignisse pro Seite zu bestimmen.
PageSizeParameterName False Zeichenfolge Verwenden Sie diesen Abfrageparameternamen, um die Seitengröße anzugeben.
PagingInfoPlacement False Zeichenfolge Verwenden Sie diese Eigenschaft, um zu bestimmen, wie Paginginformationen aufgefüllt werden. Akzeptiert entweder QueryString oder RequestBody.
PagingQueryParamOnly False Boolean Verwenden Sie diese Eigenschaft, um Abfrageparameter anzugeben. Wenn dieser Wert auf TRUE festgelegt ist, werden alle anderen Abfrageparameter außer paging-Abfrageparametern weggelassen.

Hier sind einige Beispiele:

"paging": {
  "pagingType": "LinkHeader",
  "linkHeaderTokenJsonPath" : "$.metadata.links.next"
}
"paging": {
 "pagingType" : "PersistentLinkHeader", 
 "pageSizeParameterName" : "limit", 
 "pageSize" : 500 
}

Konfigurieren von NextPageUrl

NextPageUrl-type paging bedeutet, dass die API-Antwort einen komplexen Link im Antworttext enthält, ähnlich wie LinkHeader, aber die URL ist im Antworttext anstelle des Headers enthalten.

Feld Erforderlich Typ Beschreibung
PageSize False Integer Die Anzahl der Ereignisse pro Seite.
PageSizeParameterName False Zeichenfolge Der Name des Abfrageparameters für die Seitengröße.
NextPageUrl False Zeichenfolge Feld, das nur verwendet wird, wenn der Connector für die Coralogix-API verwendet wird.
NextPageUrlQueryParameters False Objekt Schlüssel-Wert-Paare, die jeder Anforderung für die nächste Seite einen benutzerdefinierten Abfrageparameter hinzufügen.
NextPageParaName False Zeichenfolge Der Name der nächsten Seite in der Anforderung.
HasNextFlagJsonPath False Zeichenfolge Der Pfad zum HasNextPage Flag-Attribut.
NextPageRequestHeader False Zeichenfolge Der Kopfzeilenname der nächsten Seite in der Anforderung.
NextPageUrlQueryParametersTemplate False Zeichenfolge Feld, das nur verwendet wird, wenn der Connector für die Coralogix-API verwendet wird.
PagingInfoPlacement False Zeichenfolge Feld, das bestimmt, wie Auslagerungsinformationen aufgefüllt werden. Akzeptiert entweder QueryString oder RequestBody.
PagingQueryParamOnly False Boolean Feld, das Abfrageparameter bestimmt. Wenn dieser Wert auf TRUE festgelegt ist, 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-type Paginierung verwendet ein Token (einen Hash oder einen Cursor), das den Zustand 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 Die Paginierung verwendet ein Token, das serverseitig beibehalten wird. Der Server speichert das letzte Token, das der Client abgerufen hat, und stellt das nächste Token in nachfolgenden Anforderungen bereit. Der Client fährt dort fort, wo er aufgehört hat, auch wenn er später neue Anforderungen sendet.

Feld Erforderlich Typ Beschreibung
PageSize False Integer Anzahl der Ereignisse pro Seite.
PageSizeParameterName False Zeichenfolge Abfrageparametername für die Seitengröße.
NextPageTokenJsonPath False Zeichenfolge JSON-Pfad für das Token der nächsten Seite im Antworttext.
NextPageTokenResponseHeader False Zeichenfolge Feld, das angibt, dass, wenn NextPageTokenJsonPath leer ist, das Token in diesem Headernamen für die nächste Seite verwenden.
NextPageParaName False Zeichenfolge Feld, das den Namen der nächsten Seite in der Anforderung bestimmt.
HasNextFlagJsonPath False Zeichenfolge Feld, das den Pfad zu einem HasNextPage Flag-Attribut definiert, wenn bestimmt wird, ob weitere Seiten in der Antwort verbleiben.
NextPageRequestHeader False Zeichenfolge Feld, das den Headernamen der nächsten Seite in der Anforderung bestimmt.
PagingInfoPlacement False Zeichenfolge Feld, das bestimmt, wie Auslagerungsinformationen aufgefüllt werden. Akzeptiert entweder QueryString oder RequestBody.
PagingQueryParamOnly False Boolean Feld, das Abfrageparameter bestimmt. Wenn dieser Wert auf TRUE festgelegt ist, 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-type 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 False Integer Anzahl der Ereignisse pro Seite.
PageSizeParameterName False Zeichenfolge Abfrageparametername für die Seitengröße.
OffsetParaName False Zeichenfolge Der Name des Abfrageparameters der nächsten Anforderung. Der CCF berechnet den Offsetwert für jede Anforderung (alle erfassten Ereignisse + 1).
PagingInfoPlacement False Zeichenfolge Feld, das bestimmt, wie Auslagerungsinformationen aufgefüllt werden. Akzeptiert entweder QueryString oder RequestBody.
PagingQueryParamOnly False Boolean Feld, das Abfrageparameter bestimmt. Wenn dieser Wert auf TRUE festgelegt ist, werden alle anderen Abfrageparameter außer paging-Abfrageparametern weggelassen.

Beispiel:

"paging": {
  "pagingType": "Offset", 
  "offsetParaName": "offset",
  "pageSize": 50,
  "pagingQueryParamOnly": true,
  "pagingInfoPlacement": "QueryString"
}

Konfigurieren von CountBasedPaging

CountBasedPagingMit der -type-Paginierung kann der Client die Anzahl der elemente angeben, die in der Antwort zurückgegeben werden sollen. Diese Funktion ist nützlich für APIs, die paginierung basierend auf einem count-Parameter als Teil der Antwortnutzlast unterstützen.

Feld Erforderlich Typ Beschreibung
pageNumberParaName Wahr Zeichenfolge Parametername der Seitenzahl in der HTTP-Anforderung.
PageSize False Integer Anzahl der Ereignisse pro Seite.
ZeroBasedIndexing False Boolean Flag, das angibt, dass die Anzahl null basiert.
HasNextFlagJsonPath False Zeichenfolge Der JSON-Pfad des Flags in der HTTP-Antwortnutzlast, der angibt, dass weitere Seiten vorhanden sind.
TotalResultsJsonPath False Zeichenfolge Der JSON-Pfad der Gesamtanzahl der Ergebnisse in der HTTP-Antwortnutzlast.
PageNumberJsonPath False Zeichenfolge Der JSON-Pfad der Seitenzahl in der HTTP-Antwortnutzlast. Erforderlich, wenn totalResultsJsonPath angegeben ist.
PageCountJsonPath False Zeichenfolge Der JSON-Pfad der Seitenanzahl in der HTTP-Antwortnutzlast. Erforderlich, wenn totalResultsJsonPath angegeben ist.
PagingInfoPlacement False Zeichenfolge Feld, das bestimmt, wie Auslagerungsinformationen aufgefüllt werden. Akzeptiert entweder QueryString oder RequestBody.
PagingQueryParamOnly False Boolean Feld, das Abfrageparameter bestimmt. Wenn dieser Wert auf TRUE festgelegt ist, 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 Wahr Zeichenfolge Datensammlungsendpunkt (DATA Collection Endpoint, DCE). Beispiel: https://example.ingest.monitor.azure.com.
DataCollectionRuleImmutableId Wahr Zeichenfolge Die unveränderliche DCR-ID. Suchen Sie sie, indem Sie die Antwort zur DCR-Erstellung anzeigen oder die DCR-API verwenden.
StreamName Wahr Zeichenfolge Dieser Wert ist der streamDeclaration in der DCR definierte Wert. Das Präfix muss mit Custom-beginnen.

Beispiel für einen CCF-Datenconnector

Hier sehen Sie ein Beispiel für alle Komponenten des JSON-Codes für den CCF-Datenconnector:

{
   "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": ["$"]
      }
   }
}