Ir al contenido

Referencia de API

CSD dispone de una API dedicada en /api/shape/csd/ para gestionar dominios, scripts, mitigación y supervisión. CSD también puede habilitarse en balanceadores de carga HTTP mediante la API de configuración del balanceador de carga.

Todas las llamadas a la API requieren un token de API. Genere uno en la F5 XC Consola en AdministraciónCredencialesCredenciales de API.

Configure sus variables de entorno tal como se describe en Automatización de API — Configuración del entorno:

Ventana de terminal
set -a && source .env && set +a

Todos los ejemplos de curl utilizan el formato de marcador de posición xTOKENx. Sustitúyalo con sus variables de entorno o utilice el formulario interactivo en la parte superior de la página. Por ejemplo, xF5XC_API_TOKENx corresponde a $F5XC_API_TOKEN.

Ventana de terminal
-H "Authorization: APIToken xF5XC_API_TOKENx"
  • POST devuelve el objeto creado como JSON.
  • PUT y DELETE devuelven un \{\} vacío con HTTP 200 — esto es normal, no un error. No interprete un cuerpo de respuesta vacío como un fallo.

Los endpoints de lista (p. ej., /healthchecks, /origin_pools, /protected_domains) y los endpoints GET individuales (p. ej., /healthchecks/\{name\}) devuelven estructuras de respuesta diferentes:

Tipo de endpointRuta de ejemploEstructura de respuesta
Lista/origin_poolsLos elementos tienen .name, .namespace, .tenant en el nivel superior con metadata: null y get_spec: null
GET individual/origin_pools/\{name\}El objeto tiene .metadata.name, .spec.* con la configuración completa

Utilice las rutas jq correctas para cada caso. Por ejemplo, para extraer nombres de un endpoint de lista use .items[].name, no .items[].metadata.name.

Para las operaciones GET y DELETE de dominios protegidos, el parámetro de ruta \{name\} es el valor del dominio en sí (p. ej., bankexample.com), no un nombre de objeto arbitrario. Esto difiere de otros objetos de F5 XC donde el nombre es un identificador elegido por el usuario.

Ruta base: /api/shape/csd/namespaces/\{namespace\}/

OperaciónMétodoRuta
Habilitar CSDPOST/api/shape/csd/namespaces/system/init
Obtener estadoGET/api/shape/csd/namespaces/\{namespace\}/status
Obtener configuración JSGET/api/shape/csd/namespaces/\{namespace\}/js_configuration
Probar JSPOST/api/shape/csd/namespaces/\{namespace\}/testjs
Actualizar dominiosPOST/api/shape/csd/namespaces/\{namespace\}/update_domains
OperaciónMétodoRuta
ListarGET/api/shape/csd/namespaces/\{namespace\}/protected_domains
ObtenerGET/api/shape/csd/namespaces/\{namespace\}/protected_domains/\{name\}
CrearPOST/api/shape/csd/namespaces/\{namespace\}/protected_domains
EliminarDELETE/api/shape/csd/namespaces/\{namespace\}/protected_domains/\{name\}
OperaciónMétodoRuta
Listar detectadosGET/api/shape/csd/namespaces/\{namespace\}/detected_domains
Obtener detallesGET/api/shape/csd/namespaces/\{namespace\}/domain_details
OperaciónMétodoRuta
ListarGET/api/shape/csd/namespaces/\{namespace\}/allowed_domains
ObtenerGET/api/shape/csd/namespaces/\{namespace\}/allowed_domains/\{name\}
CrearPOST/api/shape/csd/namespaces/\{namespace\}/allowed_domains
EliminarDELETE/api/shape/csd/namespaces/\{namespace\}/allowed_domains/\{name\}
OperaciónMétodoRuta
ListarGET/api/shape/csd/namespaces/\{namespace\}/mitigated_domains
ObtenerGET/api/shape/csd/namespaces/\{namespace\}/mitigated_domains/\{name\}
CrearPOST/api/shape/csd/namespaces/\{namespace\}/mitigated_domains
EliminarDELETE/api/shape/csd/namespaces/\{namespace\}/mitigated_domains/\{name\}
OperaciónMétodoRuta
Listar scriptsPOST/api/shape/csd/namespaces/\{namespace\}/scripts
Listar scripts (heredado)GET/api/shape/csd/namespaces/\{namespace\}/scripts
Obtener resumen del scriptGET/api/shape/csd/namespaces/\{namespace\}/scripts/\{id\}/dashboard
Listar comportamientosGET/api/shape/csd/namespaces/\{namespace\}/scripts/\{id\}/behaviors
Listar interacciones de redGET/api/shape/csd/namespaces/\{namespace\}/scripts/\{id\}/networkInteractions
Actualizar justificaciónPOST/api/shape/csd/namespaces/\{namespace\}/scripts/\{script_id\}/justification
Eliminar justificaciónDELETE/api/shape/csd/namespaces/\{namespace\}/script/justification/\{justification_id\}
Actualizar estado de lecturaPOST/api/shape/csd/namespaces/\{namespace\}/scripts/\{id\}/readStatus
Listar usuarios afectadosPOST/api/shape/csd/namespaces/\{namespace\}/scripts/\{script_id\}/affectedUsers
OperaciónMétodoRuta
Listar campos de formularioGET/api/shape/csd/namespaces/\{namespace\}/formFields
Listar campos de formulario (POST)POST/api/shape/csd/namespaces/\{namespace\}/formFields
Obtener campo de formularioGET/api/shape/csd/namespaces/\{namespace\}/formFields/\{id\}
Listar por scriptGET/api/shape/csd/namespaces/\{namespace\}/scripts/\{id\}/formFields
Actualizar análisis de campoPOST/api/shape/csd/namespaces/\{namespace\}/formFields/analysis

