Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Para criar um conector de RestApiPoller dados com o Codeless Connector Framework (CCF), use esta referência como um suplemento para os documentos Microsoft Sentinel REST API for Data Connectors .
Cada dataConnector um representa uma conexão específica de um conector de dados do Microsoft Sentinel. Um conector de dados pode ter várias conexões, que buscam dados de pontos de extremidade diferentes. A configuração JSON criada usando este documento de referência é usada para concluir o modelo de implantação para o conector de dados CCF.
Para obter mais informações, consulte Criar um conector sem código para o Microsoft Sentinel.
Conectores de dados - Criar ou atualizar
Consulte a operação Criar ou Atualizar nos documentos da API REST para encontrar a versão estável ou de visualização mais recente da API. A diferença entre a operação de criação e a operação de atualização é que a atualização requer o valor etag .
Método PUT
https://management.azure.com/subscriptions/{{subscriptionId}}/resourceGroups/{{resourceGroupName}}/providers/Microsoft.OperationalInsights/workspaces/{{workspaceName}}/providers/Microsoft.SecurityInsights/dataConnectors/{{dataConnectorId}}?api-version={{apiVersion}}
Parâmetros de URI
Para obter mais informações sobre a versão mais recente da API, consulte Conectores de dados - Criar ou atualizar parâmetros de URI.
| Nome | Descrição |
|---|---|
| dataConnectorId | O ID do conector de dados deve ser um nome exclusivo e é o mesmo que o name parâmetro no corpo da solicitação. |
| resourceGroupName | O nome do grupo de recursos, não diferencia maiúsculas de minúsculas. |
| ID de subscrição | A ID da assinatura de destino. |
| nome do espaço de trabalho | O nome do espaço de trabalho, não a ID. Padrão Regex: ^[A-Za-z0-9][A-Za-z0-9-]+[A-Za-z0-9]$ |
| API-versão | A versão da API a utilizar para esta operação. |
Corpo do pedido
O corpo da solicitação para um RestApiPoller conector de dados CCF tem a seguinte estrutura:
{
"name": "{{dataConnectorId}}",
"kind": "RestApiPoller",
"etag": "",
"properties": {
"connectorDefinitionName": "",
"auth": {},
"request": {},
"response": {},
"paging": "",
"dcrConfig": ""
}
}
RestApiPoller
O RestApiPoller representa um conector de dados CCF do API Poller onde você personaliza a paginação, a autorização e as cargas úteis de solicitação/resposta para sua fonte de dados.
| Nome | Obrigatório | Tipo | Descrição |
|---|---|---|---|
| Designação | Verdade | cadeia (de caracteres) | O nome exclusivo da conexão correspondente ao parâmetro URI |
| tipo | Verdade | cadeia (de caracteres) | Deve ser RestApiPoller |
| etag | GUID | Deixe em branco para a criação de novos conectores. Para operações de atualização, o etag deve corresponder ao etag (GUID) do conector existente. | |
| properties.connectorDefinitionName | cadeia (de caracteres) | O nome do recurso DataConnectorDefinition que define a configuração da interface do usuário do conector de dados. Para obter mais informações, consulte Definição do conector de dados. | |
| propriedades.auth | Verdade | JSON aninhado | Descreve as propriedades de autenticação para sondar os dados. Para obter mais informações, consulte Configuração de autenticação. |
| propriedades.solicitar | Verdade | JSON aninhado | Descreve a carga útil da solicitação para sondar os dados, como o ponto de extremidade da API. Para obter mais informações, consulte Configuração de solicitação. |
| propriedades.resposta | Verdade | JSON aninhado | Descreve o objeto de resposta e a mensagem aninhada retornada da API ao sondar os dados. Para obter mais informações, consulte Configuração de resposta. |
| propriedades.paginação | JSON aninhado | Descreve a carga útil de paginação ao sondar os dados. Para obter mais informações, consulte Configuração de paginação. | |
| propriedades.dcrConfig | JSON aninhado | Parâmetros necessários quando os dados são enviados para uma Regra de Coleta de Dados (DCR). Para obter mais informações, consulte Configuração do DCR. |
Configuração de autenticação
O CCF suporta os seguintes tipos de autenticação:
Nota
A implementação do CCF OAuth2 não oferece suporte a credenciais de certificado de cliente.
Como prática recomendada, use parâmetros na seção de autenticação em vez de credenciais de codificação. Para obter mais informações, consulte Proteger entrada confidencial.
Para criar o modelo de implantação que também usa parâmetros, você precisa escapar dos parâmetros nesta seção com um início [extra. Isso permite que os parâmetros atribuam um valor com base na interação do usuário com o conector. Para obter mais informações, consulte Caracteres de escape de expressões de modelo.
Para permitir que as credenciais sejam inseridas a partir da interface do usuário, a connectorUIConfig seção requer instructions os parâmetros desejados. Para obter mais informações, consulte Referência de definições de conector de dados para o Codeless Connector Framework.
Autenticação básica
| Campo | Obrigatório | Tipo |
|---|---|---|
| Nome de utilizador | Verdade | cadeia (de caracteres) |
| Palavra-passe | Verdade | cadeia (de caracteres) |
Exemplo de autenticação básica usando parâmetros definidos em connectorUIconfig:
"auth": {
"type": "Basic",
"UserName": "[[parameters('username')]",
"Password": "[[parameters('password')]"
}
APIKey
| Campo | Obrigatório | Tipo | Descrição | Valor predefinido |
|---|---|---|---|---|
| ApiKey | Verdade | cadeia (de caracteres) | chave secreta do usuário | |
| ApiKeyName | cadeia (de caracteres) | nome do cabeçalho Uri que contém o valor ApiKey | Authorization |
|
| ApiKeyIdentifier | cadeia (de caracteres) | valor da cadeia de caracteres para preceder o token | token |
|
| IsApiKeyInPostPayload | Booleano | enviar segredo no corpo do POST em vez do cabeçalho | false |
APIKey auth exemplos:
"auth": {
"type": "APIKey",
"ApiKey": "[[parameters('apikey')]",
"ApiKeyName": "X-MyApp-Auth-Header",
"ApiKeyIdentifier": "Bearer"
}
Este exemplo resulta no segredo definido a partir da entrada do usuário enviada no seguinte cabeçalho: X-MyApp-Auth-Header: Bearer apikey
"auth": {
"type": "APIKey",
"ApiKey": "123123123",
}
Este exemplo usa os valores padrão e resulta no seguinte cabeçalho: Authorization: token 123123123
"auth": {
"type": "APIKey",
"ApiKey": "123123123",
"ApiKeyName": ""
}
Como o ApiKeyName está explicitamente definido como "", o resultado é o seguinte cabeçalho: Autorização: 123123123
OAuth2
O Codeless Connector Framework suporta a concessão de código de autorização OAuth 2.0 e credenciais de cliente. O tipo de concessão de Código de Autorização é usado por clientes confidenciais e públicos para trocar um código de autorização por um token de acesso. Depois que o usuário retornar ao cliente por meio da URL de redirecionamento, o aplicativo obterá o código de autorização da URL e o usará para solicitar um token de acesso.
| Campo | Obrigatório | Tipo | Descrição |
|---|---|---|---|
| ID do Cliente | Verdade | Cordão | O ID do cliente |
| ClientSecret | Verdade | Cordão | O segredo do cliente |
| Código de autorização | True quando grantType = authorization_code |
Cordão | Se o tipo de concessão for authorization_code este valor de campo será o código de autorização retornado do serviço de autenticação. |
| Âmbito de aplicação | Verdadeiro para authorization_code o tipo de concessãoopcional para client_credentials o tipo de subvenção |
Cordão | Uma lista separada por espaços de escopos para consentimento do usuário. Para obter mais informações, consulte Escopos e permissões do OAuth2. |
| RedirectUri | True quando grantType = authorization_code |
Cordão | URL para redirecionamento, deve ser https://portal.azure.com/TokenAuthorize/ExtensionName/Microsoft_Azure_Security_Insights |
| Tipo de Subsídio | Verdade | Cordão |
authorization_code ou client_credentials |
| TokenEndpoint | Verdade | Cordão | URL para trocar código com token válido em authorization_code grant ou id de cliente e secret com token válido em client_credentials grant. |
| TokenEndpointHeaders | Objeto | Um objeto de valor de chave opcional para enviar cabeçalhos personalizados para o servidor de token | |
| TokenEndpointQueryParameters | Objeto | Um objeto de valor de chave opcional para enviar parâmetros de consulta personalizados para o servidor de token | |
| AuthorizationEndpoint | Verdade | Cordão | URL para consentimento do usuário para authorization_code fluxo |
| AuthorizationEndpointHeaders | Objeto | Um objeto de valor de chave opcional para enviar cabeçalhos personalizados para o servidor de autenticação | |
| ParâmetrosDeConsultaDoPontoDeAutorização | Objeto | Um par de valor de chave opcional usado na solicitação de fluxo de código de autorização OAuth2 |
O fluxo de código de autenticação é para buscar dados em nome das permissões de um usuário e as credenciais do cliente são para buscar dados com permissões de aplicativo. O servidor de dados concede acesso ao aplicativo. Como não há nenhum usuário no fluxo de credenciais do cliente, nenhum ponto de extremidade de autorização é necessário, apenas um ponto de extremidade de token.
Exemplo: tipo de concessão 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"
}
Exemplo: tipo de concessão 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
A autenticação JSON Web Token (JWT) suporta a obtenção de tokens por meio de credenciais de nome de usuário/senha e o uso delas para solicitações de API.
Exemplo básico:
"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"
}
Credenciais no corpo do POST (padrão):
"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"
}
Credenciais em cabeçalhos (autenticação básica):
"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
}
Credenciais em cabeçalhos (token de usuário):
"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"
}
Fluxo de autenticação:
Enviar credenciais para
TokenEndpointpara obter o token JWT- If
IsCredentialsInHeaders: true: Envia cabeçalho de autenticação básica com username:password - If
IsCredentialsInHeaders: false: Envia credenciais no corpo do POST
- If
Extrair token usando
JwtTokenJsonPathou do cabeçalho de respostaUsar token em solicitações de API subsequentes com
ApiKeyNamecabeçalho
Propriedades:
| Campo | Obrigatório | Tipo | Descrição |
|---|---|---|---|
| type | Verdade | Cordão | Deve ser JwtToken |
| nome de utilizador | True (se userToken não for usado) | Objeto | Par chave-valor para credencial de nome de usuário. Se userName e password forem enviados na solicitação de cabeçalho, especifique a value propriedade com o nome de usuário. Se userName e password enviado no corpo da solicitação, especifique o Key e Value |
| palavra-passe | True (se userToken não for usado) | Objeto | Par chave-valor para credencial de senha. Se userName e password forem enviados na solicitação de cabeçalho, especifique a value propriedade com o nome de usuário. Se userName e password enviado no corpo da solicitação, especifique o Key e Value |
| userToken | True (se userName não for usado) | Cordão | Token de usuário gerado pelo cliente para obter token do sistema para autenticação |
| UserTokenPrepend | Falso | Cordão | Anexe o texto antes do token. Exemplo: Bearer |
| NoAccessTokenPrepend | Falso | booleano | Sinalizador de acesso para indicar token não deve preceder nada |
| TokenEndpointHttpMethod | Falso | Cordão | Método HTTP para ponto de extremidade de token. Pode ser Get ou Post. Predefinição: Post |
| TokenEndpoint | Verdade | Cordão | Ponto de extremidade de URL para obter o token JWT |
| IsCredentialsInHeaders | booleano | Envie credenciais como cabeçalho de autenticação básica (true) vs corpo POST (false). Predefinição: false |
|
| IsJsonRequest | booleano | Enviar solicitação como JSON (cabeçalho Content-Type = application/json) vs codificado em formulário (cabeçalho Content-Type = application/x-www-form-urlencoded). Predefinição: false |
|
| JwtTokenJsonPath | Cordão | JSONPath para extrair o token da resposta (por exemplo, "$.access_token") |
|
| JwtTokenInResponseHeader | booleano | Extraia o token do cabeçalho de resposta vs corpo. Predefinição: false |
|
| JwtTokenHeaderName | Cordão | Nome do cabeçalho quando o token está no cabeçalho de resposta. Padrão: "Authorization" |
|
| JwtTokenIdentifier | Cordão | Identificador usado para extrair o JWT de uma cadeia de caracteres de token prefixada | |
| QueryParameters | Objeto | Parâmetros de consulta personalizados a serem incluídos ao enviar a solicitação para o ponto de extremidade do token | |
| Cabeçalhos | Objeto | Cabeçalhos personalizados a serem incluídos ao enviar a solicitação para o ponto de extremidade do token | |
| RequestTimeoutInSeconds | Número inteiro | Tempo limite de solicitação em segundos. Padrão: 100, Max 180 |
Fluxo de autenticação:
Enviar credenciais para
TokenEndpointpara obter o token JWT- If
IsCredentialsInHeaders: true: Envia cabeçalho de autenticação básica com username:password - If
IsCredentialsInHeaders: false: Envia credenciais no corpo do POST
- If
Extrair token usando
JwtTokenJsonPathou do cabeçalho de respostaUsar token em solicitações de API subsequentes com
ApiKeyNamecabeçalho
Nota
Limitations:
- Requer autenticação de nome de usuário/senha para aquisição de token
- Não suporta solicitações de token baseadas em chave de API
- A autenticação de cabeçalho personalizada (sem nome de usuário/senha) não é suportada
Solicitar configuração
A seção de solicitação define como o conector de dados CCF envia solicitações para sua fonte de dados, como o ponto de extremidade da API e com que frequência sondar esse ponto de extremidade.
| Campo | Obrigatório | Tipo | Descrição |
|---|---|---|---|
| ApiEndpoint | Verdade | Cordão | URL para servidor remoto. Define o ponto de extremidade do qual extrair dados. |
| RateLimitQPS | Número inteiro | Define o número de chamadas ou consultas permitidas em um segundo. | |
| RateLimitConfig | Objeto | Define a configuração do limite de taxa para a API RESTful. Veja o exemplo. | |
| QueryWindowInMin | Número inteiro | Define a janela de consulta disponível em minutos. O mínimo é de 1 minuto. A predefinição é 5 minutos. | |
| Método Http | Cordão | Define o método API: GET(padrão) ou POST |
|
| QueryTimeFormat | Cordão | Define o formato de data e hora que o ponto de extremidade (servidor remoto) espera. O CCF usa a data e a hora atuais sempre que essa variável é usada. Os valores possíveis são as constantes: UnixTimestamp, UnixTimestampInMills ou qualquer outra representação válida da data e hora, por exemplo: yyyy-MM-dd, MM/dd/yyyy HH:mm:sso padrão é ISO 8601 UTC |
|
| Contagem de Tentativas | Inteiro (1...6) | Define 1 para 6 novas tentativas permitidas para recuperar de uma falha. A predefinição é 3. |
|
| TimeoutInSeconds | Inteiro (1...180) | Define o tempo limite da solicitação, em segundos. O padrão é 20 |
|
| IsPostPayloadJson | booleano | Determina se a carga POST está no formato JSON. O padrão é false |
|
| Cabeçalhos | Objeto | Pares de valores de chave que definem os cabeçalhos de solicitação. | |
| QueryParameters | Objeto | Pares de valores de chave que definem os parâmetros de consulta de solicitação. | |
| StartTimeAttributeName | True quando EndTimeAttributeName está definido |
Cordão | Define o nome do parâmetro de consulta para a hora de início da consulta. Veja o exemplo. |
| EndTimeAttributeName | True quando StartTimeAttributeName está definido |
Cordão | Define o nome do parâmetro de consulta para a hora de término da consulta. |
| QueryTimeIntervalAttributeName | Cordão | Se o ponto de extremidade exigir um formato especializado para consultar os dados em um período de tempo, use essa propriedade com os QueryTimeIntervalPrepend parâmetros e QueryTimeIntervalDelimiter . Veja o exemplo. |
|
| QueryTimeIntervalPrepend | True quando QueryTimeIntervalAttributeName está definido |
Cordão | Veja QueryTimeIntervalAttributeName |
| QueryTimeIntervalDelimiter | True quando QueryTimeIntervalAttributeName está definido |
Cordão | Veja QueryTimeIntervalAttributeName |
| QueryParametersTemplate | Cordão | Modelo de consulta para usar ao passar parâmetros em cenários avançados. br>Por exemplo: "queryParametersTemplate": "{'cid': 1234567, 'cmd': 'reporting', 'format': 'siem', 'data': { 'from': '{_QueryWindowStartTime}', 'to': '{_QueryWindowEndTime}'}, '{_APIKeyName}': '{_APIKey}'}" |
Quando a API requer parâmetros complexos, use o queryParameters ou queryParametersTemplate que incluem algumas variáveis internas.
| variável integrada | para utilização em seringas queryParameters |
para utilização em seringas queryParametersTemplate |
|---|---|---|
_QueryWindowStartTime |
sim | sim |
_QueryWindowEndTime |
sim | sim |
_APIKeyName |
não | sim |
_APIKey |
não | sim |
Exemplo de StartTimeAttributeName
Considere este exemplo:
StartTimeAttributeName=fromEndTimeAttributeName=untilApiEndpoint=https://www.example.com
A consulta enviada para o servidor remoto é: https://www.example.com?from={QueryTimeFormat}&until={QueryTimeFormat + QueryWindowInMin}
Exemplo de QueryTimeIntervalAttributeName
Considere este exemplo:
QueryTimeIntervalAttributeName=intervalQueryTimeIntervalPrepend=time:QueryTimeIntervalDelimiter=..ApiEndpoint=https://www.example.com
A consulta enviada para o servidor remoto é: https://www.example.com?interval=time:{QueryTimeFormat}..{QueryTimeFormat + QueryWindowInMin}
Exemplo do RateLimitConfig
Considere este exemplo:
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
}
}
Quando a resposta inclui cabeçalhos de limite de taxa, o conector pode usar esta informação para ajustar a sua taxa de pedido.
Exemplos de solicitação usando o Microsoft Graph como API de fonte de dados
Este exemplo consulta mensagens com um parâmetro de consulta de filtro. Para obter mais informações, consulte Parâmetros de consulta da API do 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 "
}
O exemplo anterior envia uma GET solicitação para https://graph.microsoft.com/v1.0/me/messages?filter=receivedDateTime gt {time of request} and receivedDateTime lt 2019-09-01T17:00:00.0000000. O carimbo de data/hora é atualizado para cada queryWindowInMin hora.
Os mesmos resultados são alcançados com este exemplo:
"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}"
}
}
Outra opção é quando a fonte de dados espera 2 parâmetros de consulta, um para a hora de início e outro para a hora de término.
Exemplo:
"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",
}
Isso envia uma GET solicitação para https://graph.microsoft.com/me/calendarView?startDateTime=2019-09-01T09:00:00.0000000&endDateTime=2019-09-01T17:00:00.0000000
Para consultas complexas, use QueryParametersTemplate. Este próximo exemplo envia uma POST solicitação com parâmetros no corpo.
Exemplo:
"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}))\"}"
}
Configuração de resposta
Defina o tratamento de resposta do seu conector de dados com os seguintes parâmetros:
| Campo | Obrigatório | Tipo | Descrição |
|---|---|---|---|
| EventosJsonPaths | Verdade | Lista de Strings | Define o caminho para a mensagem no JSON de resposta. Uma expressão de caminho JSON especifica um caminho para um elemento, ou um conjunto de elementos, em uma estrutura JSON |
| SuccessStatusJsonPath | Cordão | Define o caminho para a mensagem de sucesso na resposta JSON. Quando este parâmetro é definido, o SuccessStatusValue parâmetro também deve ser definido. |
|
| SuccessStatusValue | Cordão | Define o caminho para o valor da mensagem de sucesso no JSON de resposta | |
| IsGzipComprimido | booleano | Determina se a resposta é compactada em um arquivo gzip | |
| formato | Verdade | Cordão |
json ou csv ou xml |
| CompressionAlgo | Cordão | O algoritmo de compressão, ou multi-gzipdeflate. Para o algoritmo de compressão gzip, basta configurar IsGzipCompressed para True em vez de definir um valor para este parâmetro. |
|
| CsvDelimiter | Cordão | Se o formato de resposta for CSV e você quiser alterar o delimitador CSV padrão de "," |
|
| HasCsvBoundary | booleano | Indicar se os dados CSV têm um limite | |
| HasCsvHeader | booleano | Indique se os dados CSV têm um cabeçalho, o padrão é True |
|
| CsvEscape | Cordão | Caractere de escape para um limite de campo, o padrão é "Por exemplo, um CSV com cabeçalhos id,name,avg e uma linha de dados contendo espaços como 1,"my name",5.5 requer o limite do " campo. |
|
| ConvertChildPropertiesToArray | booleano | Caso especial em que o servidor remoto retorna um objeto em vez de uma lista de eventos onde cada propriedade tem dados nele. |
Nota
O tipo de formato CSV é analisado pela especificação RFC4180 .
Exemplos de configuração de resposta
Uma resposta do servidor com formato JSON é esperada, com os dados solicitados no valor da propriedade. O status da propriedade
"response": {
"EventsJsonPaths ": ["$.value"],
"format": "json",
"SuccessStatusJsonPath": "$.status",
"SuccessStatusValue": "success",
"IsGzipCompressed": true
}
A resposta esperada neste exemplo se prepara para um CSV sem cabeçalho.
"response": {
"EventsJsonPaths ": ["$"],
"format": "csv",
"HasCsvHeader": false
}
Configuração de paginação
Quando a fonte de dados não pode enviar toda a carga útil de resposta de uma só vez, o conector de dados CCF precisa saber como receber partes dos dados nas páginas de resposta. Os tipos de paginação a escolher são:
| Tipo de paginação | fator de decisão |
|---|---|
| A resposta da API tem links para páginas anteriores e seguintes? | |
| A resposta da API tem um token ou cursor para as páginas seguintes e anteriores? | |
| A resposta da API suporta um parâmetro para o número de objetos a serem ignorados durante a paginação? | |
| A resposta da API suporta um parâmetro para o número de objetos a serem retornados? |
Configurar LinkHeader ou PersistentLinkHeader
O tipo de paginação mais comum é quando uma API de fonte de dados do servidor fornece URLs para as páginas de dados seguintes e anteriores. Para obter mais informações sobre a especificação Link Header , consulte RFC 5988.
LinkHeader paginação significa que a resposta da API inclui:
- o cabeçalho de
Linkresposta HTTP - ou um caminho JSON para recuperar o link do corpo da resposta.
PersistentLinkHeader A paginação tem as mesmas propriedades LinkHeaderdo , exceto que o cabeçalho do link persiste no armazenamento de back-end. Esta opção permite links de paginação entre janelas de consulta. Por exemplo, algumas APIs não suportam horários de início ou de término de consultas. Em vez disso, eles suportam um cursor do lado do servidor. Os tipos de página persistentes podem ser usados para lembrar o cursor do lado do servidor. Para obter mais informações, consulte O que é um cursor?.
Nota
Pode haver apenas uma consulta em execução para o conector com PersistentLinkHeader para evitar condições de corrida no cursor do lado do servidor. Isso pode afetar a latência.
| Campo | Obrigatório | Tipo | Descrição |
|---|---|---|---|
| LinkHeaderTokenJsonPath | Falso | Cordão | Use essa propriedade para indicar onde obter o valor no corpo da resposta. Por exemplo, se a fonte de dados retornar o seguinte JSON: { nextPage: "foo", value: [{data}]}LinkHeaderTokenJsonPath$.nextPage |
| Tamanho da página | Falso | Número inteiro | Quantos eventos por página |
| PageSizeParameterName | Falso | Cordão | Nome do parâmetro de consulta para o tamanho da página |
| PagingInfoPlacement | Falso | Cordão | Como a informação de paginação é preenchida. Aceita "QueryString" ou "RequestBody" |
| PagingQueryParamOnly | Falso | booleano | Se definido como verdadeiro, omitirá todos os outros parâmetros de consulta, exceto os parâmetros de paginação. |
Seguem-se alguns exemplos:
"paging": {
"pagingType": "LinkHeader",
"linkHeaderTokenJsonPath" : "$.metadata.links.next"
}
"paging": {
"pagingType" : "PersistentLinkHeader",
"pageSizeParameterName" : "limit",
"pageSize" : 500
}
Configurar NextPageUrl
NextPageUrl paging significa que a resposta da API inclui um link complexo no corpo da resposta semelhante ao LinkHeader, mas a URL é incluída no corpo da resposta em vez do cabeçalho.
| Campo | Obrigatório | Tipo | Descrição |
|---|---|---|---|
| Tamanho da página | Falso | Número inteiro | Quantos eventos por página |
| PageSizeParameterName | Falso | Cordão | Nome do parâmetro de consulta para o tamanho da página |
| PróximoPageUrl | Falso | Cordão | Somente se o conector for para Coralogix API |
| NextPageUrlQueryParameters | Falso | Pares de valores da Chave de Objeto – adicionando parâmetro de consulta personalizado a cada solicitação para a próxima página | |
| PróximoPageParaName | Falso | Cordão | Determina o nome da próxima página na solicitação. |
| HasNextFlagJsonPath | Falso | Cordão | Define o caminho para o atributo de sinalizador HasNextPage |
| NextPageRequestHeader | Falso | Cordão | Determina o nome do cabeçalho da próxima página na solicitação. |
| NextPageUrlQueryParametersTemplate | Falso | Cordão | Somente se o conector for para Coralogix API |
| PagingInfoPlacement | Falso | Cordão | Como a informação de paginação é preenchida. Aceita "QueryString" ou "RequestBody" |
| PagingQueryParamOnly | Falso | booleano | Se definido como verdadeiro, omitirá todos os outros parâmetros de consulta, exceto os parâmetros de paginação. |
Exemplo:
"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\")}"
}
Configurar NextPageToken ou PersistentToken
NextPageToken A paginação usa um token (um hash ou um cursor) que representa o estado da página atual. O token é incluído na resposta da API e o cliente o acrescenta à próxima solicitação para buscar a próxima página. Esse método é freqüentemente usado quando o servidor precisa manter o estado exato entre as solicitações.
PersistentToken A paginação usa um token que persiste no lado do servidor. O servidor se lembra do último token recuperado pelo cliente e fornece o próximo token em solicitações subsequentes. O cliente continua de onde parou, mesmo que faça novos pedidos mais tarde.
| Campo | Obrigatório | Tipo | Descrição |
|---|---|---|---|
| Tamanho da página | Falso | Número inteiro | Quantos eventos por página |
| PageSizeParameterName | Falso | cadeia (de caracteres) | Nome do parâmetro de consulta para o tamanho da página |
| NextPageTokenJsonPath | Falso | cadeia (de caracteres) | Caminho JSON para o token da próxima página no corpo da resposta. |
| NextPageTokenResponseHeader | Falso | cadeia (de caracteres) | Se NextPageTokenJsonPath estiver vazio, use o token está neste nome de cabeçalho para a próxima página. |
| PróximoPageParaName | Falso | cadeia (de caracteres) | Determina o nome da próxima página na solicitação. |
| HasNextFlagJsonPath | Falso | cadeia (de caracteres) | Define o caminho para um atributo de sinalizador HasNextPage ao determinar se mais páginas são deixadas na resposta. |
| NextPageRequestHeader | Falso | cadeia (de caracteres) | Determina o nome do cabeçalho da próxima página na solicitação. |
| PagingInfoPlacement | Falso | Cordão | Como a informação de paginação é preenchida. Aceita "QueryString" ou "RequestBody" |
| PagingQueryParamOnly | Falso | booleano | Se definido como verdadeiro, omitirá todos os outros parâmetros de consulta, exceto os parâmetros de paginação. |
Exemplos:
"paging": {
"pagingType" : "NextPageToken",
"nextPageRequestHeader" : "ETag",
"nextPageTokenResponseHeader" : "ETag"
}
"paging": {
"pagingType" : "PersistentToken",
"nextPageParaName" : "gta",
"nextPageTokenJsonPath" : "$.alerts[-1:]._id"
}
Configurar deslocamento
Offset paginação especifica o número de páginas a serem ignoradas e um limite no número de eventos a serem recuperados por página na solicitação. Os clientes buscam um intervalo específico de itens do conjunto de dados.
| Campo | Obrigatório | Tipo | Descrição |
|---|---|---|---|
| Tamanho da página | Falso | Número inteiro | Quantos eventos por página |
| PageSizeParameterName | Falso | Cordão | Nome do parâmetro de consulta para o tamanho da página |
| OffsetParaName | Falso | Cordão | O nome do parâmetro de consulta da próxima solicitação. O CCF calcula o valor de deslocamento para cada solicitação, (todos os eventos ingeridos + 1) |
| PagingInfoPlacement | Falso | Cordão | Como a informação de paginação é preenchida. Aceita "QueryString" ou "RequestBody" |
| PagingQueryParamOnly | Falso | booleano | Se definido como verdadeiro, omitirá todos os outros parâmetros de consulta, exceto os parâmetros de paginação. |
Exemplo:
"paging": {
"pagingType": "Offset",
"offsetParaName": "offset",
"pageSize": 50,
"pagingQueryParamOnly": true,
"pagingInfoPlacement": "QueryString"
}
Configurar CountBasedPaging
CountBasedPaging Permite que o cliente especifique o número de itens a serem retornados na resposta. Isso é útil para APIs que suportam paginação com base em um parâmetro count como parte da carga útil de resposta.
| Campo | Obrigatório | Tipo | Descrição |
|---|---|---|---|
| pageNúmeroParaName | Verdade | Cordão | Nome do parâmetro do número da página na solicitação HTTP |
| Tamanho da página | Falso | Número inteiro | Quantos eventos por página |
| ZeroBasedIndexing | Falso | booleano | Sinalizador para indicar se a contagem é baseada em zero |
| HasNextFlagJsonPath | Falso | Cordão | Caminho JSON do sinalizador na carga de resposta HTTP para indicar que há mais páginas |
| TotalResultsJsonPath | Falso | Cordão | Caminho JSON do número total de resultados na carga útil de resposta HTTP |
| PageNumberJsonPath | Falso | Cordão | Obrigatório se totalResultsJsonPath for fornecido. Caminho JSON do número da página na carga útil de resposta HTTP |
| PageCountJsonPath | Falso | Cordão | Obrigatório se totalResultsJsonPath for fornecido. Caminho JSON da contagem de páginas na carga útil de resposta HTTP |
| PagingInfoPlacement | Falso | Cordão | Como a informação de paginação é preenchida. Aceita "QueryString" ou "RequestBody" |
| PagingQueryParamOnly | Falso | booleano | Se definido como verdadeiro, omitirá todos os outros parâmetros de consulta, exceto os parâmetros de paginação. |
Exemplo:
"paging": {
"pagingType" : "CountBasedPaging",
"pageNumberParaName" : "page",
"pageSize" : 10,
"zeroBasedIndexing" : true,
"hasNextFlagJsonPath" : "$.hasNext",
"totalResultsJsonPath" : "$.totalResults",
"pageNumberJsonPath" : "$.pageNumber",
"pageCountJsonPath" : "$.pageCount"
}
Configuração DCR
| Campo | Obrigatório | Tipo | Descrição |
|---|---|---|---|
| DataCollectionEndpoint | Verdade | Cordão | DCE (Data Collection Endpoint), por exemplo: https://example.ingest.monitor.azure.com. |
| DataCollectionRuleImmutableId | Verdade | Cordão | O ID IMUTÁVEL DCR. Encontre-o visualizando a resposta de criação do DCR ou usando a API do DCR |
| Nome do fluxo | Verdade | cadeia (de caracteres) | Este valor é o definido no DCR (prefixo streamDeclaration deve começar com Custom-) |
Exemplo de conector de dados CCF
Aqui está um exemplo de todos os componentes do conector de dados CCF JSON juntos.
{
"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": ["$"]
}
}
}