Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Aby utworzyć RestApiPoller łącznik danych za pomocą struktury łącznika bez kodu (CCF), użyj tego odwołania jako dodatku do dokumentacji interfejsu API REST usługi Microsoft Sentinel dla łączników danych .
Każdy dataConnector reprezentuje określone połączenie łącznika danych usługi Microsoft Sentinel. Jeden łącznik danych może mieć wiele połączeń, które pobierają dane z różnych punktów końcowych. Konfiguracja JSON utworzona przy użyciu tego dokumentu referencyjnego służy do ukończenia szablonu wdrażania łącznika danych CCF.
Aby uzyskać więcej informacji, zobacz Tworzenie łącznika bez kodu dla usługi Microsoft Sentinel.
Łączniki danych — tworzenie lub aktualizowanie
Zapoznaj się z dokumentacją tworzenia lub aktualizowania w dokumentacji interfejsu API REST, aby znaleźć najnowszą stabilną lub zapoznawczą wersję interfejsu API. Różnica między operacją tworzenia i aktualizacji polega na tym, że aktualizacja wymaga wartości elementu etag .
PUT , metoda
https://management.azure.com/subscriptions/{{subscriptionId}}/resourceGroups/{{resourceGroupName}}/providers/Microsoft.OperationalInsights/workspaces/{{workspaceName}}/providers/Microsoft.SecurityInsights/dataConnectors/{{dataConnectorId}}?api-version={{apiVersion}}
Parametry identyfikatora URI
Aby uzyskać więcej informacji na temat najnowszej wersji interfejsu API, zobacz Łączniki danych — tworzenie lub aktualizowanie parametrów identyfikatora URI.
| Nazwa/nazwisko | opis |
|---|---|
| dataConnectorId | Identyfikator łącznika danych musi być unikatową nazwą i jest taki sam jak name parametr w treści żądania. |
| resourceGroupName | Nazwa grupy zasobów, a nie uwzględnia wielkości liter. |
| subscriptionId | Identyfikator subskrypcji docelowej. |
| workspaceName | Nazwa obszaru roboczego, a nie identyfikator. Wzorzec wyrażenia regularnego: ^[A-Za-z0-9][A-Za-z0-9-]+[A-Za-z0-9]$ |
| wersja interfejsu API | Wersja interfejsu API do użycia dla tej operacji. |
Treść żądania
Treść żądania dla łącznika RestApiPoller danych CCF ma następującą strukturę:
{
"name": "{{dataConnectorId}}",
"kind": "RestApiPoller",
"etag": "",
"properties": {
"connectorDefinitionName": "",
"auth": {},
"request": {},
"response": {},
"paging": "",
"dcrConfig": ""
}
}
RestApiPoller
RestApiPoller reprezentuje łącznik danych interfejsu API Poller CCF, w którym można dostosować ładunki stronicowania, autoryzacji i żądania/odpowiedzi dla źródła danych.
| Nazwa/nazwisko | Wymagania | Typ | opis |
|---|---|---|---|
| nazwa | Prawda | ciąg | Unikatowa nazwa połączenia zgodnego z parametrem identyfikatora URI |
| rodzaj | Prawda | ciąg | Musi być RestApiPoller |
| etag | GUID | Pozostaw wartość pustą do utworzenia nowych łączników. W przypadku operacji aktualizacji element etag musi być zgodny z identyfikatorem etag istniejącego łącznika (GUID). | |
| properties.connectorDefinitionName | ciąg | Nazwa zasobu DataConnectorDefinition definiującego konfigurację interfejsu użytkownika łącznika danych. Aby uzyskać więcej informacji, zobacz Definicja łącznika danych. | |
| Właściwości.Auth | Prawda | Zagnieżdżony kod JSON | Opisuje właściwości uwierzytelniania do sondowania danych. Aby uzyskać więcej informacji, zobacz Konfiguracja uwierzytelniania. |
| Właściwości.prosić | Prawda | Zagnieżdżony kod JSON | Opisuje ładunek żądania do sondowania danych, takich jak punkt końcowy interfejsu API. Aby uzyskać więcej informacji, zobacz konfiguracja żądania. |
| Właściwości.odpowiedź | Prawda | Zagnieżdżony kod JSON | Opisuje obiekt odpowiedzi i zagnieżdżony komunikat zwrócony z interfejsu API podczas sondowania danych. Aby uzyskać więcej informacji, zobacz konfiguracja odpowiedzi. |
| Właściwości.stronicowanie | Zagnieżdżony kod JSON | Opisuje ładunek stronicowania podczas sondowania danych. Aby uzyskać więcej informacji, zobacz Konfiguracja stronicowania. | |
| Właściwości.dcrConfig | Zagnieżdżony kod JSON | Wymagane parametry, gdy dane są wysyłane do reguły zbierania danych (DCR). Aby uzyskać więcej informacji, zobacz Konfiguracja kontrolera domeny. |
Konfiguracja uwierzytelniania
Program CCF obsługuje następujące typy uwierzytelniania:
Uwaga
Implementacja protokołu OAuth2 programu CCF nie obsługuje poświadczeń certyfikatu klienta.
Najlepszym rozwiązaniem jest użycie parametrów w sekcji uwierzytelniania zamiast poświadczeń kodowania na stałe. Aby uzyskać więcej informacji, zobacz Zabezpieczanie poufnych danych wejściowych.
Aby utworzyć szablon wdrożenia, który używa również parametrów, należy poznać parametry w tej sekcji z dodatkowym początkowym elementem [. Dzięki temu parametry mogą przypisywać wartość na podstawie interakcji użytkownika z łącznikiem. Aby uzyskać więcej informacji, zobacz Znaki ucieczki wyrażeń szablonu.
Aby umożliwić podanie poświadczeń z interfejsu użytkownika, connectorUIConfig sekcja wymaga instructions odpowiednich parametrów. Aby uzyskać więcej informacji, zobacz Dokumentacja definicji łącznika danych dla struktury łączników bez kodu.
Uwierzytelnianie podstawowe
| Pole | Wymagania | Typ |
|---|---|---|
| Nazwa użytkownika | Prawda | ciąg |
| Hasło | Prawda | ciąg |
Przykład uwierzytelniania podstawowego przy użyciu parametrów zdefiniowanych w programie connectorUIconfig:
"auth": {
"type": "Basic",
"UserName": "[[parameters('username')]",
"Password": "[[parameters('password')]"
}
ApiKey
| Pole | Wymagania | Typ | opis | Domyślna wartość |
|---|---|---|---|---|
| Klucz apiKlucz | Prawda | ciąg | klucz tajny użytkownika | |
| ApiKeyName | ciąg | nazwa nagłówka identyfikatora URI zawierającego wartość ApiKey | Authorization |
|
| ApiKeyIdentifier | ciąg | wartość ciągu, aby wstępnie otworzyć token | token |
|
| IsApiKeyInPostPayload | typ logiczny (boolowski) | wysyłanie wpisu tajnego w treści POST zamiast nagłówka | false |
Przykłady uwierzytelniania interfejsu APIKey:
"auth": {
"type": "APIKey",
"ApiKey": "[[parameters('apikey')]",
"ApiKeyName": "X-MyApp-Auth-Header",
"ApiKeyIdentifier": "Bearer"
}
Ten przykład powoduje wpis tajny zdefiniowany z danych wejściowych użytkownika wysyłanych w następującym nagłówku: X-MyApp-Auth-Header: Bearer apikey
"auth": {
"type": "APIKey",
"ApiKey": "123123123",
}
W tym przykładzie użyto wartości domyślnych i zostanie przedstawiony następujący nagłówek: Autoryzacja: token 123123123
"auth": {
"type": "APIKey",
"ApiKey": "123123123",
"ApiKeyName": ""
}
Ponieważ parametr ApiKeyName jest jawnie ustawiony na ""wartość , wynikiem jest następujący nagłówek: Autoryzacja: 123123123
Uwierzytelnianie OAuth2
Struktura łącznika bez kodu obsługuje udzielanie kodu autoryzacji OAuth 2.0 i poświadczenia klienta. Typ udzielania kodu autoryzacji jest używany przez poufnych i publicznych klientów do wymiany kodu autoryzacji dla tokenu dostępu. Po powrocie użytkownika do klienta za pośrednictwem adresu URL przekierowania aplikacja pobierze kod autoryzacji z adresu URL i użyje go do żądania tokenu dostępu.
| Pole | Wymagania | Typ | opis |
|---|---|---|---|
| ClientId | Prawda | Sznurek | Identyfikator klienta |
| ClientSecret | Prawda | Sznurek | Klucz tajny klienta |
| Kod autoryzacji | Wartość true, gdy grantType = authorization_code |
Sznurek | Jeśli typem udzielenia jest authorization_code ta wartość pola, będzie kod autoryzacji zwrócony z usługi uwierzytelniania. |
| Zakres | True dla typu udzielenia authorization_codeopcjonalnie dla typu udzielenia client_credentials |
Sznurek | Rozdzielona spacjami lista zakresów dla zgody użytkownika. Aby uzyskać więcej informacji, zobacz Zakresy i uprawnienia OAuth2. |
| Identyfikator Przekierowanie | Wartość true, gdy grantType = authorization_code |
Sznurek | Adres URL przekierowania musi mieć wartość https://portal.azure.com/TokenAuthorize/ExtensionName/Microsoft_Azure_Security_Insights |
| GrantType | Prawda | Sznurek |
authorization_code lub client_credentials |
| TokenEndpoint | Prawda | Sznurek | Adres URL wymiany kodu z prawidłowym tokenem w authorization_code ramach udzielenia lub identyfikatora klienta i wpisu tajnego z prawidłowym tokenem w client_credentials przyznaniu. |
| TokenEndpointHeaders | Objekt | Opcjonalny obiekt wartości klucza do wysyłania niestandardowych nagłówków do serwera tokenów | |
| TokenEndpointQueryParameters | Objekt | Opcjonalny obiekt wartości klucza do wysyłania parametrów zapytania niestandardowego do serwera tokenów | |
| Punkt autoryzacji | Prawda | Sznurek | Adres URL zgody użytkownika na authorization_code przepływ |
| AuthorizationEndpointHeaders | Objekt | Opcjonalny obiekt wartości klucza do wysyłania nagłówków niestandardowych do serwera uwierzytelniania | |
| Parametry zapytania punktu końcowego autoryzacji | Objekt | Opcjonalna para wartości klucza używana w żądaniu przepływu kodu autoryzacji OAuth2 |
Przepływ kodu uwierzytelniania służy do pobierania danych w imieniu uprawnień użytkownika, a poświadczenia klienta są przeznaczone do pobierania danych z uprawnieniami aplikacji. Serwer danych udziela dostępu do aplikacji. Ponieważ w przepływie poświadczeń klienta nie ma żadnego użytkownika, nie jest wymagany żaden punkt końcowy autoryzacji, tylko punkt końcowy tokenu.
Przykład: typ udzielania protokołu 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"
}
Przykład: typ udzielania protokołu 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
Uwierzytelnianie JSON Web Token (JWT) obsługuje uzyskiwanie tokenów za pośrednictwem poświadczeń nazwy użytkownika/hasła i używanie ich na potrzeby żądań interfejsu API.
Podstawowy przykład:
"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"
}
Poświadczenia w treści POST (ustawienie domyślne):
"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"
}
Poświadczenia w nagłówkach (uwierzytelnianie podstawowe):
"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
}
Poświadczenia w nagłówkach (token użytkownika):
"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"
}
Przepływ uwierzytelniania:
Wysyłanie poświadczeń do uzyskiwania
TokenEndpointtokenu JWT- Jeśli
IsCredentialsInHeaders: true: wysyła nagłówek uwierzytelniania podstawowego z nazwą użytkownika:password - Jeśli
IsCredentialsInHeaders: false: wysyła poświadczenia w treści POST
- Jeśli
Wyodrębnianie tokenu przy użyciu
JwtTokenJsonPathnagłówka odpowiedzi lub z nagłówka odpowiedziUżywanie tokenu w kolejnych żądaniach interfejsu API z
ApiKeyNamenagłówkiem
Właściwości:
| Pole | Wymagania | Typ | opis |
|---|---|---|---|
| type | Prawda | Sznurek | Musi być JwtToken |
| userName (nazwa użytkownika) | True (jeśli parametr userToken nie jest używany) | Objekt | Para klucz-wartość dla poświadczeń nazwy użytkownika. Jeśli userName i password są wysyłane w żądaniu nagłówka value , określ właściwość z nazwą użytkownika. Jeśli userName żądanie treści zostanie wysłane i password wysłane, określ element Key i Value |
| hasło | True (jeśli parametr userToken nie jest używany) | Objekt | Para klucz-wartość dla poświadczeń hasła. Jeśli userName i password są wysyłane w żądaniu nagłówka value , określ właściwość z nazwą użytkownika. Jeśli userName żądanie treści zostanie wysłane i password wysłane, określ element Key i Value |
| userToken | True (jeśli parametr userName nie jest używany) | Sznurek | Token użytkownika wygenerowany przez klienta w celu uzyskania tokenu systemowego na potrzeby uwierzytelniania |
| UserTokenPrepend | Fałsz | Sznurek | Przed tokenem został wstępnie utworzony tekst. Przykład: Bearer |
| NoAccessTokenPrepend | Fałsz | logiczny | Flaga dostępu wskazująca, że token nie powinien poprzedzać żadnych elementów |
| TokenEndpointHttpMethod | Fałsz | Sznurek | Metoda HTTP do tokenu punktu końcowego. Może to być Get lub Post. Domyślnie: Post |
| TokenEndpoint | Prawda | Sznurek | Punkt końcowy adresu URL umożliwiający uzyskanie tokenu JWT |
| IsCredentialsInHeaders | logiczny | Wyślij poświadczenia jako nagłówek uwierzytelniania podstawowego (true) a treść POST (false). Domyślnie: false |
|
| IsJsonRequest | logiczny | Wyślij żądanie jako kod JSON (nagłówek Content-Type = application/json) a zakodowane w formularzu (nagłówek Content-Type = application/x-www-form-urlencoded). Domyślnie: false |
|
| JwtTokenJsonPath | Sznurek | JSONPath w celu wyodrębnienia tokenu z odpowiedzi (np. "$.access_token") |
|
| JwtTokenInResponseHeader | logiczny | Wyodrębnij token z nagłówka odpowiedzi a treścią. Domyślnie: false |
|
| JwtTokenHeaderName | Sznurek | Nazwa nagłówka, gdy token znajduje się w nagłówku odpowiedzi. Ustawienie domyślne: "Authorization" |
|
| JwtTokenIdentifier | Sznurek | Identyfikator używany do wyodrębniania zestawu JWT z prefiksowanego ciągu tokenu | |
| Parametry zapytań | Objekt | Niestandardowe parametry zapytania do uwzględnienia podczas wysyłania żądania do punktu końcowego tokenu | |
| Nagłówki | Objekt | Nagłówki niestandardowe do uwzględnienia podczas wysyłania żądania do punktu końcowego tokenu | |
| RequestTimeoutInSeconds | Liczba całkowita | Limit czasu oczekiwania na żądanie w sekundach. Ustawienie domyślne: 100, Maks. 180 |
Przepływ uwierzytelniania:
Wysyłanie poświadczeń do uzyskiwania
TokenEndpointtokenu JWT- Jeśli
IsCredentialsInHeaders: true: wysyła nagłówek uwierzytelniania podstawowego z nazwą użytkownika:password - Jeśli
IsCredentialsInHeaders: false: wysyła poświadczenia w treści POST
- Jeśli
Wyodrębnianie tokenu przy użyciu
JwtTokenJsonPathnagłówka odpowiedzi lub z nagłówka odpowiedziUżywanie tokenu w kolejnych żądaniach interfejsu API z
ApiKeyNamenagłówkiem
Uwaga
Limitations:
- Wymaga uwierzytelniania nazwy użytkownika/hasła w celu uzyskania tokenu
- Nie obsługuje żądań tokenów opartych na kluczach interfejsu API
- Uwierzytelnianie nagłówka niestandardowego (bez nazwy użytkownika/hasła) nie jest obsługiwane
Konfiguracja żądania
Sekcja żądania definiuje sposób wysyłania żądań przez łącznik danych CCF do źródła danych, takich jak punkt końcowy interfejsu API i częstotliwość sondowania tego punktu końcowego.
| Pole | Wymagania | Typ | opis |
|---|---|---|---|
| Punkt końcowy interfejsu API | Prawda | Sznurek | Adres URL serwera zdalnego. Definiuje punkt końcowy do ściągania danych. |
| RateLimitQPS | Liczba całkowita | Definiuje liczbę wywołań lub zapytań dozwolonych w ciągu sekundy. | |
| RateLimitConfig | Objekt | Definiuje konfigurację limitu prędkości dla API RESTful. Zobacz przykład. | |
| ZapytanieWindowInMin | Liczba całkowita | Definiuje dostępne okno zapytania w ciągu kilku minut. Minimalna wartość to 1 minuta. Wartość domyślna to 5 minut. | |
| HttpMethod | Sznurek | Definiuje metodę interfejsu API: GET(wartość domyślna) lub POST |
|
| QueryTimeFormat | Sznurek | Definiuje format daty i godziny oczekiwany przez punkt końcowy (serwer zdalny). Program CCF używa bieżącej daty i godziny wszędzie tam, gdzie jest używana ta zmienna. Możliwe wartości to stałe: UnixTimestamp, UnixTimestampInMills lub dowolna inna prawidłowa reprezentacja daty i godziny, na przykład: yyyy-MM-dd, MM/dd/yyyy HH:mm:sswartość domyślna to ISO 8601 UTC |
|
| RetryCount | Liczba całkowita (1...6) | Definiuje 1 , aby ponawiać 6 próby, które mogą odzyskać po awarii. Wartość domyślna to 3. |
|
| Limit czasuInSeconds | Liczba całkowita (1...180) | Definiuje limit czasu żądania w sekundach. Wartość domyślna to 20 |
|
| IsPostPayloadJson | logiczny | Określa, czy ładunek POST jest w formacie JSON. Wartość domyślna to false |
|
| Nagłówki | Objekt | Pary klucz-wartość definiujące nagłówki żądania. | |
| Parametry zapytań | Objekt | Pary klucz-wartość definiujące parametry zapytania żądania. | |
| StartTimeAttributeName | Prawda, gdy EndTimeAttributeName jest ustawiona |
Sznurek | Definiuje nazwę parametru zapytania dla czasu rozpoczęcia zapytania. Zobacz przykład. |
| EndTimeAttributeName | Prawda, gdy StartTimeAttributeName jest ustawiona |
Sznurek | Definiuje nazwę parametru zapytania dla czasu zakończenia zapytania. |
| QueryTimeIntervalAttributeName | Sznurek | Jeśli punkt końcowy wymaga wyspecjalizowanego formatu do wykonywania zapytań dotyczących danych w przedziale czasu, użyj tej właściwości z parametrami QueryTimeIntervalPrepend i QueryTimeIntervalDelimiter . Zobacz przykład. |
|
| QueryTimeIntervalPrepend | Prawda, gdy QueryTimeIntervalAttributeName jest ustawiona |
Sznurek | Zobacz QueryTimeIntervalAttributeName |
| QueryTimeIntervalDelimiter | Prawda, gdy QueryTimeIntervalAttributeName jest ustawiona |
Sznurek | Zobacz QueryTimeIntervalAttributeName |
| QueryParametersTemplate | Sznurek | Szablon zapytania do użycia podczas przekazywania parametrów w zaawansowanych scenariuszach. br>Na przykład: "queryParametersTemplate": "{'cid': 1234567, 'cmd': 'reporting', 'format': 'siem', 'data': { 'from': '{_QueryWindowStartTime}', 'to': '{_QueryWindowEndTime}'}, '{_APIKeyName}': '{_APIKey}'}" |
Jeśli interfejs API wymaga złożonych parametrów, użyj queryParameters wartości lub queryParametersTemplate , która zawiera pewne wbudowane zmienne.
| wbudowana zmienna | do użycia w queryParameters |
do użycia w queryParametersTemplate |
|---|---|---|
_QueryWindowStartTime |
tak | tak |
_QueryWindowEndTime |
tak | tak |
_APIKeyName |
nie | tak |
_APIKey |
nie | tak |
Przykład startTimeAttributeName
Rozważ taki przykład:
StartTimeAttributeName=fromEndTimeAttributeName=untilApiEndpoint=https://www.example.com
Zapytanie wysyłane do serwera zdalnego to: https://www.example.com?from={QueryTimeFormat}&until={QueryTimeFormat + QueryWindowInMin}
Przykład QueryTimeIntervalAttributeName
Rozważ taki przykład:
QueryTimeIntervalAttributeName=intervalQueryTimeIntervalPrepend=time:QueryTimeIntervalDelimiter=..ApiEndpoint=https://www.example.com
Zapytanie wysyłane do serwera zdalnego to: https://www.example.com?interval=time:{QueryTimeFormat}..{QueryTimeFormat + QueryWindowInMin}
Przykład RateLimitConfig
Rozważ taki przykład:
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
}
}
Gdy odpowiedź zawiera nagłówki limitu szybkości, konektor może wykorzystać te informacje do regulacji swojej szybkości żądań.
Przykłady żądań przy użyciu programu Microsoft Graph jako interfejsu API źródła danych
Ten przykład wysyła zapytania do komunikatów z parametrem zapytania filtru. Aby uzyskać więcej informacji, zobacz Parametry zapytania interfejsu API programu Microsoft Graph.
"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 "
}
Poprzedni przykład wysyła GET żądanie do https://graph.microsoft.com/v1.0/me/messages?filter=receivedDateTime gt {time of request} and receivedDateTime lt 2019-09-01T17:00:00.0000000. Znacznik czasu jest aktualizowany za każdym queryWindowInMin razem.
Te same wyniki są osiągane w tym przykładzie:
"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}"
}
}
Inną opcją jest to, gdy źródło danych oczekuje 2 parametrów zapytania, jeden dla czasu rozpoczęcia i jeden dla czasu zakończenia.
Przykład:
"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",
}
Spowoduje to wysłanie GET żądania do https://graph.microsoft.com/me/calendarView?startDateTime=2019-09-01T09:00:00.0000000&endDateTime=2019-09-01T17:00:00.0000000
W przypadku złożonych zapytań użyj polecenia QueryParametersTemplate. W następnym przykładzie jest wysyłane POST żądanie z parametrami w treści.
Przykład:
"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}))\"}"
}
Konfiguracja odpowiedzi
Zdefiniuj obsługę odpowiedzi łącznika danych przy użyciu następujących parametrów:
| Pole | Wymagania | Typ | opis |
|---|---|---|---|
| EventsJsonPaths | Prawda | Lista ciągów | Definiuje ścieżkę do komunikatu w formacie JSON odpowiedzi. Wyrażenie ścieżki JSON określa ścieżkę do elementu lub zestawu elementów w strukturze JSON |
| SuccessStatusJsonPath | Sznurek | Definiuje ścieżkę do komunikatu o powodzeniu w formacie JSON odpowiedzi. Po zdefiniowaniu tego parametru SuccessStatusValue należy również zdefiniować parametr . |
|
| SuccessStatusValue | Sznurek | Definiuje ścieżkę do wartości komunikatu o powodzeniu w formacie JSON odpowiedzi | |
| IsGzipCompressed | logiczny | Określa, czy odpowiedź jest kompresowana w pliku gzip | |
| format | Prawda | Sznurek |
jsonlub lub csvxml |
| KompresjaAlgo | Sznurek | Algorytm kompresji lub multi-gzipdeflate. W przypadku algorytmu kompresji gzip wystarczy skonfigurować IsGzipCompressed wartość , aby zamiast ustawiać True wartość dla tego parametru. |
|
| CsvDelimiter | Sznurek | Jeśli format odpowiedzi to CSV i chcesz zmienić domyślny ogranicznik CSV "," |
|
| HasCsvBoundary | logiczny | Wskazuje, czy dane CSV mają granicę | |
| HasCsvHeader | logiczny | Wskazuje, czy dane CSV mają nagłówek, wartość domyślna to True |
|
| CsvEscape | Sznurek | Znak ucieczki dla granicy pola, wartość domyślna to "Na przykład plik CSV z nagłówkami i wierszem danych zawierających spacje id,name,avg , takie jak 1,"my name",5.5 wymaga " granicy pola. |
|
| ConvertChildPropertiesToArray | logiczny | Szczególny przypadek, w którym serwer zdalny zwraca obiekt zamiast listy zdarzeń, w których każda właściwość zawiera dane. |
Uwaga
Typ formatu CSV jest analizowany przez specyfikację RFC4180 .
Przykłady konfiguracji odpowiedzi
Oczekiwana jest odpowiedź serwera z formatem JSON z żądanymi danymi w wartości właściwości. Stan właściwości odpowiedzi wskazuje pozyskiwanie danych tylko wtedy, gdy wartość to success.
"response": {
"EventsJsonPaths ": ["$.value"],
"format": "json",
"SuccessStatusJsonPath": "$.status",
"SuccessStatusValue": "success",
"IsGzipCompressed": true
}
Oczekiwana odpowiedź w tym przykładzie przygotowuje się do pliku CSV bez nagłówka.
"response": {
"EventsJsonPaths ": ["$"],
"format": "csv",
"HasCsvHeader": false
}
Konfiguracja stronicowania
Gdy źródło danych nie może wysłać całego ładunku odpowiedzi jednocześnie, łącznik danych CCF musi wiedzieć, jak odbierać fragmenty danych na stronach odpowiedzi. Typy stronicowania do wyboru to:
| Typ stronicowania | czynnik decyzyjny |
|---|---|
| Czy odpowiedź interfejsu API zawiera linki do następnych i poprzednich stron? | |
| Czy odpowiedź interfejsu API ma token lub kursor dla następnych i poprzednich stron? | |
| Czy odpowiedź interfejsu API obsługuje parametr liczby obiektów do pominięcia podczas stronicowania? | |
| Czy odpowiedź interfejsu API obsługuje parametr liczby obiektów do zwrócenia? |
Konfigurowanie elementu LinkHeader lub PersistentLinkHeader
Najczęstszym typem stronicowania jest to, że interfejs API źródła danych serwera udostępnia adresy URL następnym i poprzednim stronom danych. Aby uzyskać więcej informacji na temat specyfikacji nagłówka linku, zobacz RFC 5988.
LinkHeader stronicowanie oznacza, że odpowiedź interfejsu API obejmuje:
-
Linknagłówek odpowiedzi HTTP - lub ścieżka JSON w celu pobrania linku z treści odpowiedzi.
PersistentLinkHeader stronicowanie ma te same właściwości co , z wyjątkiem tego, że LinkHeadernagłówek łącza jest utrwalany w magazynie zaplecza. Ta opcja umożliwia stronicowanie łączy w oknach zapytań. Na przykład niektóre interfejsy API nie obsługują czasów rozpoczęcia zapytania ani czasów zakończenia. Zamiast tego obsługują kursor po stronie serwera. Trwałe typy stron mogą służyć do zapamiętania kursora po stronie serwera. Aby uzyskać więcej informacji, zobacz Co to jest kursor?.
Uwaga
Dla łącznika może być uruchomione tylko jedno zapytanie z funkcją PersistentLinkHeader, aby uniknąć warunków wyścigu na kursorze po stronie serwera. Może to mieć wpływ na opóźnienie.
| Pole | Wymagania | Typ | opis |
|---|---|---|---|
| LinkHeaderTokenJsonPath | Fałsz | Sznurek | Użyj tej właściwości, aby wskazać, gdzie uzyskać wartość w treści odpowiedzi. Jeśli na przykład źródło danych zwróci następujący kod JSON: { nextPage: "foo", value: [{data}]}LinkHeaderTokenJsonPath będzie to $.nextPage |
| Pagesize | Fałsz | Liczba całkowita | Ile zdarzeń na stronę |
| PageSizeParameterName | Fałsz | Sznurek | Nazwa parametru zapytania dla rozmiaru strony |
| PagingInfoPlacement | Fałsz | Sznurek | Jak wypełniane są informacje o stronicowaniu. Akceptuje "QueryString" lub "RequestBody" |
| PagingQueryParamOnly | Fałsz | logiczny | Jeśli ustawiono na true, pominie wszystkie inne parametry zapytania oprócz parametrów stronicowania. |
Oto kilka przykładów:
"paging": {
"pagingType": "LinkHeader",
"linkHeaderTokenJsonPath" : "$.metadata.links.next"
}
"paging": {
"pagingType" : "PersistentLinkHeader",
"pageSizeParameterName" : "limit",
"pageSize" : 500
}
Konfigurowanie elementu NextPageUrl
NextPageUrl stronicowanie oznacza, że odpowiedź interfejsu API zawiera złożony link w treści odpowiedzi podobny do LinkHeader, ale adres URL znajduje się w treści odpowiedzi zamiast nagłówka.
| Pole | Wymagania | Typ | opis |
|---|---|---|---|
| Pagesize | Fałsz | Liczba całkowita | Ile zdarzeń na stronę |
| PageSizeParameterName | Fałsz | Sznurek | Nazwa parametru zapytania dla rozmiaru strony |
| NextPageUrl | Fałsz | Sznurek | Tylko wtedy, gdy łącznik jest przeznaczony dla interfejsu API Platformy Coralogix |
| NextPageUrlQueryParameters | Fałsz | Pary wartości klucza obiektu — dodawanie niestandardowego parametru zapytania do każdego żądania dla następnej strony | |
| NextPageParaName | Fałsz | Sznurek | Określa nazwę następnej strony w żądaniu. |
| HasNextFlagJsonPath | Fałsz | Sznurek | Definiuje ścieżkę do atrybutu flagi HasNextPage |
| NextPageRequestHeader | Fałsz | Sznurek | Określa nazwę nagłówka następnej strony w żądaniu. |
| NextPageUrlQueryParametersTemplate | Fałsz | Sznurek | Tylko wtedy, gdy łącznik jest przeznaczony dla interfejsu API Platformy Coralogix |
| PagingInfoPlacement | Fałsz | Sznurek | Jak wypełniane są informacje o stronicowaniu. Akceptuje "QueryString" lub "RequestBody" |
| PagingQueryParamOnly | Fałsz | logiczny | Jeśli ustawiono na true, pominie wszystkie inne parametry zapytania oprócz parametrów stronicowania. |
Przykład:
"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\")}"
}
Konfigurowanie elementu NextPageToken lub PersistentToken
NextPageToken stronicowanie używa tokenu (skrótu lub kursora), który reprezentuje stan bieżącej strony. Token jest uwzględniony w odpowiedzi interfejsu API, a klient dołącza go do następnego żądania, aby pobrać następną stronę. Ta metoda jest często używana, gdy serwer musi zachować dokładny stan między żądaniami.
PersistentToken stronicowanie używa tokenu utrwalanego po stronie serwera. Serwer zapamiętuje ostatni token pobrany przez klienta i udostępnia następny token w kolejnych żądaniach. Klient kontynuuje, gdzie został przerwany, nawet jeśli później wysyła nowe żądania.
| Pole | Wymagania | Typ | opis |
|---|---|---|---|
| Pagesize | Fałsz | Liczba całkowita | Ile zdarzeń na stronę |
| PageSizeParameterName | Fałsz | ciąg | Nazwa parametru zapytania dla rozmiaru strony |
| NextPageTokenJsonPath | Fałsz | ciąg | Ścieżka JSON dla tokenu następnej strony w treści odpowiedzi. |
| NextPageTokenResponseHeader | Fałsz | ciąg | Jeśli NextPageTokenJsonPath wartość jest pusta, użyj tokenu w tej nazwie nagłówka dla następnej strony. |
| NextPageParaName | Fałsz | ciąg | Określa nazwę następnej strony w żądaniu. |
| HasNextFlagJsonPath | Fałsz | ciąg | Definiuje ścieżkę do atrybutu flagi HasNextPage podczas określania, czy więcej stron pozostanie w odpowiedzi. |
| NextPageRequestHeader | Fałsz | ciąg | Określa nazwę nagłówka następnej strony w żądaniu. |
| PagingInfoPlacement | Fałsz | Sznurek | Jak wypełniane są informacje o stronicowaniu. Akceptuje "QueryString" lub "RequestBody" |
| PagingQueryParamOnly | Fałsz | logiczny | Jeśli ustawiono na true, pominie wszystkie inne parametry zapytania oprócz parametrów stronicowania. |
Przykłady:
"paging": {
"pagingType" : "NextPageToken",
"nextPageRequestHeader" : "ETag",
"nextPageTokenResponseHeader" : "ETag"
}
"paging": {
"pagingType" : "PersistentToken",
"nextPageParaName" : "gta",
"nextPageTokenJsonPath" : "$.alerts[-1:]._id"
}
Konfigurowanie przesunięcia
Offset stronicowanie określa liczbę stron do pominięcia i limit liczby zdarzeń do pobrania na stronę w żądaniu. Klienci pobierają określony zakres elementów z zestawu danych.
| Pole | Wymagania | Typ | opis |
|---|---|---|---|
| Pagesize | Fałsz | Liczba całkowita | Ile zdarzeń na stronę |
| PageSizeParameterName | Fałsz | Sznurek | Nazwa parametru zapytania dla rozmiaru strony |
| OffsetParaName | Fałsz | Sznurek | Następna nazwa parametru zapytania żądania. CCF oblicza wartość przesunięcia dla każdego żądania (wszystkie zdarzenia pozyskane + 1) |
| PagingInfoPlacement | Fałsz | Sznurek | Jak wypełniane są informacje o stronicowaniu. Akceptuje "QueryString" lub "RequestBody" |
| PagingQueryParamOnly | Fałsz | logiczny | Jeśli ustawiono na true, pominie wszystkie inne parametry zapytania oprócz parametrów stronicowania. |
Przykład:
"paging": {
"pagingType": "Offset",
"offsetParaName": "offset",
"pageSize": 50,
"pagingQueryParamOnly": true,
"pagingInfoPlacement": "QueryString"
}
Konfigurowanie funkcji CountBasedPaging
CountBasedPaging Umożliwia klientowi określenie liczby elementów, które mają być zwracane w odpowiedzi. Jest to przydatne w przypadku interfejsów API obsługujących stronicowanie na podstawie parametru count w ramach ładunku odpowiedzi.
| Pole | Wymagania | Typ | opis |
|---|---|---|---|
| pageNumberParaName | Prawda | Sznurek | Nazwa parametru numeru strony w żądaniu HTTP |
| Pagesize | Fałsz | Liczba całkowita | Ile zdarzeń na stronę |
| ZeroBasedIndexing | Fałsz | logiczny | Flaga wskazująca, czy liczba ma wartość zero |
| HasNextFlagJsonPath | Fałsz | Sznurek | Ścieżka JSON flagi w ładunku odpowiedzi HTTP, aby wskazać, że jest więcej stron |
| TotalResultsJsonPath | Fałsz | Sznurek | Ścieżka JSON całkowitej liczby wyników w ładunku odpowiedzi HTTP |
| PageNumberJsonPath | Fałsz | Sznurek | Wymagane, jeśli podano wartość totalResultsJsonPath. Ścieżka JSON numeru strony w ładunku odpowiedzi HTTP |
| PageCountJsonPath | Fałsz | Sznurek | Wymagane, jeśli podano wartość totalResultsJsonPath. Ścieżka JSON liczby stron w ładunku odpowiedzi HTTP |
| PagingInfoPlacement | Fałsz | Sznurek | Jak wypełniane są informacje o stronicowaniu. Akceptuje "QueryString" lub "RequestBody" |
| PagingQueryParamOnly | Fałsz | logiczny | Jeśli ustawiono na true, pominie wszystkie inne parametry zapytania oprócz parametrów stronicowania. |
Przykład:
"paging": {
"pagingType" : "CountBasedPaging",
"pageNumberParaName" : "page",
"pageSize" : 10,
"zeroBasedIndexing" : true,
"hasNextFlagJsonPath" : "$.hasNext",
"totalResultsJsonPath" : "$.totalResults",
"pageNumberJsonPath" : "$.pageNumber",
"pageCountJsonPath" : "$.pageCount"
}
Konfiguracja kontrolera domeny
| Pole | Wymagania | Typ | opis |
|---|---|---|---|
| DataCollectionEndpoint | Prawda | Sznurek | DCE (punkt końcowy zbierania danych) na przykład: https://example.ingest.monitor.azure.com. |
| DataCollectionRuleImmutableId | Prawda | Sznurek | Niezmienny identyfikator DCR. Znajdź go, wyświetlając odpowiedź tworzenia kontrolera domeny lub używając interfejsu API DCR |
| StreamName | Prawda | ciąg | Ta wartość jest zdefiniowana streamDeclaration w kontrolerze domeny (prefiks musi zaczynać się od custom-) |
Przykładowy łącznik danych CCF
Oto przykład wszystkich składników kodu JSON łącznika danych CCF.
{
"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": ["$"]
}
}
}