Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Puede crear un RestApiPoller conector de datos con Codeless Connector Framework (CCF) mediante este artículo como complemento a la MICROSOFT SENTINEL API REST para los documentos de conectores de datos.
Cada conector de datos representa una conexión específica de un conector de datos Microsoft Sentinel. Un conector de datos puede tener varias conexiones, que capturan datos de distintos puntos de conexión. Puede completar la plantilla de implementación para el conector de datos CCF mediante la configuración JSON que se compila con este artículo.
Para obtener más información, consulte Creación de un conector sin código para Microsoft Sentinel.
Creación o actualización de conectores de datos
Busque la versión más reciente de la API estable o en versión preliminar haciendo referencia a las create operaciones o update en los documentos de la API REST. La diferencia entre las create operaciones y update es que update requiere el etag valor .
PUT método:
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 obtener más información sobre la versión más reciente de la API, consulte Conectores de datos: crear o actualizar parámetros de URI.
| Nombre | Descripción |
|---|---|
dataConnectorId |
Identificador del conector de datos. Debe ser un nombre único que sea el mismo que el name parámetro en el cuerpo de la solicitud. |
resourceGroupName |
Nombre del grupo de recursos, no distingue mayúsculas de minúsculas. |
subscriptionId |
Identificador de la suscripción de destino. |
workspaceName |
El nombre del área de trabajo, no el identificador. El patrón regex es ^[A-Za-z0-9][A-Za-z0-9-]+[A-Za-z0-9]$. |
api-version |
Versión de API que se va a usar para esta operación. |
Cuerpo de la solicitud
El cuerpo de la solicitud para un RestApiPoller conector de datos CCF tiene la siguiente estructura:
{
"name": "{{dataConnectorId}}",
"kind": "RestApiPoller",
"etag": "",
"properties": {
"connectorDefinitionName": "",
"auth": {},
"request": {},
"response": {},
"paging": "",
"dcrConfig": ""
}
}
RestApiPoller
RestApiPoller es un conector de datos CCF de sondeo de API que puede usar para personalizar las cargas de paginación, autorización y solicitud/respuesta para el origen de datos.
| Nombre | Obligatorio | Tipo | Description |
|---|---|---|---|
name |
Verdadero | Cadena | Nombre único de la conexión que coincide con el parámetro URI. |
kind |
Verdadero | Cadena | Valor kind . Este campo debe establecerse en RestApiPoller. |
etag |
GUID | Valor etag . Este campo debe dejarse vacío para la creación del nuevo conector. Para las operaciones de actualización, etag debe coincidir con el conector etag (GUID) existente. |
|
properties.connectorDefinitionName |
Cadena | Nombre del DataConnectorDefinition recurso que define la configuración de la interfaz de usuario del conector de datos. Para obtener más información, vaya a Definición del conector de datos. |
|
properties.auth |
Verdadero | JSON anidado | Propiedades de autenticación para sondear los datos. Para obtener más información, vaya a Configuración de autenticación. |
properties.request |
Verdadero | JSON anidado | Carga de solicitud para sondear los datos, como el punto de conexión de API. Para obtener más información, vaya a Solicitud de configuración. |
properties. response |
Verdadero | JSON anidado | El objeto de respuesta y el mensaje anidado que devuelve la API cuando sondea los datos. Para obtener más información, vaya a Configuración de respuesta. |
properties.paging |
JSON anidado | Carga de paginación al sondear los datos. Para obtener más información, vaya a Configuración de paginación. | |
properties.dcrConfig |
JSON anidado | Parámetros necesarios cuando los datos se envían a una regla de recopilación de datos (DCR). Para obtener más información, vaya a Configuración de DCR. |
Configuración de autenticación
El CCF admite los siguientes tipos de autenticación:
Nota:
La implementación de CCF OAuth2 no admite credenciales de certificado de cliente.
Como procedimiento recomendado, use parámetros en la sección de autenticación en lugar de credenciales de codificación rígida. Para obtener más información, consulte Protección de la entrada confidencial.
Para crear la plantilla de implementación, que también usa parámetros, debe escapar los parámetros de esta sección con un elemento de inicio [adicional. Este paso permite a los parámetros asignar un valor en función de la interacción del usuario con el conector. Para obtener más información, vea Caracteres de escape de expresiones de plantilla.
Para permitir que las credenciales se escriban desde la interfaz de usuario, la connectorUIConfig sección requiere que escriba los parámetros deseados en instructions. Para obtener más información, vea Referencia de definiciones de conector de datos para Codeless Connector Framework.
Autenticación básica
| Campo | Obligatorio | Tipo |
|---|---|---|
UserName |
Verdadero | Cadena |
Password |
Verdadero | Cadena |
Este es un ejemplo de autenticación básica que usa parámetros definidos en connectorUIconfig:
"auth": {
"type": "Basic",
"UserName": "[[parameters('username')]",
"Password": "[[parameters('password')]"
}
Clave de API
| Campo | Obligatorio | Tipo | Descripción | Valor predeterminado |
|---|---|---|---|---|
ApiKey |
Verdadero | Cadena | Clave secreta de usuario. | |
ApiKeyName |
Cadena | Nombre del encabezado URI que contiene el ApiKey valor. |
Authorization |
|
ApiKeyIdentifier |
Cadena | Valor de cadena para anteponer el token. | token |
|
IsApiKeyInPostPayload |
Booleano | Valor que determina si se va a enviar el secreto en el cuerpo en lugar de en el POST encabezado. |
false |
APIKey ejemplos de autenticación:
"auth": {
"type": "APIKey",
"ApiKey": "[[parameters('apikey')]",
"ApiKeyName": "X-MyApp-Auth-Header",
"ApiKeyIdentifier": "Bearer"
}
El resultado de este ejemplo es el secreto definido a partir de la entrada del usuario enviada en el encabezado siguiente: X-MyApp-Auth-Header: Bearer apikey.
"auth": {
"type": "APIKey",
"ApiKey": "123123123",
}
En este ejemplo se usan los valores predeterminados y se da como resultado el encabezado siguiente: Authorizationtoken 123123123.
"auth": {
"type": "APIKey",
"ApiKey": "123123123",
"ApiKeyName": ""
}
Dado que ApiKeyName se establece explícitamente en "", el resultado es el encabezado siguiente: Authorization: 123123123.
OAuth2
Codeless Connector Framework admite la concesión de código de autorización de OAuth 2.0 y las credenciales de cliente. Los clientes confidenciales y públicos usan el tipo de concesión de código de autorización para intercambiar un código de autorización por un token de acceso.
Una vez que el usuario vuelve al cliente a través de la dirección URL de redireccionamiento, la aplicación obtendrá el código de autorización de la dirección URL y lo usará para solicitar un token de acceso.
| Campo | Obligatorio | Tipo | Description |
|---|---|---|---|
ClientId |
Verdadero. | Cadena | Identificador de cliente. |
ClientSecret |
Verdadero. | Cadena | Secreto de cliente. |
AuthorizationCode |
True cuando el grantType valor es authorization_code. |
Cadena | Si el tipo de concesión es authorization_code, este valor de campo es el código de autorización que devolvió el servidor de autenticación. |
Scope |
True para el tipo de authorization_code concesión.Opcional para el tipo de client_credentials concesión. |
Cadena | Una lista separada por espacios de ámbitos para el consentimiento del usuario. Para obtener más información, consulte Ámbitos y permisos de OAuth2. |
RedirectUri |
True cuando el grantType valor es authorization_code. |
Cadena | La dirección URL del redireccionamiento debe ser https://portal.azure.com/TokenAuthorize/ExtensionName/Microsoft_Azure_Security_Insights. |
GrantType |
Verdadero. | Cadena | Tipo de concesión. Puede ser authorization_code o client_credentials. |
TokenEndpoint |
Verdadero. | Cadena | Dirección URL para intercambiar código con un token válido en la authorization_code concesión, o un identificador de cliente y un secreto con un token válido en la client_credentials concesión. |
TokenEndpointHeaders |
Objeto | Un objeto de clave/valor opcional para enviar encabezados personalizados al servidor de tokens. | |
TokenEndpointQueryParameters |
Objeto | Un objeto de clave/valor opcional para enviar parámetros de consulta personalizados al servidor de tokens. | |
AuthorizationEndpoint |
Verdadero. | Cadena | Dirección URL del consentimiento del usuario para el authorization_code flujo. |
AuthorizationEndpointHeaders |
Objeto | Un objeto de clave/valor opcional para enviar encabezados personalizados al servidor de autenticación. | |
AuthorizationEndpointQueryParameters |
Objeto | Par clave-valor opcional usado en una solicitud de flujo de código de autorización de OAuth2. |
Puede usar el flujo de código de autenticación para capturar datos en nombre de los permisos de un usuario. Puede usar credenciales de cliente para capturar datos con permisos de aplicación. El servidor de datos concede acceso a la aplicación. Dado que no hay ningún usuario en el flujo de credenciales de cliente, no se necesita ningún punto de conexión de autorización, solo un punto de conexión de token.
Este es un ejemplo del tipo de concesión de 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"
}
Este es un ejemplo del tipo de concesión de 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
La autenticación de JSON Web Token (JWT) admite la obtención de tokens a través de credenciales de nombre de usuario y contraseña y su uso para las solicitudes de API.
Ejemplo 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"
}
Credenciales en el cuerpo post (valor predeterminado)
"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"
}
Credenciales en encabezados (autenticación 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
}
Credenciales en encabezados (token de usuario)
"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"
}
Siga este flujo de autenticación:
Enviar credenciales a
TokenEndpointpara obtener el token JWT, cuando se usauserNameypassword,IsCredentialsInHeadersse usa para determinar dónde colocar las credenciales en la solicitud.- Si
IsCredentialsInHeaders: true: envía un encabezado de autenticación básico conusername:password. - If
IsCredentialsInHeaders: false: envía credenciales en unPOSTcuerpo.
- Si
Extraiga el token mediante
JwtTokenJsonPatho desde el encabezado de respuesta.El encabezado Authorization de los tokens JWT es una constante y siempre será "Authorization".
| Campo | Obligatorio | Tipo | Description |
|---|---|---|---|
type |
Verdadero | Cadena | Tipo. Debe ser JwtToken |
userName |
True (si userToken no se usa) |
Objeto | Par clave-valor de la userName credencial. Si userName y password se envían en la solicitud de encabezado, especifique la value propiedad con el nombre de usuario. Si userName y password se envían en la solicitud de cuerpo, especifique Key y Value. |
password |
True (si userToken no se usa) |
Objeto | Par clave-valor de la credencial de contraseña. Si userName y password se envían en la solicitud de encabezado, especifique la value propiedad con .userName Si userName y password se envían en la solicitud de cuerpo, especifique Key y Value. |
userToken |
True (si userName no se usa) |
Cadena | Token de usuario generado por el cliente para obtener el token del sistema para la autenticación. |
UserTokenPrepend |
Falso | Cadena | Valor que indica si se debe anteponer texto antes del token. Valor predeterminado: Bearer. |
NoAccessTokenPrepend |
Falso | Booleano | Marca de acceso que indica que el token no debe anteponer nada. |
TokenEndpointHttpMethod |
Falso | Cadena | Método HTTP para el punto de conexión de token. Puede ser Get o Post. El valor predeterminado es Post. |
TokenEndpoint |
Verdadero | Cadena | Punto de conexión de dirección URL que se usa para obtener el token JWT. |
IsCredentialsInHeaders |
Booleano | Valor que indica si se van a enviar credenciales como un encabezado de autenticación básico (true) frente a un POST cuerpo (false), que se omite al usar userToken. El valor predeterminado es false. |
|
IsJsonRequest |
Booleano | Valor que indica si se va a enviar la solicitud en JSON (encabezado Content-Type = application/json) frente a codificado en formulario (encabezado Content-Type = application/x-www-form-urlencoded). El valor predeterminado es false. |
|
JwtTokenJsonPath |
Cadena | Valor que indica el JSONPath valor que se va a usar para extraer el token de la respuesta. Por ejemplo: $.access_token. |
|
JwtTokenInResponseHeader |
Booleano | Valor que indica si se va a extraer el token del encabezado de respuesta frente al cuerpo. El valor predeterminado es false. |
|
JwtTokenHeaderName. |
Cadena | Valor que indica el nombre del encabezado cuando el token está en el encabezado de respuesta. El valor predeterminado es Authorization. |
|
JwtTokenIdentifier |
Cadena | Identificador usado para extraer el JWT de una cadena de token con prefijo. | |
QueryParameters |
Objeto | Parámetros de consulta personalizados que se van a incluir al enviar la solicitud al punto de conexión del token. | |
Headers |
Objeto | Encabezados personalizados que se van a incluir al enviar la solicitud al punto de conexión del token. | |
RequestTimeoutInSeconds |
Entero | Tiempo de espera de la solicitud en segundos. El valor predeterminado es 100, con un valor máximo de 180. |
Nota:
Limitaciones
- Requiere autenticación de nombre de usuario y contraseña para la adquisición de tokens.
- No admite solicitudes de token basadas en claves de API
- No admite la autenticación de encabezado personalizada (sin nombre de usuario y contraseña)
Configuración de la solicitud
La sección de solicitud define cómo el conector de datos CCF envía solicitudes al origen de datos (por ejemplo, el punto de conexión de API y la frecuencia con la que se sondea ese punto de conexión).
| Campo | Obligatorio | Tipo | Description |
|---|---|---|---|
ApiEndpoint |
Verdadero. | Cadena | Este campo determina la dirección URL del servidor remoto y define el punto de conexión desde el que se van a extraer datos. |
RateLimitQPS |
Entero | Este campo define el número de llamadas o consultas permitidas en un segundo para la solicitud inicial. No se aplica a las solicitudes paginadas. Para limitar la paginación, establezca PaginatedCallsPerSecondtambién . |
|
PaginatedCallsPerSecond |
Doble (0...1000) | Este campo define el número de llamadas por segundo permitidas para las solicitudes paginadas a la API RESTful. Introduce un retraso de (1000 / paginatedCallsPerSecond) milisegundos entre cada llamada API paginada. Esta limitación solo se aplica a las solicitudes de paginación y es independiente de RateLimitQPS, que controla la tasa de solicitudes inicial. Normalmente, se establecerá el mismo valor que RateLimitQPS para respetar el límite de velocidad del origen de datos en todas las solicitudes.
0 value significa que no se aplica ninguna limitación de paginación. |
|
RateLimitConfig |
Objeto | Este campo define la configuración de límite de velocidad para la API RESTful. Para obtener más información, vaya al RateLimitConfig ejemplo. |
|
QueryWindowInMin |
Entero | Este campo define la ventana de consulta disponible en minutos. El mínimo es de 1 minuto. El valor predeterminado es 5 minutos. | |
HttpMethod |
Cadena | Este campo define el método de API: GET(valor predeterminado) o POST. |
|
QueryTimeFormat |
Cadena | Este campo define el formato de fecha y hora que espera el punto de conexión (servidor remoto). El CCF usa la fecha y hora actuales siempre que se use esta variable. Los valores posibles son las constantes: UnixTimestamp, UnixTimestampInMillso cualquier otra representación válida de fecha y hora. Por ejemplo: yyyy-MM-dd, MM/dd/yyyy HH:mm:ss.El valor predeterminado es ISO 8601 UTC. |
|
RetryCount |
Entero (1...6) | Este campo define que los valores de 1 para 6 reintentos pueden recuperarse de un error. El valor predeterminado es 3. |
|
TimeoutInSeconds |
Entero (1...180) | Este campo define el tiempo de espera de la solicitud en segundos. El valor predeterminado es 20. |
|
IsPostPayloadJson |
Booleano | Este campo determina si la POST carga está en formato JSON. El valor predeterminado es false. |
|
Headers |
Objeto | Este campo incluye pares clave-valor que definen los encabezados de solicitud. | |
QueryParameters |
Objeto | Este campo incluye pares clave-valor que definen los parámetros de consulta de solicitud. | |
StartTimeAttributeName |
True cuando se establece el EndTimeAttributeName valor. |
Cadena | Este campo define el nombre del parámetro de consulta para la hora de inicio de la consulta. Para obtener más información, vaya al StartTimeAttributeName ejemplo. |
EndTimeAttributeName |
True cuando StartTimeAttributeName se establece. |
Cadena | Este campo define el nombre del parámetro de consulta para la hora de finalización de la consulta. |
QueryTimeIntervalAttributeName |
Cadena | Este campo se usa si el punto de conexión requiere un formato especializado para consultar los datos en un período de tiempo. Use esta propiedad con los QueryTimeIntervalPrepend parámetros y QueryTimeIntervalDelimiter . Para obtener más información, vaya al QueryTimeIntervalAttributeName ejemplo. |
|
QueryTimeIntervalPrepend |
True cuando QueryTimeIntervalAttributeName se establece. |
Cadena | Haga referencia a QueryTimeIntervalAttributeName. |
QueryTimeIntervalDelimiter |
True cuando QueryTimeIntervalAttributeName se establece. |
Cadena | Haga referencia a QueryTimeIntervalAttributeName. |
QueryParametersTemplate |
Cadena | Este campo hace referencia a la plantilla de consulta que se va a usar al pasar parámetros en escenarios avanzados. Por ejemplo: "queryParametersTemplate": "{'cid': 1234567, 'cmd': 'reporting', 'format': 'siem', 'data': { 'from': '{_QueryWindowStartTime}', 'to': '{_QueryWindowEndTime}'}, '{_APIKeyName}': '{_APIKey}'}". |
|
InitialCheckpointTimeUtc |
DateTime (UTC) | Especifica la hora de inicio de la consulta para el primer sondeo cuando no existe ningún punto de control almacenado. Una vez que se conserva un punto de control después del primer sondeo correcto, este valor se omite. Esta configuración solo surte efecto cuando la configuración de solicitud del conector define un parámetro de consulta de hora de inicio (como startTimeAttributeName o el token de {_QueryWindowStartTime} reemplazo) sin un parámetro de tiempo de finalización correspondiente. No tiene ningún efecto en los conectores que se basan únicamente en cursores o tokens de paginación. Formato: ISO 8601 UTC datetime (por ejemplo, 2024-01-15T00:00:00Z). |
Cuando la API requiera parámetros complejos, use queryParameters o queryParametersTemplate. Estos comandos incluyen algunas variables integradas.
| Variable integrada | Para su uso en queryParameters |
Para su uso en queryParametersTemplate |
|---|---|---|
_QueryWindowStartTime |
Sí | Sí |
_QueryWindowEndTime |
Sí | Sí |
_APIKeyName |
No | Sí |
_APIKey |
No | Sí |
Ejemplo de StartTimeAttributeName
Tenga en cuenta este ejemplo:
StartTimeAttributeName=fromEndTimeAttributeName=untilApiEndpoint=https://www.example.com
La consulta enviada al servidor remoto es: https://www.example.com?from={QueryTimeFormat}&until={QueryTimeFormat + QueryWindowInMin}.
Ejemplo de QueryTimeIntervalAttributeName
Tenga en cuenta este ejemplo:
QueryTimeIntervalAttributeName=intervalQueryTimeIntervalPrepend=time:QueryTimeIntervalDelimiter=..ApiEndpoint=https://www.example.com
La consulta enviada al servidor remoto es: https://www.example.com?interval=time:{QueryTimeFormat}..{QueryTimeFormat + QueryWindowInMin}.
Ejemplo de RateLimitConfig
Tenga en cuenta este ejemplo:
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
}
}
Cuando la respuesta incluye encabezados de límite de velocidad, el conector puede usar esta información para ajustar su tasa de solicitudes.
Ejemplos de solicitud que usan Microsoft Graph como API de origen de datos
En este ejemplo se consultan los mensajes con un parámetro de consulta de filtro. Para obtener más información, consulte Parámetros de consulta de Microsoft Graph API.
"request": {
"apiEndpoint": "https://graph.microsoft.com/v1.0/me/messages",
"httpMethod": "Get",
"queryTimeFormat": "yyyy-MM-ddTHH:mm:ssZ",
"queryWindowInMin": 10,
"retryCount": 3,
"rateLimitQPS": 20,
"headers": {
"Accept": "application/json",
"User-Agent": "Example-app-agent"
},
"QueryTimeIntervalAttributeName": "filter",
"QueryTimeIntervalPrepend": "receivedDateTime gt ",
"QueryTimeIntervalDelimiter": " and receivedDateTime lt "
}
En el ejemplo anterior se envía una GET solicitud a https://graph.microsoft.com/v1.0/me/messages?filter=receivedDateTime gt {time of request} and receivedDateTime lt 2019-09-01T17:00:00.0000000. La marca de tiempo se actualiza para cada queryWindowInMin vez.
Con este ejemplo se logran los mismos resultados:
"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}"
}
}
Hay otra opción para situaciones en las que el origen de datos espera dos parámetros de consulta (uno para la hora de inicio y otro para la hora de finalización).
Ejemplo:
"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",
}
Esta opción envía una GET solicitud a https://graph.microsoft.com/me/calendarView?startDateTime=2019-09-01T09:00:00.0000000&endDateTime=2019-09-01T17:00:00.0000000.
Para consultas complejas, use QueryParametersTemplate. En este ejemplo se envía una POST solicitud con parámetros en el cuerpo:
"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}))\"}"
}
Configuración de respuesta
Defina cómo controla el conector de datos las respuestas mediante los parámetros siguientes:
| Campo | Obligatorio | Tipo | Description |
|---|---|---|---|
EventsJsonPaths |
Verdadero | Lista de cadenas | Define la ruta de acceso al mensaje en el JSON de respuesta. Una expresión de ruta de acceso JSON especifica una ruta de acceso a un elemento, o un conjunto de elementos, en una estructura JSON. |
SuccessStatusJsonPath |
Cadena | Define la ruta de acceso al mensaje correcto en el JSON de respuesta. Cuando se define este parámetro, también se debe definir el SuccessStatusValue parámetro . |
|
SuccessStatusValue |
Cadena | Define la ruta de acceso al valor del mensaje correcto en el JSON de respuesta. | |
IsGzipCompressed |
Booleano | Determina si la respuesta se comprime en un archivo GZIP. | |
format |
Verdadero | Cadena | Determina si el formato es json, csvo xml. |
CompressionAlgo |
Cadena | Define el algoritmo de compresión, ya sea multi-gzip o deflate. Para el algoritmo de compresión GZIP, configure IsGzipCompressed en True en lugar de establecer un valor para este parámetro. |
|
CsvDelimiter |
Cadena | Hace referencia a si el formato de respuesta es CSV y desea cambiar el delimitador CSV predeterminado de ",". |
|
HasCsvBoundary |
Booleano | Indica si los datos CSV tienen un límite. | |
HasCsvHeader |
Booleano | Indica si los datos CSV tienen un encabezado. El valor predeterminado es True. |
|
CsvEscape |
Cadena | Define un carácter de escape para un límite de campo. El valor predeterminado es "Por ejemplo, un ARCHIVO CSV con encabezados id,name,avg y una fila de datos que contienen espacios como 1,"my name",5.5 requiere el límite de " campo. |
|
ConvertChildPropertiesToArray |
Booleano | Hace referencia a un caso especial en el que el servidor remoto devuelve un objeto en lugar de una lista de eventos donde cada propiedad incluye datos. |
Nota:
El tipo de formato CSV se analiza según la RFC4180 especificación.
Ejemplos de configuración de respuesta
Se espera una respuesta del servidor en formato JSON. La respuesta tiene los datos solicitados en el valor de propiedad. El estado de la propiedad response indica que se ingieren los datos solo si el valor es success.
"response": {
"EventsJsonPaths ": ["$.value"],
"format": "json",
"SuccessStatusJsonPath": "$.status",
"SuccessStatusValue": "success",
"IsGzipCompressed": true
}
La respuesta esperada en este ejemplo se prepara para un ARCHIVO CSV sin encabezado.
"response": {
"EventsJsonPaths ": ["$"],
"format": "csv",
"HasCsvHeader": false
}
Configuración de paginación
Cuando el origen de datos no puede enviar toda la carga de respuesta a la vez, el conector de datos CCF debe saber cómo recibir partes de los datos en las páginas de respuesta. Los tipos de paginación entre los que elegir son:
| Tipo de paginación | Factor de decisión |
|---|---|
| ¿La respuesta de LA API tiene vínculos a las páginas siguientes y anteriores? | |
| ¿La respuesta de LA API tiene un token o cursor para las páginas siguientes y anteriores? | |
| ¿La respuesta de API admite un parámetro para el número de objetos que se omitirán al paginar? | |
| ¿La respuesta de API admite un parámetro para el número de objetos que se van a devolver? |
Configuración de LinkHeader o PersistentLinkHeader
El tipo de paginación más común es cuando una API de origen de datos de servidor proporciona direcciones URL a las páginas de datos siguientes y anteriores. Para obtener más información sobre la especificación de encabezado de vínculo , vea RFC 5988.
LinkHeader paginación significa que la respuesta de la API incluye:
- Encabezado de
Linkrespuesta HTTP. - Ruta de acceso JSON para recuperar el vínculo del cuerpo de la respuesta.
PersistentLinkHeaderLa paginación de tipo -tiene las mismas propiedades que LinkHeader, excepto que el encabezado de vínculo persiste en el almacenamiento back-end. Esta opción habilita los vínculos de paginación en las ventanas de consulta.
Por ejemplo, algunas API no admiten las horas de inicio ni las horas de finalización de las consultas. En su lugar, admiten un cursor del lado servidor. Puede usar tipos de página persistentes para recordar el cursor del lado servidor. Para obtener más información, vea ¿Qué es un cursor?.
Nota:
Solo se puede ejecutar una consulta para el conector con PersistentLinkHeader para evitar condiciones de carrera en el cursor del lado servidor. Este problema puede afectar a la latencia.
| Campo | Obligatorio | Tipo | Description |
|---|---|---|---|
LinkHeaderTokenJsonPath |
Falso | Cadena | Use esta propiedad para indicar dónde obtener el valor en el cuerpo de la respuesta. Por ejemplo, si el origen de datos devuelve el siguiente JSON: { nextPage: "foo", value: [{data}]}, el LinkHeaderTokenJsonPath valor es $.nextPage. |
PageSize |
Falso | Entero | Use esta propiedad para determinar el número de eventos por página. |
PageSizeParameterName |
Falso | Cadena | Use este nombre de parámetro de consulta para indicar el tamaño de página. |
PagingInfoPlacement |
Falso | Cadena | Use esta propiedad para determinar cómo se rellena la información de paginación. Acepta o QueryStringRequestBody. |
PagingQueryParamOnly |
Falso | Booleano | Use esta propiedad para especificar parámetros de consulta. Si se establece en true, omite todos los demás parámetros de consulta excepto los parámetros de consulta de paginación. |
Estos son algunos ejemplos:
"paging": {
"pagingType": "LinkHeader",
"linkHeaderTokenJsonPath" : "$.metadata.links.next"
}
"paging": {
"pagingType" : "PersistentLinkHeader",
"pageSizeParameterName" : "limit",
"pageSize" : 500
}
Configuración de NextPageUrl
NextPageUrl-type paging significa que la respuesta de la API incluye un vínculo complejo en el cuerpo de la respuesta similar a LinkHeader, pero la dirección URL se incluye en el cuerpo de la respuesta en lugar del encabezado.
| Campo | Obligatorio | Tipo | Description |
|---|---|---|---|
PageSize |
Falso | Entero | Número de eventos por página. |
PageSizeParameterName |
Falso | Cadena | Nombre del parámetro de consulta para el tamaño de página. |
NextPageUrl |
Falso | Cadena | Campo que solo se usa si el conector es para la API de Coralogix. |
NextPageUrlQueryParameters |
Falso | Objeto | Pares clave-valor que agregan un parámetro de consulta personalizado a cada solicitud de la página siguiente. |
NextPageParaName |
Falso | Cadena | Nombre de página siguiente en la solicitud. |
HasNextFlagJsonPath |
Falso | Cadena | Ruta de acceso al atributo flag HasNextPage . |
NextPageRequestHeader |
Falso | Cadena | Nombre del encabezado de página siguiente en la solicitud. |
NextPageUrlQueryParametersTemplate |
Falso | Cadena | Campo que solo se usa si el conector es para la API de Coralogix. |
PagingInfoPlacement |
Falso | Cadena | Campo que determina cómo se rellena la información de paginación. Acepta o QueryStringRequestBody. |
PagingQueryParamOnly |
Falso | Booleano | Campo que determina los parámetros de consulta. Si se establece en true, omite todos los demás parámetros de consulta excepto los parámetros de consulta de paginación. |
Ejemplo:
"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\")}"
}
Configuración de NextPageToken o PersistentToken
NextPageToken-type pagination usa un token (un hash o un cursor) que representa el estado de la página actual. El token se incluye en la respuesta de API y el cliente lo anexa a la siguiente solicitud para capturar la página siguiente. Este método se usa a menudo cuando el servidor necesita mantener el estado exacto entre las solicitudes.
PersistentToken la paginación usa un token que conserva el lado servidor. El servidor recuerda el último token que recuperó el cliente y proporciona el siguiente token en solicitudes posteriores. El cliente continúa donde lo dejó, incluso si realiza nuevas solicitudes más adelante.
| Campo | Obligatorio | Tipo | Description |
|---|---|---|---|
PageSize |
Falso | Entero | Número de eventos por página. |
PageSizeParameterName |
Falso | Cadena | Nombre del parámetro de consulta para el tamaño de página. |
NextPageTokenJsonPath |
Falso | Cadena | Ruta de acceso JSON para el token de página siguiente en el cuerpo de la respuesta. |
NextPageTokenResponseHeader |
Falso | Cadena | Campo que especifica que, si NextPageTokenJsonPath está vacío, use el token en este nombre de encabezado para la página siguiente. |
NextPageParaName |
Falso | Cadena | Campo que determina el nombre de página siguiente en la solicitud. |
HasNextFlagJsonPath |
Falso | Cadena | Campo que define la ruta de acceso a un HasNextPage atributo de marca al determinar si quedan más páginas en la respuesta. |
NextPageRequestHeader |
Falso | Cadena | Campo que determina el nombre del encabezado de página siguiente en la solicitud. |
PagingInfoPlacement |
Falso | Cadena | Campo que determina cómo se rellena la información de paginación. Acepta o QueryStringRequestBody. |
PagingQueryParamOnly |
Falso | Booleano | Campo que determina los parámetros de consulta. Si se establece en true, omite todos los demás parámetros de consulta excepto los parámetros de consulta de paginación. |
Ejemplos:
"paging": {
"pagingType" : "NextPageToken",
"nextPageRequestHeader" : "ETag",
"nextPageTokenResponseHeader" : "ETag"
}
"paging": {
"pagingType" : "PersistentToken",
"nextPageParaName" : "gta",
"nextPageTokenJsonPath" : "$.alerts[-1:]._id"
}
Configuración del desplazamiento
Offset-type pagination especifica el número de páginas que se omitirán y un límite en el número de eventos que se recuperarán por página en la solicitud. Los clientes capturan un intervalo específico de elementos del conjunto de datos.
| Campo | Obligatorio | Tipo | Description |
|---|---|---|---|
PageSize |
Falso | Entero | Número de eventos por página. |
PageSizeParameterName |
Falso | Cadena | Nombre del parámetro de consulta para el tamaño de página. |
OffsetParaName |
Falso | Cadena | Nombre del parámetro de consulta de la siguiente solicitud. El CCF calcula el valor de desplazamiento para cada solicitud (todos los eventos ingeridos + 1). |
PagingInfoPlacement |
Falso | Cadena | Campo que determina cómo se rellena la información de paginación. Acepta o QueryStringRequestBody. |
PagingQueryParamOnly |
Falso | Booleano | Campo que determina los parámetros de consulta. Si se establece en true, omite todos los demás parámetros de consulta excepto los parámetros de consulta de paginación. |
Ejemplo:
"paging": {
"pagingType": "Offset",
"offsetParaName": "offset",
"pageSize": 50,
"pagingQueryParamOnly": true,
"pagingInfoPlacement": "QueryString"
}
Configuración de CountBasedPaging
CountBasedPaging-type pagination permite al cliente especificar el número de elementos que se devolverán en la respuesta. Esta capacidad es útil para las API que admiten la paginación en función de un parámetro count como parte de la carga de respuesta.
| Campo | Obligatorio | Tipo | Description |
|---|---|---|---|
pageNumberParaName |
Verdadero | Cadena | Nombre del parámetro del número de página en la solicitud HTTP. |
PageSize |
Falso | Entero | Número de eventos por página. |
ZeroBasedIndexing |
Falso | Booleano | Marca que indica que el recuento está basado en cero. |
HasNextFlagJsonPath |
Falso | Cadena | Ruta de acceso JSON de la marca en la carga de respuesta HTTP que indica que hay más páginas. |
TotalResultsJsonPath |
Falso | Cadena | Ruta de acceso JSON del número total de resultados en la carga de respuesta HTTP. |
PageNumberJsonPath |
Falso | Cadena | Ruta de acceso JSON del número de página en la carga de respuesta HTTP. Obligatorio si totalResultsJsonPath se proporciona. |
PageCountJsonPath |
Falso | Cadena | Ruta de acceso JSON del recuento de páginas en la carga de respuesta HTTP. Obligatorio si totalResultsJsonPath se proporciona. |
PagingInfoPlacement |
Falso | Cadena | Campo que determina cómo se rellena la información de paginación. Acepta o QueryStringRequestBody. |
PagingQueryParamOnly |
Falso | Booleano | Campo que determina los parámetros de consulta. Si se establece en true, omite todos los demás parámetros de consulta excepto los parámetros de consulta de paginación. |
Ejemplo:
"paging": {
"pagingType" : "CountBasedPaging",
"pageNumberParaName" : "page",
"pageSize" : 10,
"zeroBasedIndexing" : true,
"hasNextFlagJsonPath" : "$.hasNext",
"totalResultsJsonPath" : "$.totalResults",
"pageNumberJsonPath" : "$.pageNumber",
"pageCountJsonPath" : "$.pageCount"
}
Configuración de DCR
| Campo | Obligatorio | Tipo | Description |
|---|---|---|---|
DataCollectionEndpoint |
Verdadero | Cadena | Punto de conexión de recopilación de datos (DCE). Por ejemplo: https://example.ingest.monitor.azure.com. |
DataCollectionRuleImmutableId |
Verdadero | Cadena | Identificador inmutable de DCR. Búsela mediante la visualización de la respuesta de creación de DCR o mediante la API de DCR. |
StreamName |
Verdadero | Cadena | Este valor es el streamDeclaration definido en dcr. El prefijo debe comenzar por Custom-. |
Conector de datos CCF de ejemplo
Este es un ejemplo de todos los componentes del JSON del conector de datos 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": ["$"]
}
}
}