Bemærk
Adgang til denne side kræver godkendelse. Du kan prøve at logge på eller ændre mapper.
Adgang til denne side kræver godkendelse. Du kan prøve at ændre mapper.
Du kan oprette en RestApiPoller dataconnector med CCF (Codeless Connector Framework) ved hjælp af denne artikel som et supplement til dokumentation til Microsoft Sentinel REST API til dataconnectors.
Hver dataconnector repræsenterer en bestemt forbindelse for en Microsoft Sentinel dataconnector. En dataconnector kan have flere forbindelser, som henter data fra forskellige slutpunkter. Du kan fuldføre installationsskabelonen for CCF-dataconnectoren ved hjælp af den JSON-konfiguration, du bygger med denne artikel.
Du kan få flere oplysninger under Opret en kodeløs connector til Microsoft Sentinel.
Oprettelse eller opdatering af dataconnectors
Find den nyeste stabile API-version eller prøveversion ved at referere til handlingernecreate eller update i REST API-dokumentationen. Forskellen mellem handlingerne create og update er, at kræver update værdien etag .
PUT Metode:
https://management.azure.com/subscriptions/{{subscriptionId}}/resourceGroups/{{resourceGroupName}}/providers/Microsoft.OperationalInsights/workspaces/{{workspaceName}}/providers/Microsoft.SecurityInsights/dataConnectors/{{dataConnectorId}}?api-version={{apiVersion}}
URI-parametre
Du kan få flere oplysninger om den nyeste API-version under Dataconnectors: opret eller opdater URI-parametre.
| Navn | Beskrivelse |
|---|---|
dataConnectorId |
Id'et for dataconnectoren. Det skal være et entydigt navn, der er det samme som name parameteren i anmodningens brødtekst. |
resourceGroupName |
Navnet på ressourcegruppen, hvor der ikke skelnes mellem store og små bogstaver. |
subscriptionId |
Id'et for målabonnementet. |
workspaceName |
Navnet på arbejdsområdet, ikke id'et. Regex-mønsteret er ^[A-Za-z0-9][A-Za-z0-9-]+[A-Za-z0-9]$. |
api-version |
Den API-version, der skal bruges til denne handling. |
Brødtekst i anmodning
Anmodningens brødtekst for en RestApiPoller CCF-dataconnector har følgende struktur:
{
"name": "{{dataConnectorId}}",
"kind": "RestApiPoller",
"etag": "",
"properties": {
"connectorDefinitionName": "",
"auth": {},
"request": {},
"response": {},
"paging": "",
"dcrConfig": ""
}
}
RestApiPoller
RestApiPoller er en CCF-API-poller-dataconnector, som du kan bruge til at tilpasse nyttedata for sideinddeling, godkendelse og anmodning/svar for datakilden.
| Navn | Påkrævet | Type | Beskrivelse |
|---|---|---|---|
name |
Sandt | String | Det entydige navn på den forbindelse, der svarer til URI-parameteren. |
kind |
Sandt | String | Værdien kind . Dette felt skal angives til RestApiPoller. |
etag |
GUID | Værdien etag . Dette felt skal være tomt, for at der kan oprettes en ny forbindelse. I forbindelse med opdateringshandlinger etag skal matche den eksisterende connector etag (GUID). |
|
properties.connectorDefinitionName |
String | Navnet på den DataConnectorDefinition ressource, der definerer konfigurationen af brugergrænsefladen for dataconnectoren. Du kan få flere oplysninger ved at gå til Definition af dataconnector. |
|
properties.auth |
Sandt | Indlejret JSON | Godkendelsesegenskaberne for polling af dataene. Du kan få flere oplysninger ved at gå til Godkendelseskonfiguration. |
properties.request |
Sandt | Indlejret JSON | Anmodningsnyttedata til polling af dataene, f.eks. API-slutpunktet. Du kan få flere oplysninger ved at gå til Anmodningskonfiguration. |
properties. response |
Sandt | Indlejret JSON | Svarobjektet og den indlejrede meddelelse, SOM API'en returnerer, når dataene forespørges. Du kan få flere oplysninger ved at gå til Svarkonfiguration. |
properties.paging |
Indlejret JSON | Nyttedata for sideinddeling, når dataene forespørges. Du kan få flere oplysninger ved at gå til Konfiguration af sideinddeling. | |
properties.dcrConfig |
Indlejret JSON | De påkrævede parametre, når dataene sendes til en regel for dataindsamling (DCR). Du kan få flere oplysninger ved at gå til DCR-konfiguration. |
Godkendelseskonfiguration
CCF understøtter følgende godkendelsestyper:
Bemærk!
CCF OAuth2-implementering understøtter ikke klientcertifikatets legitimationsoplysninger.
Som bedste praksis kan du bruge parametre i godkendelsessektionen i stedet for hard-coding-legitimationsoplysninger. Du kan få flere oplysninger under Sikker fortroligt input.
Hvis du vil oprette installationsskabelonen, som også bruger parametre, skal du undslippe parametrene i dette afsnit med en ekstra start [. Dette trin giver parametrene mulighed for at tildele en værdi baseret på brugerens interaktion med connectoren. Du kan få flere oplysninger under Escape-tegn for skabelonudtryk.
Hvis du vil aktivere de legitimationsoplysninger, der skal angives fra brugergrænsefladen, kræver sektionen, connectorUIConfig at du angiver de ønskede parametre i instructions. Du kan få flere oplysninger under Definitioner af dataconnectorer i Codeless Connector Framework.
Basisgodkendelse
| Feltet | Påkrævet | Type |
|---|---|---|
UserName |
Sandt | String |
Password |
Sandt | String |
Her er et eksempel på basisgodkendelse, der bruger parametre, der er defineret i connectorUIconfig:
"auth": {
"type": "Basic",
"UserName": "[[parameters('username')]",
"Password": "[[parameters('password')]"
}
API-nøgle
| Feltet | Påkrævet | Type | Beskrivelse | Standardværdien |
|---|---|---|---|---|
ApiKey |
Sandt | String | Brugerhemmelighedsnøgle. | |
ApiKeyName |
String | Navnet på den URI-header, der indeholder værdien ApiKey . |
Authorization |
|
ApiKeyIdentifier |
String | Strengværdi, der skal forpensere tokenet. | token |
|
IsApiKeyInPostPayload |
Boolesk | Værdi, der bestemmer, om hemmeligheden skal sendes i brødteksten i POST stedet for i headeren. |
false |
APIKey eksempler på godkendelse:
"auth": {
"type": "APIKey",
"ApiKey": "[[parameters('apikey')]",
"ApiKeyName": "X-MyApp-Auth-Header",
"ApiKeyIdentifier": "Bearer"
}
Resultatet af dette eksempel er den hemmelighed, der er defineret ud fra det brugerinput, der sendes i følgende header: X-MyApp-Auth-Header: Bearer apikey.
"auth": {
"type": "APIKey",
"ApiKey": "123123123",
}
I dette eksempel bruges standardværdierne og resultaterne i følgende overskrift: Authorization: token 123123123.
"auth": {
"type": "APIKey",
"ApiKey": "123123123",
"ApiKeyName": ""
}
Da ApiKeyName eksplicit er angivet til "", er resultatet følgende header: Authorization: 123123123.
OAuth2
Codeless Connector Framework understøtter tildeling af OAuth 2.0-godkendelseskode og klientlegitimationsoplysninger. Tildelingstypen Godkendelseskode bruges af fortrolige og offentlige klienter til at udveksle en godkendelseskode for et adgangstoken.
Når brugeren vender tilbage til klienten via URL-adressen til omdirigering, henter programmet godkendelseskoden fra URL-adressen og bruger den til at anmode om et adgangstoken.
| Feltet | Påkrævet | Type | Beskrivelse |
|---|---|---|---|
ClientId |
Sandt. | String | Klient-id'et. |
ClientSecret |
Sandt. | String | Klienthemmeligheden. |
AuthorizationCode |
Sand, når værdien grantType er authorization_code. |
String | Hvis tildelingstypen er authorization_code, er denne feltværdi den godkendelseskode, som godkendelsesserveren returnerede. |
Scope |
Sand for tilskudstypen authorization_code .Valgfrit for client_credentials bonustypen. |
String | En mellemrumssepareret liste over områder for brugersamtykke. Du kan få flere oplysninger under OAuth2-områder og -tilladelser. |
RedirectUri |
Sand, når værdien grantType er authorization_code. |
String | URL-adressen til omdirigering skal være https://portal.azure.com/TokenAuthorize/ExtensionName/Microsoft_Azure_Security_Insights. |
GrantType |
Sandt. | String | Tilskudstypen. Kan være authorization_code eller client_credentials. |
TokenEndpoint |
Sandt. | String | Den URL-adresse, der skal udveksles kode med et gyldigt token i authorization_code tildelingen, eller et klient-id og en hemmelighed med et gyldigt token i client_credentials tildelingen. |
TokenEndpointHeaders |
Objekt | Et valgfrit nøgle-/værdiobjekt til at sende brugerdefinerede headere til tokenserveren. | |
TokenEndpointQueryParameters |
Objekt | Et valgfrit nøgle-/værdiobjekt til at sende brugerdefinerede forespørgselsparametre til tokenserveren. | |
AuthorizationEndpoint |
Sandt. | String | URL-adressen for brugersamtykke for flowet authorization_code . |
AuthorizationEndpointHeaders |
Objekt | Et valgfrit nøgle-/værdiobjekt til at sende brugerdefinerede headere til godkendelsesserveren. | |
AuthorizationEndpointQueryParameters |
Objekt | Et valgfrit nøgle-/værdipar, der bruges i en OAuth2-anmodning om godkendelseskodeflow. |
Du kan bruge et godkendelseskodeflow til at hente data på vegne af en brugers tilladelser. Du kan bruge klientlegitimationsoplysninger til at hente data med programtilladelser. Dataserveren giver adgang til programmet. Da der ikke er nogen bruger i flowet for klientlegitimationsoplysninger, er der ikke behov for et godkendelsesslutpunkt, men kun et tokenslutpunkt.
Her er et eksempel på tildelingstypen OAuth2 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"
}
Her er et eksempel på tildelingstypen OAuth2 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
JSON Web Token-godkendelse (JWT) understøtter hentning af tokens via legitimationsoplysningerne for brugernavn og adgangskode og bruger dem til API-anmodninger.
Grundlæggende eksempel
"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"
}
Legitimationsoplysninger i POST-brødtekst (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"
}
Legitimationsoplysninger i headere (basisgodkendelse)
"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
}
Legitimationsoplysninger i headere (brugertoken)
"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"
}
Følg dette godkendelsesforløb:
Send legitimationsoplysninger for at
TokenEndpointhente JWT-tokenet, når du brugeruserNameogpassword, bruges til at bestemme,IsCredentialsInHeadershvor legitimationsoplysningerne skal placeres i anmodningen.- Hvis
IsCredentialsInHeaders: true: Sender en grundlæggende godkendelsesheader medusername:password. - If
IsCredentialsInHeaders: false: Sender legitimationsoplysninger i enPOSTbrødtekst.
- Hvis
Udtræk tokenet ved hjælp
JwtTokenJsonPathaf eller fra svarheaderen.Autorisationsheaderen for JWT-tokens er en konstant og vil altid være "Autorisation".
| Feltet | Påkrævet | Type | Beskrivelse |
|---|---|---|---|
type |
Sandt | String | Typen . Skal være JwtToken |
userName |
Sand (hvis userToken ikke bruges) |
Objekt | Nøgle-/værdiparret for userName legitimationsoplysningerne. Hvis userName og password sendes i headeranmodningen, skal du angive value egenskaben med brugernavnet. Hvis userName og password sendes i brødtekstanmodningen, skal du angive Key og Value. |
password |
Sand (hvis userToken ikke bruges) |
Objekt | Nøgle-/værdiparret for legitimationsoplysningerne for adgangskoden. Hvis userName og password sendes i headeranmodningen, skal du angive value egenskaben med userName. Hvis userName og password sendes i brødtekstanmodningen, skal du angive Key og Value. |
userToken |
Sand (hvis userName ikke bruges) |
String | Det brugertoken, der genereres af klienten for at hente systemtokenet til godkendelse. |
UserTokenPrepend |
Falsk | String | Den værdi, der angiver, om tekst skal forudindstilles før tokenet. Standard: Bearer. |
NoAccessTokenPrepend |
Falsk | Boolesk | Et adgangsflag, der angiver, at tokenet ikke skal forudindstille noget. |
TokenEndpointHttpMethod |
Falsk | String | HTTP-metoden for tokenslutpunkt. Det kan være Get eller Post. Standarden er Post. |
TokenEndpoint |
Sandt | String | Det URL-slutpunkt, der bruges til at hente JWT-tokenet. |
IsCredentialsInHeaders |
Boolesk | Den værdi, der angiver, om legitimationsoplysninger skal sendes som en grundlæggende godkendelsesheader (true) i forhold til en POST brødtekst (false), ignoreres, når du bruger userToken. Standarden er false. |
|
IsJsonRequest |
Boolesk | Den værdi, der angiver, om anmodningen skal sendes i JSON (header Content-Type = application/json) i forhold til formularkodet (header Content-Type = application/x-www-form-urlencoded). Standarden er false. |
|
JwtTokenJsonPath |
String | Den værdi, der angiver den JSONPath værdi, der skal bruges til at udtrække tokenet fra svaret. For eksempel: $.access_token. |
|
JwtTokenInResponseHeader |
Boolesk | Den værdi, der angiver, om tokenet skal udtrækkes fra svarheaderen i forhold til brødteksten. Standarden er false. |
|
JwtTokenHeaderName. |
String | Den værdi, der angiver headernavnet, når tokenet er i svarheaderen. Standarden er Authorization. |
|
JwtTokenIdentifier |
String | Det id, der bruges til at udtrække JWT fra en præfikset tokenstreng. | |
QueryParameters |
Objekt | De brugerdefinerede forespørgselsparametre, der skal medtages, når anmodningen sendes til tokenslutpunktet. | |
Headers |
Objekt | De brugerdefinerede headere, der skal medtages, når anmodningen sendes til tokenslutpunktet. | |
RequestTimeoutInSeconds |
Heltal | Anmodningens timeout i sekunder. Standardværdien er 100, med en maksimumværdi på 180. |
Bemærk!
Begrænsninger
- Kræver godkendelse af brugernavn og adgangskode til erhvervelse af token
- Understøtter ikke API-nøglebaserede tokenanmodninger
- Understøtter ikke brugerdefineret headergodkendelse (uden brugernavn og adgangskode)
Anmodningskonfiguration
Anmodningsafsnittet definerer, hvordan CCF-dataconnectoren sender anmodninger til din datakilde (f.eks. API-slutpunktet, og hvor ofte det pågældende slutpunkt skal forespørge).
| Feltet | Påkrævet | Type | Beskrivelse |
|---|---|---|---|
ApiEndpoint |
Sandt. | String | Dette felt bestemmer URL-adressen til fjernserveren og definerer det slutpunkt, hvorfra der skal hentes data. |
RateLimitQPS |
Heltal | Dette felt definerer det antal kald eller forespørgsler, der tillades i sekundet for den indledende anmodning. Den gælder ikke for sideinddelte anmodninger. Hvis du vil begrænse sideinddelingen, skal du også angive PaginatedCallsPerSecond. |
|
PaginatedCallsPerSecond |
Dobbelt (0...1000) | Dette felt definerer det antal kald pr. sekund, der er tilladt for sideinddelte anmodninger til RESTful-API'en. Det introducerer en forsinkelse på (1000 / paginatedCallsPerSecond) millisekunder mellem hvert sideinddelt API-kald. Denne begrænsning gælder kun for sideinddelingsanmodninger og er separat fra RateLimitQPS, som styrer den oprindelige anmodningshastighed. Dette vil typisk blive angivet den samme værdi som RateLimitQPS for at overholde datakildens satsgrænse på tværs af alle anmodninger.
0 værdi betyder, at der ikke anvendes nogen pagineringsbegrænsning. |
|
RateLimitConfig |
Objekt | Dette felt definerer konfigurationen af rate-limit for RESTful-API'en. Du kan få mere at vide ved at gå til RateLimitConfig eksempel. |
|
QueryWindowInMin |
Heltal | Dette felt definerer det tilgængelige forespørgselsvindue på få minutter. Minimum er 1 minut. Standarden er 5 minutter. | |
HttpMethod |
String | Dette felt definerer API-metoden: GET(standard) eller POST. |
|
QueryTimeFormat |
String | Dette felt definerer det dato- og klokkeslætsformat, som slutpunktet (fjernserveren) forventer. CCF bruger den aktuelle dato og det aktuelle klokkeslæt, uanset hvor denne variabel bruges. Mulige værdier er konstanterne: UnixTimestamp, UnixTimestampInMillseller enhver anden gyldig repræsentation af dato og klokkeslæt. For eksempel: yyyy-MM-dd, MM/dd/yyyy HH:mm:ss.Standarden er ISO 8601 UTC. |
|
RetryCount |
Heltal (1...6) | Dette felt definerer, at værdier for 1 til 6 nye forsøg har tilladelse til at gendanne efter en fejl. Standardværdien er 3. |
|
TimeoutInSeconds |
Heltal (1...180) | Dette felt definerer anmodningens timeout i sekunder. Standardværdien er 20. |
|
IsPostPayloadJson |
Boolesk | Dette felt bestemmer, om POST nyttedataene er i JSON-format. Standardværdien er false. |
|
Headers |
Objekt | Dette felt indeholder nøgle-/værdipar, der definerer anmodningsheaderne. | |
QueryParameters |
Objekt | Dette felt indeholder nøgle-/værdipar, der definerer anmodningsforespørgselsparametrene. | |
StartTimeAttributeName |
Sand, når værdien EndTimeAttributeName er angivet. |
String | Dette felt definerer navnet på forespørgselsparameteren for starttidspunktet for forespørgslen. Du kan få mere at vide ved at gå til StartTimeAttributeName eksempel. |
EndTimeAttributeName |
Sand, når StartTimeAttributeName er angivet. |
String | Dette felt definerer navnet på forespørgselsparameteren for sluttidspunktet for forespørgslen. |
QueryTimeIntervalAttributeName |
String | Dette felt bruges, hvis slutpunktet kræver et specialiseret format til at forespørge dataene i en tidsramme. Brug denne egenskab sammen med parametrene QueryTimeIntervalPrepend og QueryTimeIntervalDelimiter . Du kan få mere at vide ved at gå til QueryTimeIntervalAttributeName eksempel. |
|
QueryTimeIntervalPrepend |
Sand, når QueryTimeIntervalAttributeName er angivet. |
String | Reference QueryTimeIntervalAttributeName. |
QueryTimeIntervalDelimiter |
Sand, når QueryTimeIntervalAttributeName er angivet. |
String | Reference QueryTimeIntervalAttributeName. |
QueryParametersTemplate |
String | Dette felt refererer til den forespørgselsskabelon, der skal bruges, når parametre overføres i avancerede scenarier. For eksempel: "queryParametersTemplate": "{'cid': 1234567, 'cmd': 'reporting', 'format': 'siem', 'data': { 'from': '{_QueryWindowStartTime}', 'to': '{_QueryWindowEndTime}'}, '{_APIKeyName}': '{_APIKey}'}". |
|
InitialCheckpointTimeUtc |
DateTime (UTC) | Angiver starttidspunktet for forespørgslen for den allerførste forespørgsel, når der ikke findes et gemt kontrolpunkt. Når et kontrolpunkt bevares efter den første vellykkede afstemning, ignoreres denne værdi. Denne indstilling træder kun i kraft, når connectorens anmodningskonfiguration definerer en forespørgselsparameter for starttidspunkt (f.eks startTimeAttributeName . eller {_QueryWindowStartTime} erstatningstokenet) uden en tilsvarende sluttidspunktsparameter. Det påvirker ikke forbindelser, der udelukkende er afhængige af sideinddelingsmarkører eller tokens. Format: ISO 8601 UTC datetime (f.eks. 2024-01-15T00:00:00Z). |
Når API'en kræver komplekse parametre, skal du bruge queryParameters eller queryParametersTemplate. Disse kommandoer omfatter nogle indbyggede variabler.
| Indbygget variabel | Til brug i queryParameters |
Til brug i queryParametersTemplate |
|---|---|---|
_QueryWindowStartTime |
Ja | Ja |
_QueryWindowEndTime |
Ja | Ja |
_APIKeyName |
Nej | Ja |
_APIKey |
Nej | Ja |
Eksempel på StartTimeAttributeName
Overvej dette eksempel:
StartTimeAttributeName=fromEndTimeAttributeName=untilApiEndpoint=https://www.example.com
Forespørgslen, der sendes til fjernserveren, er: https://www.example.com?from={QueryTimeFormat}&until={QueryTimeFormat + QueryWindowInMin}.
Eksempel på QueryTimeIntervalAttributeName
Overvej dette eksempel:
QueryTimeIntervalAttributeName=intervalQueryTimeIntervalPrepend=time:QueryTimeIntervalDelimiter=..ApiEndpoint=https://www.example.com
Forespørgslen, der sendes til fjernserveren, er: https://www.example.com?interval=time:{QueryTimeFormat}..{QueryTimeFormat + QueryWindowInMin}.
Eksempel på RateLimitConfig
Overvej dette eksempel:
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
}
}
Når svaret indeholder overskrifter med hastighedsgrænser, kan connectoren bruge disse oplysninger til at justere anmodningshastigheden.
Anmod om eksempler, der bruger Microsoft Graph som datakilde-API
Dette eksempel forespørger meddelelser med en filterforespørgselsparameter. Du kan få flere oplysninger under Forespørgselsparametre for Microsoft Graph API.
"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 "
}
I det forrige eksempel sendes en GET anmodning til https://graph.microsoft.com/v1.0/me/messages?filter=receivedDateTime gt {time of request} and receivedDateTime lt 2019-09-01T17:00:00.0000000. Tidsstemplet opdateres for hver queryWindowInMin gang.
Du opnår de samme resultater med dette eksempel:
"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}"
}
}
Der er en anden mulighed for situationer, hvor datakilden forventer to forespørgselsparametre (én for starttidspunktet og én for sluttidspunktet).
Eksempel:
"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",
}
Denne indstilling sender en GET anmodning til https://graph.microsoft.com/me/calendarView?startDateTime=2019-09-01T09:00:00.0000000&endDateTime=2019-09-01T17:00:00.0000000.
I forbindelse med komplekse forespørgsler skal du bruge QueryParametersTemplate. I dette eksempel sendes en POST anmodning med parametre i brødteksten:
"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}))\"}"
}
Svarkonfiguration
Definer, hvordan din dataconnector håndterer svar ved hjælp af følgende parametre:
| Feltet | Påkrævet | Type | Beskrivelse |
|---|---|---|---|
EventsJsonPaths |
Sandt | Liste over strenge | Definerer stien til meddelelsen i svar-JSON. Et JSON-stiudtryk angiver en sti til et element eller et sæt elementer i en JSON-struktur. |
SuccessStatusJsonPath |
String | Definerer stien til den vellykkede meddelelse i svar-JSON. Når denne parameter er defineret, skal parameteren SuccessStatusValue også defineres. |
|
SuccessStatusValue |
String | Definerer stien til succesmeddelelsesværdien i svar-JSON. | |
IsGzipCompressed |
Boolesk | Bestemmer, om svaret komprimeres i en GZIP-fil. | |
format |
Sandt | String | Bestemmer, om formatet er json, csveller xml. |
CompressionAlgo |
String | Definerer algoritmen for komprimering, enten multi-gzip eller deflate. For GZIP-komprimeringsalgoritmen skal du konfigurere IsGzipCompressed til i stedet for at True angive en værdi for denne parameter. |
|
CsvDelimiter |
String | Referencer, hvis svarformatet er CSV, og du vil ændre standardseparatoren for CSV for ",". |
|
HasCsvBoundary |
Boolesk | Angiver, om CSV-dataene har en grænse. | |
HasCsvHeader |
Boolesk | Angiver, om CSV-dataene har en header. Standarden er True. |
|
CsvEscape |
String | Definerer et escape-tegn for en feltgrænse. Standarden er "En CSV med overskrifter id,name,avg og en række data, der indeholder mellemrum, f.eks 1,"my name",5.5 . kræver " feltgrænsen. |
|
ConvertChildPropertiesToArray |
Boolesk | Henviser til et særligt tilfælde, hvor fjernserveren returnerer et objekt i stedet for en liste over hændelser, hvor hver egenskab indeholder data. |
Bemærk!
CSV-formattypen fortolkes af specifikationen RFC4180 .
Eksempler på svarkonfiguration
Der forventes et serversvar i JSON-format. Svaret indeholder de ønskede data i egenskabsværdien.
Svaregenskabens status angiver kun, at dataene skal indtages, hvis værdien er success.
"response": {
"EventsJsonPaths ": ["$.value"],
"format": "json",
"SuccessStatusJsonPath": "$.status",
"SuccessStatusValue": "success",
"IsGzipCompressed": true
}
Det forventede svar i dette eksempel forbereder en CSV-fil uden header.
"response": {
"EventsJsonPaths ": ["$"],
"format": "csv",
"HasCsvHeader": false
}
Konfiguration af sideopdeling
Når datakilden ikke kan sende hele svarets nyttedata på én gang, skal CCF-dataconnectoren vide, hvordan dele af dataene modtages på svarsider. De sideinddelingstyper, du kan vælge imellem, er:
| Sideinddelingstype | Beslutningsfaktor |
|---|---|
| Har API-svaret links til næste og forrige sider? | |
| Har API-svaret et token eller en markør for de næste og forrige sider? | |
| Understøtter API-svaret en parameter for det antal objekter, der skal springes over ved sideinddeling? | |
| Understøtter API-svaret en parameter for det antal objekter, der skal returneres? |
Konfigurer LinkHeader eller PersistentLinkHeader
Den mest almindelige sideinddelingstype er, når en API til en serverdatakilde leverer URL-adresser til de næste og forrige sider med data. Du kan få flere oplysninger om specifikationen for linkheader under RFC 5988.
LinkHeader sideopdeling betyder, at API-svaret omfatter enten:
-
LinkHTTP-svarheaderen. - En JSON-sti til at hente linket fra svarets brødtekst.
PersistentLinkHeader-type-sideinddeling har de samme egenskaber som LinkHeader, bortset fra at linkheaderen bevares i back end-lageret. Denne indstilling aktiverer sideinddelingslinks på tværs af forespørgselsvinduer.
Nogle API'er understøtter f.eks. ikke start- eller sluttidspunkter for forespørgsler. De understøtter i stedet en markør på serversiden. Du kan bruge faste sidetyper til at huske markøren på serversiden. Du kan få flere oplysninger under Hvad er en markør?.
Bemærk!
Der kan kun køres PersistentLinkHeader én forespørgsel for connectoren for at undgå racebetingelser på servermarkøren. Dette problem kan påvirke ventetiden.
| Feltet | Påkrævet | Type | Beskrivelse |
|---|---|---|---|
LinkHeaderTokenJsonPath |
Falsk | String | Brug denne egenskab til at angive, hvor værdien i svarteksten skal hentes. Hvis datakilden f.eks. returnerer følgende JSON: { nextPage: "foo", value: [{data}]}, er $.nextPageværdien LinkHeaderTokenJsonPath . |
PageSize |
Falsk | Heltal | Brug denne egenskab til at bestemme antallet af hændelser pr. side. |
PageSizeParameterName |
Falsk | String | Brug dette navn til forespørgselsparameteren til at angive sidestørrelsen. |
PagingInfoPlacement |
Falsk | String | Brug denne egenskab til at bestemme, hvordan sideopdelingsoplysninger udfyldes. Accepterer enten QueryString eller RequestBody. |
PagingQueryParamOnly |
Falsk | Boolesk | Brug denne egenskab til at angive forespørgselsparametre. Hvis den er angivet til sand, udelades alle andre forespørgselsparametre undtagen sideopdeling af forespørgselsparametre. |
Her er nogle eksempler:
"paging": {
"pagingType": "LinkHeader",
"linkHeaderTokenJsonPath" : "$.metadata.links.next"
}
"paging": {
"pagingType" : "PersistentLinkHeader",
"pageSizeParameterName" : "limit",
"pageSize" : 500
}
Konfigurer NextPageUrl
NextPageUrl-type sideinddeling betyder, at API-svaret indeholder et komplekst link i svarteksten, der ligner LinkHeader, men URL-adressen er inkluderet i svarets brødtekst i stedet for headeren.
| Feltet | Påkrævet | Type | Beskrivelse |
|---|---|---|---|
PageSize |
Falsk | Heltal | Antallet af hændelser pr. side. |
PageSizeParameterName |
Falsk | String | Navnet på forespørgselsparameteren for sidestørrelsen. |
NextPageUrl |
Falsk | String | Felt, der kun bruges, hvis connectoren er til Coralogix-API'en. |
NextPageUrlQueryParameters |
Falsk | Objekt | Nøgle-/værdipar, der føjer en brugerdefineret forespørgselsparameter til hver anmodning for den næste side. |
NextPageParaName |
Falsk | String | Det næste sidenavn i anmodningen. |
HasNextFlagJsonPath |
Falsk | String | Stien til flagattributten HasNextPage . |
NextPageRequestHeader |
Falsk | String | Det næste sidehovednavn i anmodningen. |
NextPageUrlQueryParametersTemplate |
Falsk | String | Felt, der kun bruges, hvis connectoren er til Coralogix-API'en. |
PagingInfoPlacement |
Falsk | String | Felt, der bestemmer, hvordan sideopdelingsoplysninger udfyldes. Accepterer enten QueryString eller RequestBody. |
PagingQueryParamOnly |
Falsk | Boolesk | Felt, der bestemmer forespørgselsparametre. Hvis den er angivet til sand, udelades alle andre forespørgselsparametre undtagen sideopdeling af forespørgselsparametre. |
Eksempel:
"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\")}"
}
Konfigurer NextPageToken eller PersistentToken
NextPageToken-type sideinddeling bruger et token (en hash eller en markør), der repræsenterer tilstanden for den aktuelle side. Tokenet er inkluderet i API-svaret, og klienten føjer det til den næste anmodning for at hente den næste side. Denne metode bruges ofte, når serveren skal bevare den nøjagtige tilstand mellem anmodninger.
PersistentToken sideinddeling bruger et token, der bevares på serversiden. Serveren husker det sidste token, som klienten hentede, og angiver det næste token i efterfølgende anmodninger. Klienten fortsætter, hvor den slap, også selvom den foretager nye anmodninger senere.
| Feltet | Påkrævet | Type | Beskrivelse |
|---|---|---|---|
PageSize |
Falsk | Heltal | Antal hændelser pr. side. |
PageSizeParameterName |
Falsk | String | Navn på forespørgselsparameter for sidestørrelsen. |
NextPageTokenJsonPath |
Falsk | String | JSON-sti til det næste sidetoken i svarets brødtekst. |
NextPageTokenResponseHeader |
Falsk | String | Felt, der angiver, at hvis NextPageTokenJsonPath er tomt, skal du bruge tokenet i dette overskriftsnavn til næste side. |
NextPageParaName |
Falsk | String | Felt, der bestemmer det næste sidenavn i anmodningen. |
HasNextFlagJsonPath |
Falsk | String | Felt, der definerer stien til en HasNextPage flagattribut, når det bestemmes, om der er flere sider tilbage i svaret. |
NextPageRequestHeader |
Falsk | String | Felt, der bestemmer det næste sidehovednavn i anmodningen. |
PagingInfoPlacement |
Falsk | String | Felt, der bestemmer, hvordan sideopdelingsoplysninger udfyldes. Accepterer enten QueryString eller RequestBody. |
PagingQueryParamOnly |
Falsk | Boolesk | Felt, der bestemmer forespørgselsparametre. Hvis den er angivet til sand, udelades alle andre forespørgselsparametre undtagen sideopdeling af forespørgselsparametre. |
Eksempler:
"paging": {
"pagingType" : "NextPageToken",
"nextPageRequestHeader" : "ETag",
"nextPageTokenResponseHeader" : "ETag"
}
"paging": {
"pagingType" : "PersistentToken",
"nextPageParaName" : "gta",
"nextPageTokenJsonPath" : "$.alerts[-1:]._id"
}
Konfigurer forskydning
Offset-type sideinddeling angiver det antal sider, der skal springes over, og en grænse for det antal hændelser, der skal hentes pr. side i anmodningen. Klienter henter et bestemt interval af elementer fra datasættet.
| Feltet | Påkrævet | Type | Beskrivelse |
|---|---|---|---|
PageSize |
Falsk | Heltal | Antal hændelser pr. side. |
PageSizeParameterName |
Falsk | String | Navn på forespørgselsparameter for sidestørrelsen. |
OffsetParaName |
Falsk | String | Navnet på den næste forespørgselsforespørgselsparameter. CCF beregner forskydningsværdien for hver anmodning (alle hændelser, der indtages + 1). |
PagingInfoPlacement |
Falsk | String | Felt, der bestemmer, hvordan sideopdelingsoplysninger udfyldes. Accepterer enten QueryString eller RequestBody. |
PagingQueryParamOnly |
Falsk | Boolesk | Felt, der bestemmer forespørgselsparametre. Hvis den er angivet til sand, udelades alle andre forespørgselsparametre undtagen sideopdeling af forespørgselsparametre. |
Eksempel:
"paging": {
"pagingType": "Offset",
"offsetParaName": "offset",
"pageSize": 50,
"pagingQueryParamOnly": true,
"pagingInfoPlacement": "QueryString"
}
Konfigurer CountBasedPaging
CountBasedPaging-type-sideinddeling gør det muligt for klienten at angive det antal elementer, der skal returneres i svaret. Denne mulighed er nyttig for API'er, der understøtter sideinddeling baseret på en optællingsparameter som en del af svarnyttedata.
| Feltet | Påkrævet | Type | Beskrivelse |
|---|---|---|---|
pageNumberParaName |
Sandt | String | Parameternavn på sidetallet i HTTP-anmodningen. |
PageSize |
Falsk | Heltal | Antal hændelser pr. side. |
ZeroBasedIndexing |
Falsk | Boolesk | Flag, der angiver, at antallet er nul baseret. |
HasNextFlagJsonPath |
Falsk | String | JSON-stien til flaget i HTTP-svarnyttedata, der angiver, at der er flere sider. |
TotalResultsJsonPath |
Falsk | String | JSON-stien for det samlede antal resultater i HTTP-svarnyttedataene. |
PageNumberJsonPath |
Falsk | String | JSON-stien til sidetallet i HTTP-svarnyttedataene. Påkrævet, hvis totalResultsJsonPath er angivet. |
PageCountJsonPath |
Falsk | String | JSON-stien til sideantallet i HTTP-svarnyttedata. Påkrævet, hvis totalResultsJsonPath er angivet. |
PagingInfoPlacement |
Falsk | String | Felt, der bestemmer, hvordan sideopdelingsoplysninger udfyldes. Accepterer enten QueryString eller RequestBody. |
PagingQueryParamOnly |
Falsk | Boolesk | Felt, der bestemmer forespørgselsparametre. Hvis den er angivet til sand, udelades alle andre forespørgselsparametre undtagen sideopdeling af forespørgselsparametre. |
Eksempel:
"paging": {
"pagingType" : "CountBasedPaging",
"pageNumberParaName" : "page",
"pageSize" : 10,
"zeroBasedIndexing" : true,
"hasNextFlagJsonPath" : "$.hasNext",
"totalResultsJsonPath" : "$.totalResults",
"pageNumberJsonPath" : "$.pageNumber",
"pageCountJsonPath" : "$.pageCount"
}
DCR-konfiguration
| Feltet | Påkrævet | Type | Beskrivelse |
|---|---|---|---|
DataCollectionEndpoint |
Sandt | String | Slutpunkt for dataindsamling (DCE). For eksempel: https://example.ingest.monitor.azure.com. |
DataCollectionRuleImmutableId |
Sandt | String | Det uforanderlige ID for DCR. Find den ved at få vist DCR-oprettelsessvaret eller ved hjælp af DCR-API'en. |
StreamName |
Sandt | String | Denne værdi er defineret streamDeclaration i DCR. Præfikset skal begynde med Custom-. |
Eksempel på CCF-dataconnector
Her er et eksempel på alle komponenterne i JSON til CCF-dataconnectoren:
{
"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": ["$"]
}
}
}