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.
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:
Senden von Anmeldeinformationen an
TokenEndpointzum Abrufen des JWT-Tokens, wennuserNameundpasswordverwendet wird,IsCredentialsInHeaderswird verwendet, um zu bestimmen, wo Anmeldeinformationen in die Anforderung eingefügt werden sollen.- Wenn
IsCredentialsInHeaders: true: Sendet einen Standardauthentifizierungsheader mitusername:password. - Wenn
IsCredentialsInHeaders: false: Sendet Anmeldeinformationen in einemPOSTTextkörper.
- Wenn
Extrahieren Sie das Token mithilfe
JwtTokenJsonPathvon oder aus dem Antwortheader.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=fromEndTimeAttributeName=untilApiEndpoint=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=intervalQueryTimeIntervalPrepend=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
LinkHTTP-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": ["$"]
}
}
}