Inicialice CSD para el tenant:

Ventana de terminal
curl -s -X POST \
-H "Authorization: APIToken xF5XC_API_TOKENx" \
-H "Content-Type: application/json" \
"xF5XC_API_URLx/api/shape/csd/namespaces/system/init"
Ventana de terminal
curl -s \
-H "Authorization: APIToken xF5XC_API_TOKENx" \
"xF5XC_API_URLx/api/shape/csd/namespaces/xF5XC_NAMESPACEx/status" \
| jq .
Ventana de terminal
curl -s \
-H "Authorization: APIToken xF5XC_API_TOKENx" \
"xF5XC_API_URLx/api/shape/csd/namespaces/xF5XC_NAMESPACEx/protected_domains" \
| jq .
Ventana de terminal
curl -s -X POST \
-H "Authorization: APIToken xF5XC_API_TOKENx" \
-H "Content-Type: application/json" \
-d '{
"metadata": {
"name": "my-app",
"namespace": "xF5XC_NAMESPACEx"
},
"spec": {}
}' \
"xF5XC_API_URLx/api/shape/csd/namespaces/xF5XC_NAMESPACEx/protected_domains" \
| jq .
Ventana de terminal
curl -s -X DELETE \
-H "Authorization: APIToken xF5XC_API_TOKENx" \
"xF5XC_API_URLx/api/shape/csd/namespaces/xF5XC_NAMESPACEx/protected_domains/my-app"

Parámetros de consulta: locations (filtrar por ubicación), risk (filtrar por nivel de riesgo).

Ventana de terminal
curl -s \
-H "Authorization: APIToken xF5XC_API_TOKENx" \
"xF5XC_API_URLx/api/shape/csd/namespaces/xF5XC_NAMESPACEx/detected_domains" \
| jq .

Filtrar por riesgo alto:

Ventana de terminal
curl -s \
-H "Authorization: APIToken xF5XC_API_TOKENx" \
"xF5XC_API_URLx/api/shape/csd/namespaces/xF5XC_NAMESPACEx/detected_domains?risk=high" \
| jq .
Ventana de terminal
curl -s \
-H "Authorization: APIToken xF5XC_API_TOKENx" \
"xF5XC_API_URLx/api/shape/csd/namespaces/xF5XC_NAMESPACEx/domain_details?name=suspicious.example.com" \
| jq .
Ventana de terminal
curl -s -X POST \
-H "Authorization: APIToken xF5XC_API_TOKENx" \
-H "Content-Type: application/json" \
-d '{}' \
"xF5XC_API_URLx/api/shape/csd/namespaces/xF5XC_NAMESPACEx/scripts" \
| jq .
Ventana de terminal
SCRIPT_ID="your-script-id"
curl -s \
-H "Authorization: APIToken xF5XC_API_TOKENx" \
"xF5XC_API_URLx/api/shape/csd/namespaces/xF5XC_NAMESPACEx/scripts/${SCRIPT_ID}/dashboard" \
| jq .
Ventana de terminal
curl -s \
-H "Authorization: APIToken xF5XC_API_TOKENx" \
"xF5XC_API_URLx/api/shape/csd/namespaces/xF5XC_NAMESPACEx/scripts/${SCRIPT_ID}/behaviors" \
| jq .
Ventana de terminal
curl -s \
-H "Authorization: APIToken xF5XC_API_TOKENx" \
"xF5XC_API_URLx/api/shape/csd/namespaces/xF5XC_NAMESPACEx/scripts/${SCRIPT_ID}/networkInteractions" \
| jq .
Ventana de terminal
curl -s -X POST \
-H "Authorization: APIToken xF5XC_API_TOKENx" \
-H "Content-Type: application/json" \
-d '{
"metadata": {
"name": "blocked-domain",
"namespace": "xF5XC_NAMESPACEx"
},
"spec": {}
}' \
"xF5XC_API_URLx/api/shape/csd/namespaces/xF5XC_NAMESPACEx/mitigated_domains" \
| jq .
Ventana de terminal
curl -s \
-H "Authorization: APIToken xF5XC_API_TOKENx" \
"xF5XC_API_URLx/api/shape/csd/namespaces/xF5XC_NAMESPACEx/mitigated_domains" \
| jq .
Ventana de terminal
curl -s -X DELETE \
-H "Authorization: APIToken xF5XC_API_TOKENx" \
"xF5XC_API_URLx/api/shape/csd/namespaces/xF5XC_NAMESPACEx/mitigated_domains/blocked-domain"
Ventana de terminal
curl -s -X POST \
-H "Authorization: APIToken xF5XC_API_TOKENx" \
-H "Content-Type: application/json" \
-d '{
"metadata": {
"name": "trusted-cdn",
"namespace": "xF5XC_NAMESPACEx"
},
"spec": {}
}' \
"xF5XC_API_URLx/api/shape/csd/namespaces/xF5XC_NAMESPACEx/allowed_domains" \
| jq .
Ventana de terminal
curl -s \
-H "Authorization: APIToken xF5XC_API_TOKENx" \
"xF5XC_API_URLx/api/shape/csd/namespaces/xF5XC_NAMESPACEx/allowed_domains" \
| jq .
Ventana de terminal
curl -s -X DELETE \
-H "Authorization: APIToken xF5XC_API_TOKENx" \
"xF5XC_API_URLx/api/shape/csd/namespaces/xF5XC_NAMESPACEx/allowed_domains/trusted-cdn"
Ventana de terminal
curl -s \
-H "Authorization: APIToken xF5XC_API_TOKENx" \
"xF5XC_API_URLx/api/shape/csd/namespaces/xF5XC_NAMESPACEx/js_configuration" \
| jq .

