Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
U kunt een RestApiPoller gegevensconnector maken met het Codeless Connector Framework (CCF) met behulp van dit artikel als aanvulling op de documenten Microsoft Sentinel REST API voor gegevensconnectors.
Elke gegevensconnector vertegenwoordigt een specifieke verbinding van een Microsoft Sentinel-gegevensconnector. Eén gegevensconnector kan meerdere verbindingen hebben, waarmee gegevens van verschillende eindpunten worden opgehaald. U kunt de implementatiesjabloon voor de CCF-gegevensconnector voltooien met behulp van de JSON-configuratie die u met dit artikel maakt.
Zie Een connector zonder code maken voor Microsoft Sentinel voor meer informatie.
Gegevensconnectors maken of bijwerken
Zoek de nieuwste stabiele of preview-API-versie door te verwijzen naar de create bewerkingen of update in de REST API-documenten. Het verschil tussen de create bewerkingen en update is dat update de etag waarde is vereist.
PUT Methode:
https://management.azure.com/subscriptions/{{subscriptionId}}/resourceGroups/{{resourceGroupName}}/providers/Microsoft.OperationalInsights/workspaces/{{workspaceName}}/providers/Microsoft.SecurityInsights/dataConnectors/{{dataConnectorId}}?api-version={{apiVersion}}
URI-parameters
Zie Gegevensconnectors: URI-parameters maken of bijwerken voor meer informatie over de nieuwste API-versie.
| Naam | Beschrijving |
|---|---|
dataConnectorId |
De gegevensconnector-id. Het moet een unieke naam zijn die hetzelfde is als de name parameter in de aanvraagbody. |
resourceGroupName |
De naam van de resourcegroep, niet hoofdlettergevoelig. |
subscriptionId |
De id van het doelabonnement. |
workspaceName |
De naam van de werkruimte, niet de id. Het regex-patroon is ^[A-Za-z0-9][A-Za-z0-9-]+[A-Za-z0-9]$. |
api-version |
De API-versie die voor deze bewerking moet worden gebruikt. |
Aanvraagtekst
De aanvraagtekst voor een RestApiPoller CCF-gegevensconnector heeft de volgende structuur:
{
"name": "{{dataConnectorId}}",
"kind": "RestApiPoller",
"etag": "",
"properties": {
"connectorDefinitionName": "",
"auth": {},
"request": {},
"response": {},
"paging": "",
"dcrConfig": ""
}
}
RestApiPoller
RestApiPoller is een API poller CCF-gegevensconnector die u kunt gebruiken om paging, autorisatie en nettoladingen voor aanvragen/antwoorden voor uw gegevensbron aan te passen.
| Naam | Vereist | Type | Beschrijving |
|---|---|---|---|
name |
Waar | Tekenreeks | De unieke naam van de verbinding die overeenkomt met de URI-parameter. |
kind |
Waar | Tekenreeks | De kind waarde. Dit veld moet worden ingesteld op RestApiPoller. |
etag |
GUID | De etag waarde. Dit veld moet leeg zijn om een nieuwe connector te kunnen maken. Voor updatebewerkingen etag moet overeenkomen met de bestaande connector etag (GUID). |
|
properties.connectorDefinitionName |
Tekenreeks | De naam van de DataConnectorDefinition resource die de gebruikersinterfaceconfiguratie van de gegevensconnector definieert. Ga naar Definitie van gegevensconnector voor meer informatie. |
|
properties.auth |
Waar | Geneste JSON | De verificatie-eigenschappen voor het pollen van de gegevens. Ga naar Verificatieconfiguratie voor meer informatie. |
properties.request |
Waar | Geneste JSON | De nettolading van de aanvraag voor het pollen van de gegevens, zoals het API-eindpunt. Ga voor meer informatie naar Configuratie aanvragen. |
properties. response |
Waar | Geneste JSON | Het antwoordobject en het geneste bericht dat de API retourneert wanneer de gegevens worden gepeild. Ga naar Antwoordconfiguratie voor meer informatie. |
properties.paging |
Geneste JSON | De nettolading voor paginering bij het pollen van de gegevens. Ga voor meer informatie naar Paging-configuratie. | |
properties.dcrConfig |
Geneste JSON | De vereiste parameters wanneer de gegevens worden verzonden naar een regel voor gegevensverzameling (DCR). Ga naar DCR-configuratie voor meer informatie. |
Verificatieconfiguratie
De CCF ondersteunt de volgende verificatietypen:
Opmerking
CCF OAuth2-implementatie biedt geen ondersteuning voor referenties voor clientcertificaten.
Als aanbevolen procedure gebruikt u parameters in de verificatiesectie in plaats van referenties vast te coderen. Zie Vertrouwelijke invoer beveiligen voor meer informatie.
Als u de implementatiesjabloon wilt maken, die ook parameters gebruikt, moet u de parameters in deze sectie met een extra start [uitvoeren. Met deze stap kunnen de parameters een waarde toewijzen op basis van de interactie van de gebruiker met de connector. Zie Escape-tekens voor sjabloonexpressies voor meer informatie.
Als u wilt dat de referenties vanuit de gebruikersinterface worden ingevoerd, moet u in de connectorUIConfig sectie de gewenste parameters invoeren in instructions. Zie Naslaginformatie over gegevensconnectordefinities voor het Codeless Connector Framework voor meer informatie.
Basisverificatie
| Veld | Vereist | Type |
|---|---|---|
UserName |
Waar | Tekenreeks |
Password |
Waar | Tekenreeks |
Hier volgt een voorbeeld van basisverificatie die gebruikmaakt van parameters die zijn gedefinieerd in connectorUIconfig:
"auth": {
"type": "Basic",
"UserName": "[[parameters('username')]",
"Password": "[[parameters('password')]"
}
API-sleutel
| Veld | Vereist | Type | Beschrijving | Standaardwaarde |
|---|---|---|---|---|
ApiKey |
Waar | Tekenreeks | Geheime sleutel van de gebruiker. | |
ApiKeyName |
Tekenreeks | Naam van de URI-header die de ApiKey waarde bevat. |
Authorization |
|
ApiKeyIdentifier |
Tekenreeks | Tekenreekswaarde om het token voor te maken. | token |
|
IsApiKeyInPostPayload |
Booleaanse waarde | Waarde die bepaalt of het geheim in de POST hoofdtekst moet worden verzonden in plaats van de koptekst. |
false |
APIKey verificatievoorbeelden:
"auth": {
"type": "APIKey",
"ApiKey": "[[parameters('apikey')]",
"ApiKeyName": "X-MyApp-Auth-Header",
"ApiKeyIdentifier": "Bearer"
}
Het resultaat van dit voorbeeld is het geheim dat is gedefinieerd op basis van de gebruikersinvoer die is verzonden in de volgende header: X-MyApp-Auth-Header: Bearer apikey.
"auth": {
"type": "APIKey",
"ApiKey": "123123123",
}
In dit voorbeeld worden de standaardwaarden gebruikt en wordt de volgende header weergegeven: Authorization: token 123123123.
"auth": {
"type": "APIKey",
"ApiKey": "123123123",
"ApiKeyName": ""
}
Omdat ApiKeyName expliciet is ingesteld op "", is het resultaat de volgende header: Authorization: 123123123.
OAuth2
Het Codeless Connector Framework ondersteunt het verlenen van OAuth 2.0-autorisatiecode en clientreferenties. Het type autorisatiecodetoekenning wordt gebruikt door vertrouwelijke en openbare clients om een autorisatiecode uit te wisselen voor een toegangstoken.
Nadat de gebruiker via de omleidings-URL terugkeert naar de client, haalt de toepassing de autorisatiecode op van de URL en gebruikt deze om een toegangstoken aan te vragen.
| Veld | Vereist | Type | Beschrijving |
|---|---|---|---|
ClientId |
Waar. | Tekenreeks | De client-id. |
ClientSecret |
Waar. | Tekenreeks | Het clientgeheim. |
AuthorizationCode |
Waar wanneer de grantType waarde is authorization_code. |
Tekenreeks | Als het toekenningstype is, is deze veldwaarde de autorisatiecode die door de verificatieserver is authorization_codegeretourneerd. |
Scope |
Waar voor het toekenningstype authorization_code .Optioneel voor het toekenningstype client_credentials . |
Tekenreeks | Een door spaties gescheiden lijst met bereiken voor gebruikerstoestemming. Zie OAuth2-bereiken en -machtigingen voor meer informatie. |
RedirectUri |
Waar wanneer de grantType waarde is authorization_code. |
Tekenreeks | De URL voor omleiding moet zijn https://portal.azure.com/TokenAuthorize/ExtensionName/Microsoft_Azure_Security_Insights. |
GrantType |
Waar. | Tekenreeks | Het toekenningstype. Kan of client_credentialszijnauthorization_code. |
TokenEndpoint |
Waar. | Tekenreeks | De URL voor het uitwisselen van code met een geldig token in de authorization_code toekenning of een client-id en geheim met een geldig token in de client_credentials toekenning. |
TokenEndpointHeaders |
Object | Een optioneel sleutel-/waardeobject voor het verzenden van aangepaste headers naar de tokenserver. | |
TokenEndpointQueryParameters |
Object | Een optioneel sleutel-/waardeobject voor het verzenden van aangepaste queryparameters naar de tokenserver. | |
AuthorizationEndpoint |
Waar. | Tekenreeks | De URL voor gebruikerstoestemming voor de authorization_code stroom. |
AuthorizationEndpointHeaders |
Object | Een optioneel sleutel-/waardeobject voor het verzenden van aangepaste headers naar de verificatieserver. | |
AuthorizationEndpointQueryParameters |
Object | Een optioneel sleutel-waardepaar dat wordt gebruikt in een OAuth2-autorisatiecodestroomaanvraag. |
U kunt de verificatiecodestroom gebruiken om gegevens op te halen namens de machtigingen van een gebruiker. U kunt clientreferenties gebruiken om gegevens op te halen met toepassingsmachtigingen. De gegevensserver verleent toegang tot de toepassing. Omdat er geen gebruiker in de clientreferentiestroom is, is er geen autorisatie-eindpunt nodig, alleen een tokeneindpunt.
Hier volgt een voorbeeld van het OAuth2-toekenningstype 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 volgt een voorbeeld van het OAuth2-toekenningstype 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 -verificatie (JWT) ondersteunt het verkrijgen van tokens via gebruikersnaam- en wachtwoordreferenties en het gebruik ervan voor API-aanvragen.
Basisvoorbeeld
"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"
}
Referenties in POST-hoofdtekst (standaard)
"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"
}
Referenties in headers (basisverificatie)
"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
}
Referenties in headers (gebruikerstoken)
"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"
}
Volg deze verificatiestroom:
Referenties verzenden naar
TokenEndpointom het JWT-token te verkrijgen bij gebruik vanuserNameenpassword,IsCredentialsInHeaderswordt gebruikt om te bepalen waar referenties in de aanvraag moeten worden geplaatst.- If
IsCredentialsInHeaders: true: verzendt een basisverificatieheader metusername:password. - If
IsCredentialsInHeaders: false: hiermee worden referenties in een hoofdtekstPOSTverzonden.
- If
Pak het token uit met of
JwtTokenJsonPathuit de antwoordheader.De autorisatieheader voor de JWT-tokens is een constante en is altijd 'Autorisatie'.
| Veld | Vereist | Type | Beschrijving |
|---|---|---|---|
type |
Waar | Tekenreeks | Het type. Moet JwtToken |
userName |
Waar (als userToken niet wordt gebruikt) |
Object | Het sleutel-waardepaar voor de userName referentie. Als userName en password worden verzonden in de headeraanvraag, geeft u de value eigenschap op met de gebruikersnaam. Als userName en password worden verzonden in de hoofdtekstaanvraag, geeft u Key en op Value. |
password |
Waar (als userToken niet wordt gebruikt) |
Object | Het sleutel-waardepaar voor de wachtwoordreferentie. Als userName en password worden verzonden in de headeraanvraag, geeft u de value eigenschap op met de userName. Als userName en password worden verzonden in de hoofdtekstaanvraag, geeft u Key en op Value. |
userToken |
Waar (als userName niet wordt gebruikt) |
Tekenreeks | Het gebruikerstoken dat door de client wordt gegenereerd om het systeemtoken voor verificatie op te halen. |
UserTokenPrepend |
False | Tekenreeks | De waarde die aangeeft of tekst vóór het token moet worden voorbereid. Standaardinstelling: Bearer. |
NoAccessTokenPrepend |
False | Booleaanse waarde | Een toegangsvlag die aangeeft dat het token niets mag voorbereiden. |
TokenEndpointHttpMethod |
False | Tekenreeks | De HTTP-methode voor het tokeneindpunt. Dit kan of PostzijnGet. De standaardwaarde is Post. |
TokenEndpoint |
Waar | Tekenreeks | Het URL-eindpunt dat wordt gebruikt om het JWT-token te verkrijgen. |
IsCredentialsInHeaders |
Booleaanse waarde | De waarde die aangeeft of referenties moeten worden verzonden als een basisverificatieheader (true) versus een POST hoofdtekst (false), genegeerd bij gebruik van userToken. De standaardwaarde is false. |
|
IsJsonRequest |
Booleaanse waarde | De waarde die aangeeft of de aanvraag moet worden verzonden in JSON (header Content-Type = application/json) versus formuliergecodeerd (header Content-Type = application/x-www-form-urlencoded). De standaardwaarde is false. |
|
JwtTokenJsonPath |
Tekenreeks | De waarde die de JSONPath waarde aangeeft die moet worden gebruikt om het token uit het antwoord te extraheren. Bijvoorbeeld: $.access_token. |
|
JwtTokenInResponseHeader |
Booleaanse waarde | De waarde die aangeeft of het token moet worden geëxtraheerd uit de antwoordheader versus de hoofdtekst. De standaardwaarde is false. |
|
JwtTokenHeaderName. |
Tekenreeks | De waarde die de naam van de header aangeeft wanneer het token zich in de antwoordheader bevindt. De standaardwaarde is Authorization. |
|
JwtTokenIdentifier |
Tekenreeks | De id die wordt gebruikt om de JWT te extraheren uit een tokentekenreeks met een voorvoegsel. | |
QueryParameters |
Object | De aangepaste queryparameters die moeten worden opgenomen bij het verzenden van de aanvraag naar het tokeneindpunt. | |
Headers |
Object | De aangepaste headers die moeten worden opgenomen bij het verzenden van de aanvraag naar het tokeneindpunt. | |
RequestTimeoutInSeconds |
Geheel getal | De time-out van de aanvraag in seconden. De standaardwaarde is 100, met een maximumwaarde van 180. |
Opmerking
Beperkingen
- Verificatie van gebruikersnaam en wachtwoord vereist voor het verkrijgen van tokens
- Biedt geen ondersteuning voor API-tokenaanvragen op basis van sleutels
- Biedt geen ondersteuning voor aangepaste headerverificatie (zonder gebruikersnaam en wachtwoord)
Aanvraagconfiguratie
In de aanvraagsectie wordt gedefinieerd hoe de CCF-gegevensconnector aanvragen naar uw gegevensbron verzendt (bijvoorbeeld het API-eindpunt en hoe vaak dat eindpunt moet worden gepeild).
| Veld | Vereist | Type | Beschrijving |
|---|---|---|---|
ApiEndpoint |
Waar. | Tekenreeks | Dit veld bepaalt de URL voor de externe server en definieert het eindpunt waaruit gegevens moeten worden opgehaald. |
RateLimitQPS |
Geheel getal | Dit veld definieert het aantal aanroepen of query's dat in een seconde is toegestaan voor de eerste aanvraag. Deze is niet van toepassing op gepagineerde aanvragen. Als u paginering wilt beperken, stelt u ook in PaginatedCallsPerSecond. |
|
PaginatedCallsPerSecond |
Dubbel (0...1000) | Dit veld definieert het aantal aanroepen per seconde dat is toegestaan voor gepagineerde aanvragen voor de RESTful-API. Het introduceert een vertraging van (1000 / paginatedCallsPerSecond) milliseconden tussen elke gepagineerde API-aanroep. Deze beperking is alleen van toepassing op pagineringsaanvragen en staat los van RateLimitQPS, waarmee de initiële aanvraagsnelheid wordt bepaald. Dit wordt doorgaans dezelfde waarde ingesteld als RateLimitQPS om de frequentielimiet van de gegevensbron voor alle aanvragen te respecteren.
0 waarde betekent dat er geen pagineringsbeperking wordt toegepast. |
|
RateLimitConfig |
Object | Dit veld definieert de configuratie van de frequentielimiet voor de RESTful-API. Ga naar voorbeeld voor RateLimitConfig meer informatie. |
|
QueryWindowInMin |
Geheel getal | Dit veld definieert het beschikbare queryvenster in minuten. Het minimum is 1 minuut. De standaardwaarde is 5 minuten. | |
HttpMethod |
Tekenreeks | Dit veld definieert de API-methode: GET(standaard) of POST. |
|
QueryTimeFormat |
Tekenreeks | Dit veld definieert de datum- en tijdnotatie die het eindpunt (externe server) verwacht. De CCF gebruikt de huidige datum en tijd overal waar deze variabele wordt gebruikt. Mogelijke waarden zijn de constanten: UnixTimestamp, UnixTimestampInMillsof een andere geldige weergave van datum en tijd. Bijvoorbeeld: yyyy-MM-dd, MM/dd/yyyy HH:mm:ss.De standaardwaarde is ISO 8601 UTC. |
|
RetryCount |
Geheel getal (1...6) | Dit veld definieert dat waarden van 1 naar 6 nieuwe pogingen mogen worden hersteld na een fout. De standaardwaarde is 3. |
|
TimeoutInSeconds |
Geheel getal (1...180) | Dit veld definieert de time-out van de aanvraag in seconden. De standaardwaarde is 20. |
|
IsPostPayloadJson |
Booleaanse waarde | Dit veld bepaalt of de POST nettolading de JSON-indeling heeft. De standaardwaarde is false. |
|
Headers |
Object | Dit veld bevat sleutel-waardeparen waarmee de aanvraagheaders worden gedefinieerd. | |
QueryParameters |
Object | Dit veld bevat sleutel-waardeparen waarmee de queryparameters van de aanvraag worden gedefinieerd. | |
StartTimeAttributeName |
Waar wanneer de EndTimeAttributeName waarde is ingesteld. |
Tekenreeks | Dit veld definieert de naam van de queryparameter voor de begintijd van de query. Ga naar voorbeeld voor StartTimeAttributeName meer informatie. |
EndTimeAttributeName |
Waar wanneer StartTimeAttributeName is ingesteld. |
Tekenreeks | Dit veld definieert de naam van de queryparameter voor de eindtijd van de query. |
QueryTimeIntervalAttributeName |
Tekenreeks | Dit veld wordt gebruikt als het eindpunt een speciale indeling vereist voor het uitvoeren van query's op de gegevens in een tijdsbestek. Gebruik deze eigenschap met de QueryTimeIntervalPrepend parameters en QueryTimeIntervalDelimiter . Ga naar voorbeeld voor QueryTimeIntervalAttributeName meer informatie. |
|
QueryTimeIntervalPrepend |
Waar wanneer QueryTimeIntervalAttributeName is ingesteld. |
Tekenreeks | Verwijzing QueryTimeIntervalAttributeName. |
QueryTimeIntervalDelimiter |
Waar wanneer QueryTimeIntervalAttributeName is ingesteld. |
Tekenreeks | Verwijzing QueryTimeIntervalAttributeName. |
QueryParametersTemplate |
Tekenreeks | Dit veld verwijst naar de querysjabloon die moet worden gebruikt bij het doorgeven van parameters in geavanceerde scenario's. Bijvoorbeeld: "queryParametersTemplate": "{'cid': 1234567, 'cmd': 'reporting', 'format': 'siem', 'data': { 'from': '{_QueryWindowStartTime}', 'to': '{_QueryWindowEndTime}'}, '{_APIKeyName}': '{_APIKey}'}". |
|
InitialCheckpointTimeUtc |
DateTime (UTC) | Hiermee geeft u de begintijd van de query voor de eerste poll wanneer er geen opgeslagen controlepunt bestaat. Zodra een controlepunt is behouden na de eerste geslaagde poll, wordt deze waarde genegeerd. Deze instelling wordt alleen van kracht wanneer de aanvraagconfiguratie van de connector een begintijdqueryparameter (zoals startTimeAttributeName of het {_QueryWindowStartTime} vervangende token) definieert zonder een bijbehorende eindtijdparameter. Dit heeft geen invloed op connectors die uitsluitend afhankelijk zijn van pagineringscursors of tokens. Indeling: ISO 8601 UTC datetime (bijvoorbeeld 2024-01-15T00:00:00Z). |
Wanneer de API complexe parameters vereist, gebruikt u queryParameters of queryParametersTemplate. Deze opdrachten bevatten enkele ingebouwde variabelen.
| Ingebouwde variabele | Voor gebruik in queryParameters |
Voor gebruik in queryParametersTemplate |
|---|---|---|
_QueryWindowStartTime |
Ja | Ja |
_QueryWindowEndTime |
Ja | Ja |
_APIKeyName |
Nee | Ja |
_APIKey |
Nee | Ja |
Voorbeeld van StartTimeAttributeName
Bekijk dit voorbeeld:
StartTimeAttributeName=fromEndTimeAttributeName=untilApiEndpoint=https://www.example.com
De query die naar de externe server wordt verzonden, is: https://www.example.com?from={QueryTimeFormat}&until={QueryTimeFormat + QueryWindowInMin}.
Voorbeeld van QueryTimeIntervalAttributeName
Bekijk dit voorbeeld:
QueryTimeIntervalAttributeName=intervalQueryTimeIntervalPrepend=time:QueryTimeIntervalDelimiter=..ApiEndpoint=https://www.example.com
De query die naar de externe server wordt verzonden, is: https://www.example.com?interval=time:{QueryTimeFormat}..{QueryTimeFormat + QueryWindowInMin}.
Voorbeeld van RateLimitConfig
Bekijk dit voorbeeld:
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
}
}
Wanneer het antwoord frequentielimietheaders bevat, kan de connector deze informatie gebruiken om de aanvraagsnelheid aan te passen.
Voorbeelden aanvragen die Microsoft Graph gebruiken als de gegevensbron-API
In dit voorbeeld worden berichten met een filterqueryparameter opgevraagd. Zie Queryparameters van Microsoft Graph API voor meer informatie.
"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 "
}
In het vorige voorbeeld wordt een GET aanvraag verzonden naar https://graph.microsoft.com/v1.0/me/messages?filter=receivedDateTime gt {time of request} and receivedDateTime lt 2019-09-01T17:00:00.0000000. De tijdstempel wordt voor elke queryWindowInMin keer bijgewerkt.
U bereikt dezelfde resultaten met dit voorbeeld:
"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}"
}
}
Er is een andere optie voor situaties waarin de gegevensbron twee queryparameters verwacht (één voor begintijd en één voor eindtijd).
Voorbeeld:
"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",
}
Met deze optie wordt een GET aanvraag verzonden naar https://graph.microsoft.com/me/calendarView?startDateTime=2019-09-01T09:00:00.0000000&endDateTime=2019-09-01T17:00:00.0000000.
Gebruik QueryParametersTemplatevoor complexe query's . In dit voorbeeld wordt een POST aanvraag met parameters in de hoofdtekst verzonden:
"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}))\"}"
}
Antwoordconfiguratie
Definieer hoe uw gegevensconnector antwoorden verwerkt met behulp van de volgende parameters:
| Veld | Vereist | Type | Beschrijving |
|---|---|---|---|
EventsJsonPaths |
Waar | Lijst met tekenreeksen | Hiermee definieert u het pad naar het bericht in de antwoord-JSON. Een JSON-padexpressie geeft een pad naar een element of een set elementen in een JSON-structuur op. |
SuccessStatusJsonPath |
Tekenreeks | Definieert het pad naar het succesbericht in de antwoord-JSON. Wanneer deze parameter is gedefinieerd, moet de SuccessStatusValue parameter ook worden gedefinieerd. |
|
SuccessStatusValue |
Tekenreeks | Hiermee definieert u het pad naar de waarde van het succesbericht in de antwoord-JSON. | |
IsGzipCompressed |
Booleaanse waarde | Bepaalt of het antwoord is gecomprimeerd in een GZIP-bestand. | |
format |
Waar | Tekenreeks | Bepaalt of de notatie , csvof xmlisjson. |
CompressionAlgo |
Tekenreeks | Definieert het algoritme voor compressies, ofwel multi-gzip of deflate. Voor het GZIP-compressie-algoritme configureert IsGzipCompressed u om True in plaats van een waarde in te stellen voor deze parameter. |
|
CsvDelimiter |
Tekenreeks | Verwijzingen als de antwoordindeling CSV is en u het standaard-CSV-scheidingsteken van ","wilt wijzigen. |
|
HasCsvBoundary |
Booleaanse waarde | Geeft aan of de CSV-gegevens een grens hebben. | |
HasCsvHeader |
Booleaanse waarde | Geeft aan of de CSV-gegevens een header hebben. De standaardwaarde is True. |
|
CsvEscape |
Tekenreeks | Hiermee definieert u een escape-teken voor een veldgrens. De standaardwaarde is "Een CSV met kopteksten id,name,avg en een rij met gegevens met spaties, zoals 1,"my name",5.5 , vereist bijvoorbeeld de " veldgrens. |
|
ConvertChildPropertiesToArray |
Booleaanse waarde | Verwijst naar een speciaal geval waarin de externe server een object retourneert in plaats van een lijst met gebeurtenissen waarbij elke eigenschap gegevens bevat. |
Opmerking
Het csv-indelingstype wordt geparseerd door de RFC4180 specificatie.
Voorbeelden van antwoordconfiguratie
Er wordt een serverantwoord in JSON-indeling verwacht. Het antwoord bevat de aangevraagde gegevens in de eigenschapswaarde. De status van de antwoordeigenschap geeft aan dat de gegevens alleen moeten worden opgenomen als de waarde is success.
"response": {
"EventsJsonPaths ": ["$.value"],
"format": "json",
"SuccessStatusJsonPath": "$.status",
"SuccessStatusValue": "success",
"IsGzipCompressed": true
}
Het verwachte antwoord in dit voorbeeld bereidt zich voor op een CSV zonder header.
"response": {
"EventsJsonPaths ": ["$"],
"format": "csv",
"HasCsvHeader": false
}
Pagingconfiguratie
Wanneer de gegevensbron niet de volledige nettolading van het antwoord in één keer kan verzenden, moet de CCF-gegevensconnector weten hoe delen van de gegevens op antwoordpagina's moeten worden ontvangen. De wisseltypen waaruit u kunt kiezen, zijn:
| Pagingtype | Beslissingsfactor |
|---|---|
| Bevat het API-antwoord koppelingen naar de volgende en vorige pagina's? | |
| Heeft het API-antwoord een token of cursor voor de volgende en vorige pagina's? | |
| Ondersteunt het API-antwoord een parameter voor het aantal objecten dat moet worden overgeslagen tijdens het pageren? | |
| Ondersteunt het API-antwoord een parameter voor het aantal objecten dat moet worden geretourneerd? |
LinkHeader of PersistentLinkHeader configureren
Het meest voorkomende pagingtype is wanneer een gegevensbron-API van de server URL's levert aan de volgende en vorige pagina's met gegevens. Zie voor meer informatie over de koppelingskopspecificatieRFC 5988.
LinkHeader paging betekent dat het API-antwoord een van de volgende opties bevat:
- De
LinkHTTP-antwoordheader. - Een JSON-pad om de koppeling op te halen uit de hoofdtekst van het antwoord.
PersistentLinkHeader-type paging heeft dezelfde eigenschappen als LinkHeader, behalve dat de koppelingskop behouden blijft in de back-endopslag. Met deze optie kunt u koppelingen tussen queryvensters pagijnen.
Sommige API's bieden bijvoorbeeld geen ondersteuning voor begin- of eindtijden van query's. In plaats daarvan ondersteunen ze een cursor aan de serverzijde. U kunt permanente paginatypen gebruiken om de cursor aan de serverzijde te onthouden. Zie Wat is een cursor? voor meer informatie.
Opmerking
Er kan slechts één query voor de connector worden uitgevoerd om PersistentLinkHeader raceomstandigheden op de cursor aan de serverzijde te voorkomen. Dit probleem kan van invloed zijn op de latentie.
| Veld | Vereist | Type | Beschrijving |
|---|---|---|---|
LinkHeaderTokenJsonPath |
False | Tekenreeks | Gebruik deze eigenschap om aan te geven waar de waarde in de hoofdtekst van het antwoord moet worden opgehaald. Als de gegevensbron bijvoorbeeld de volgende JSON retourneert: { nextPage: "foo", value: [{data}]}, is $.nextPagede LinkHeaderTokenJsonPath waarde . |
PageSize |
False | Geheel getal | Gebruik deze eigenschap om het aantal gebeurtenissen per pagina te bepalen. |
PageSizeParameterName |
False | Tekenreeks | Gebruik deze naam van de queryparameter om de paginagrootte aan te geven. |
PagingInfoPlacement |
False | Tekenreeks | Gebruik deze eigenschap om te bepalen hoe paging-informatie wordt ingevuld. Accepteert of QueryStringRequestBody. |
PagingQueryParamOnly |
False | Booleaanse waarde | Gebruik deze eigenschap om queryparameters op te geven. Als deze optie is ingesteld op true, worden alle andere queryparameters, behalve wisselqueryparameters, weggelaten. |
Dit zijn enkele voorbeelden:
"paging": {
"pagingType": "LinkHeader",
"linkHeaderTokenJsonPath" : "$.metadata.links.next"
}
"paging": {
"pagingType" : "PersistentLinkHeader",
"pageSizeParameterName" : "limit",
"pageSize" : 500
}
NextPageUrl configureren
NextPageUrl-type paging betekent dat het API-antwoord een complexe koppeling bevat in de antwoordtekst, vergelijkbaar met LinkHeader, maar de URL wordt opgenomen in de antwoordtekst in plaats van de header.
| Veld | Vereist | Type | Beschrijving |
|---|---|---|---|
PageSize |
False | Geheel getal | Het aantal gebeurtenissen per pagina. |
PageSizeParameterName |
False | Tekenreeks | De naam van de queryparameter voor het paginaformaat. |
NextPageUrl |
False | Tekenreeks | Veld dat alleen wordt gebruikt als de connector voor de Coralogix-API is. |
NextPageUrlQueryParameters |
False | Object | Sleutel-waardeparen die een aangepaste queryparameter toevoegen aan elke aanvraag voor de volgende pagina. |
NextPageParaName |
False | Tekenreeks | De naam van de volgende pagina in de aanvraag. |
HasNextFlagJsonPath |
False | Tekenreeks | Het pad naar het HasNextPage kenmerk vlag. |
NextPageRequestHeader |
False | Tekenreeks | De naam van de volgende paginakoptekst in de aanvraag. |
NextPageUrlQueryParametersTemplate |
False | Tekenreeks | Veld dat alleen wordt gebruikt als de connector voor de Coralogix-API is. |
PagingInfoPlacement |
False | Tekenreeks | Veld dat bepaalt hoe paging-informatie wordt ingevuld. Accepteert of QueryStringRequestBody. |
PagingQueryParamOnly |
False | Booleaanse waarde | Veld waarmee queryparameters worden bepaald. Als deze optie is ingesteld op true, worden alle andere queryparameters, behalve wisselqueryparameters, weggelaten. |
Voorbeeld:
"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\")}"
}
NextPageToken of PersistentToken configureren
NextPageToken-type paginering maakt gebruik van een token (een hash of een cursor) die de status van de huidige pagina aangeeft. Het token is opgenomen in het API-antwoord en de client voegt het toe aan de volgende aanvraag om de volgende pagina op te halen. Deze methode wordt vaak gebruikt wanneer de server de exacte status tussen aanvragen moet behouden.
PersistentToken paginering maakt gebruik van een token dat de serverzijde blijft behouden. De server onthoudt het laatste token dat de client heeft opgehaald en geeft het volgende token op in volgende aanvragen. De client gaat verder waar hij gebleven was, zelfs als er later nieuwe aanvragen worden ingediend.
| Veld | Vereist | Type | Beschrijving |
|---|---|---|---|
PageSize |
False | Geheel getal | Aantal gebeurtenissen per pagina. |
PageSizeParameterName |
False | Tekenreeks | Queryparameternaam voor het paginaformaat. |
NextPageTokenJsonPath |
False | Tekenreeks | JSON-pad voor het token van de volgende pagina in de antwoordtekst. |
NextPageTokenResponseHeader |
False | Tekenreeks | Veld dat aangeeft dat als NextPageTokenJsonPath leeg is, het token in deze koptekstnaam voor de volgende pagina gebruikt. |
NextPageParaName |
False | Tekenreeks | Veld dat de naam van de volgende pagina in de aanvraag bepaalt. |
HasNextFlagJsonPath |
False | Tekenreeks | Veld dat het pad naar een HasNextPage markeringskenmerk definieert bij het bepalen of er meer pagina's in het antwoord worden overgelaten. |
NextPageRequestHeader |
False | Tekenreeks | Veld dat de naam van de volgende paginakoptekst in de aanvraag bepaalt. |
PagingInfoPlacement |
False | Tekenreeks | Veld dat bepaalt hoe paging-informatie wordt ingevuld. Accepteert of QueryStringRequestBody. |
PagingQueryParamOnly |
False | Booleaanse waarde | Veld waarmee queryparameters worden bepaald. Als deze optie is ingesteld op true, worden alle andere queryparameters, behalve wisselqueryparameters, weggelaten. |
Voorbeelden:
"paging": {
"pagingType" : "NextPageToken",
"nextPageRequestHeader" : "ETag",
"nextPageTokenResponseHeader" : "ETag"
}
"paging": {
"pagingType" : "PersistentToken",
"nextPageParaName" : "gta",
"nextPageTokenJsonPath" : "$.alerts[-1:]._id"
}
Offset configureren
Offset-type paginering geeft het aantal pagina's aan dat moet worden overgeslagen en een limiet voor het aantal gebeurtenissen dat per pagina in de aanvraag moet worden opgehaald. Clients halen een specifiek bereik met items op uit de gegevensset.
| Veld | Vereist | Type | Beschrijving |
|---|---|---|---|
PageSize |
False | Geheel getal | Aantal gebeurtenissen per pagina. |
PageSizeParameterName |
False | Tekenreeks | Queryparameternaam voor het paginaformaat. |
OffsetParaName |
False | Tekenreeks | De naam van de volgende aanvraagqueryparameter. De CCF berekent de offsetwaarde voor elke aanvraag (alle opgenomen gebeurtenissen + 1). |
PagingInfoPlacement |
False | Tekenreeks | Veld dat bepaalt hoe paging-informatie wordt ingevuld. Accepteert of QueryStringRequestBody. |
PagingQueryParamOnly |
False | Booleaanse waarde | Veld waarmee queryparameters worden bepaald. Als deze optie is ingesteld op true, worden alle andere queryparameters, behalve wisselqueryparameters, weggelaten. |
Voorbeeld:
"paging": {
"pagingType": "Offset",
"offsetParaName": "offset",
"pageSize": 50,
"pagingQueryParamOnly": true,
"pagingInfoPlacement": "QueryString"
}
CountBasedPaging configureren
CountBasedPaging-type paginering stelt de client in staat om het aantal items op te geven dat in het antwoord moet worden geretourneerd. Deze mogelijkheid is handig voor API's die paginering ondersteunen op basis van een count-parameter als onderdeel van de nettolading van het antwoord.
| Veld | Vereist | Type | Beschrijving |
|---|---|---|---|
pageNumberParaName |
Waar | Tekenreeks | Parameternaam van het paginanummer in de HTTP-aanvraag. |
PageSize |
False | Geheel getal | Aantal gebeurtenissen per pagina. |
ZeroBasedIndexing |
False | Booleaanse waarde | Vlag die aangeeft dat het aantal is gebaseerd op nul. |
HasNextFlagJsonPath |
False | Tekenreeks | Het JSON-pad van de vlag in de nettolading van het HTTP-antwoord dat aangeeft dat er meer pagina's zijn. |
TotalResultsJsonPath |
False | Tekenreeks | Het JSON-pad van het totale aantal resultaten in de nettolading van het HTTP-antwoord. |
PageNumberJsonPath |
False | Tekenreeks | Het JSON-pad van het paginanummer in de nettolading van het HTTP-antwoord. Vereist indien totalResultsJsonPath opgegeven. |
PageCountJsonPath |
False | Tekenreeks | Het JSON-pad van het aantal pagina's in de nettolading van het HTTP-antwoord. Vereist indien totalResultsJsonPath opgegeven. |
PagingInfoPlacement |
False | Tekenreeks | Veld dat bepaalt hoe paging-informatie wordt ingevuld. Accepteert of QueryStringRequestBody. |
PagingQueryParamOnly |
False | Booleaanse waarde | Veld waarmee queryparameters worden bepaald. Als deze optie is ingesteld op true, worden alle andere queryparameters, behalve wisselqueryparameters, weggelaten. |
Voorbeeld:
"paging": {
"pagingType" : "CountBasedPaging",
"pageNumberParaName" : "page",
"pageSize" : 10,
"zeroBasedIndexing" : true,
"hasNextFlagJsonPath" : "$.hasNext",
"totalResultsJsonPath" : "$.totalResults",
"pageNumberJsonPath" : "$.pageNumber",
"pageCountJsonPath" : "$.pageCount"
}
DCR-configuratie
| Veld | Vereist | Type | Beschrijving |
|---|---|---|---|
DataCollectionEndpoint |
Waar | Tekenreeks | Eindpunt voor gegevensverzameling (DCE). Bijvoorbeeld: https://example.ingest.monitor.azure.com. |
DataCollectionRuleImmutableId |
Waar | Tekenreeks | De onveranderbare DCR-id. U kunt deze vinden door het DCR-antwoord voor maken te bekijken of door de DCR-API te gebruiken. |
StreamName |
Waar | Tekenreeks | Deze waarde is de streamDeclaration gedefinieerd in de DCR. Het voorvoegsel moet beginnen met Custom-. |
Voorbeeld van CCF-gegevensconnector
Hier volgt een voorbeeld van alle onderdelen van de JSON van de CCF-gegevensconnector:
{
"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": ["$"]
}
}
}