RestApiPoller-dataconnectorreference til Codeless Connector Framework

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:

  1. Send legitimationsoplysninger for at TokenEndpoint hente JWT-tokenet, når du bruger userName og password, bruges til at bestemme, IsCredentialsInHeaders hvor legitimationsoplysningerne skal placeres i anmodningen.

    • Hvis IsCredentialsInHeaders: true: Sender en grundlæggende godkendelsesheader med username:password.
    • If IsCredentialsInHeaders: false: Sender legitimationsoplysninger i en POST brødtekst.
  2. Udtræk tokenet ved hjælp JwtTokenJsonPath af eller fra svarheaderen.

  3. 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 = from
  • EndTimeAttributeName = until
  • ApiEndpoint = 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 = interval
  • QueryTimeIntervalPrepend = 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:

  • Link HTTP-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": ["$"]
      }
   }
}