Configuración de CSD en el balanceador de carga HTTP

Sección titulada «Configuración de CSD en el balanceador de carga HTTP»

La inyección de JavaScript de CSD también puede habilitarse directamente en un balanceador de carga HTTP mediante la API de configuración en /api/config/namespaces/\{namespace\}/http_loadbalancers/\{name\}.

El campo client_side_defense dentro del spec del balanceador de carga controla la inyección:

{
"client_side_defense": {
"policy": {
"js_insert_all_pages": {}
}
}
}

El campo policy acepta uno de los siguientes:

CampoDescripción
js_insert_all_pagesInyectar en todas las páginas
js_insert_all_pages_exceptInyectar en todas las páginas excepto las indicadas en las reglas de exclusión
js_insertion_rulesInyectar solo en las páginas que coincidan con las reglas
disable_js_insertNo inyectar

Para deshabilitar CSD en un balanceador de carga, reemplace client_side_defense con disable_client_side_defense: \{\}.

Leer la configuración de CSD desde el balanceador de carga

Sección titulada «Leer la configuración de CSD desde el balanceador de carga»
Ventana de terminal
curl -s \
-H "Authorization: APIToken xF5XC_API_TOKENx" \
"xF5XC_API_URLx/api/config/namespaces/xF5XC_NAMESPACEx/http_loadbalancers/xF5XC_LB_NAMEx" \
| jq '.spec.client_side_defense'

Recupere, modifique y aplique:

Ventana de terminal
curl -s \
-H "Authorization: APIToken xF5XC_API_TOKENx" \
"xF5XC_API_URLx/api/config/namespaces/xF5XC_NAMESPACEx/http_loadbalancers/xF5XC_LB_NAMEx" \
> lb-config.json
jq '.spec |= (
del(.disable_client_side_defense) |
.client_side_defense = {
"policy": {
"js_insert_all_pages": {}
}
}
)' lb-config.json > lb-config-updated.json
curl -s -X PUT \
-H "Authorization: APIToken xF5XC_API_TOKENx" \
-H "Content-Type: application/json" \
-d @lb-config-updated.json \
"xF5XC_API_URLx/api/config/namespaces/xF5XC_NAMESPACEx/http_loadbalancers/xF5XC_LB_NAMEx" \
| jq '.spec.client_side_defense'

Coincidencia de dominio y ruta para reglas de exclusión

Sección titulada «Coincidencia de dominio y ruta para reglas de exclusión»

Al utilizar js_insert_all_pages_except o js_insertion_rules, cada regla coincide con una combinación de dominio y ruta.

Dominio (elija uno):

CampoEjemplo
any_domain: \{\}Todos los dominios
domain.exact_value"app.example.com"
domain.suffix_value".example.com"
domain.regex_value".*\\.example\\.com"

Ruta (elija una):

CampoEjemplo
path.path"/login"
path.prefix"/checkout"
path.regex"/user/[0-9]+"