Salta ai contenuti

Riferimento API

CSD dispone di un’API dedicata in /api/shape/csd/ per la gestione di domini, script, mitigazione e monitoraggio. CSD può essere abilitato anche sugli HTTP Load Balancer tramite l’API di configurazione del load balancer.

Tutte le chiamate API richiedono un token API. Generarne uno nella Console XC in AmministrazioneCredenzialiCredenziali API.

Configurare le variabili d’ambiente come descritto in Automazione API — Configurazione dell’ambiente:

Terminal window
set -a && source .env && set +a

Tutti gli esempi curl utilizzano il formato segnaposto xTOKENx. Sostituire con le proprie variabili d’ambiente o utilizzare il modulo interattivo nella parte superiore della pagina. Ad esempio, xF5XC_API_TOKENx corrisponde a $F5XC_API_TOKEN.

Terminal window
-H "Authorization: APIToken xF5XC_API_TOKENx"
  • POST restituisce l’oggetto creato come JSON.
  • PUT e DELETE restituiscono un \{\} vuoto su HTTP 200 — questo è normale, non un errore. Non trattare un corpo di risposta vuoto come un fallimento.

Gli endpoint list (ad es. /healthchecks, /origin_pools, /protected_domains) e i singoli endpoint GET (ad es. /healthchecks/\{name\}) restituiscono strutture di risposta differenti:

Tipo di endpointPercorso di esempioStruttura della risposta
List/origin_poolsGli elementi hanno .name, .namespace, .tenant al livello superiore con metadata: null e get_spec: null
GET individuale/origin_pools/\{name\}L’oggetto ha .metadata.name, .spec.* con la configurazione completa

Utilizzare i percorsi jq corretti per ciascuno. Ad esempio, per estrarre i nomi da un endpoint list usare .items[].name, non .items[].metadata.name.

Per le operazioni GET e DELETE sui domini protetti, il parametro di percorso \{name\} è il valore del dominio stesso (ad es. bankexample.com), non un nome oggetto arbitrario. Questo differisce dagli altri oggetti F5 XC in cui il nome è un identificatore scelto dall’utente.

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

OperazioneMetodoPercorso
Abilita CSDPOST/api/shape/csd/namespaces/system/init
Ottieni statoGET/api/shape/csd/namespaces/\{namespace\}/status
Ottieni configurazione JSGET/api/shape/csd/namespaces/\{namespace\}/js_configuration
Testa JSPOST/api/shape/csd/namespaces/\{namespace\}/testjs
Aggiorna dominiPOST/api/shape/csd/namespaces/\{namespace\}/update_domains
OperazioneMetodoPercorso
ElencaGET/api/shape/csd/namespaces/\{namespace\}/protected_domains
OttieniGET/api/shape/csd/namespaces/\{namespace\}/protected_domains/\{name\}
CreaPOST/api/shape/csd/namespaces/\{namespace\}/protected_domains
EliminaDELETE/api/shape/csd/namespaces/\{namespace\}/protected_domains/\{name\}
OperazioneMetodoPercorso
Elenca rilevatiGET/api/shape/csd/namespaces/\{namespace\}/detected_domains
Ottieni dettagliGET/api/shape/csd/namespaces/\{namespace\}/domain_details
OperazioneMetodoPercorso
ElencaGET/api/shape/csd/namespaces/\{namespace\}/allowed_domains
OttieniGET/api/shape/csd/namespaces/\{namespace\}/allowed_domains/\{name\}
CreaPOST/api/shape/csd/namespaces/\{namespace\}/allowed_domains
EliminaDELETE/api/shape/csd/namespaces/\{namespace\}/allowed_domains/\{name\}
OperazioneMetodoPercorso
ElencaGET/api/shape/csd/namespaces/\{namespace\}/mitigated_domains
OttieniGET/api/shape/csd/namespaces/\{namespace\}/mitigated_domains/\{name\}
CreaPOST/api/shape/csd/namespaces/\{namespace\}/mitigated_domains
EliminaDELETE/api/shape/csd/namespaces/\{namespace\}/mitigated_domains/\{name\}
OperazioneMetodoPercorso
Elenca scriptPOST/api/shape/csd/namespaces/\{namespace\}/scripts
Elenca script (legacy)GET/api/shape/csd/namespaces/\{namespace\}/scripts
Ottieni panoramica scriptGET/api/shape/csd/namespaces/\{namespace\}/scripts/\{id\}/dashboard
Elenca comportamentiGET/api/shape/csd/namespaces/\{namespace\}/scripts/\{id\}/behaviors
Elenca interazioni di reteGET/api/shape/csd/namespaces/\{namespace\}/scripts/\{id\}/networkInteractions
Aggiorna giustificazionePOST/api/shape/csd/namespaces/\{namespace\}/scripts/\{script_id\}/justification
Elimina giustificazioneDELETE/api/shape/csd/namespaces/\{namespace\}/script/justification/\{justification_id\}
Aggiorna stato di letturaPOST/api/shape/csd/namespaces/\{namespace\}/scripts/\{id\}/readStatus
Elenca utenti interessatiPOST/api/shape/csd/namespaces/\{namespace\}/scripts/\{script_id\}/affectedUsers
OperazioneMetodoPercorso
Elenca campi moduloGET/api/shape/csd/namespaces/\{namespace\}/formFields
Elenca campi modulo (POST)POST/api/shape/csd/namespaces/\{namespace\}/formFields
Ottieni campo moduloGET/api/shape/csd/namespaces/\{namespace\}/formFields/\{id\}
Elenca per scriptGET/api/shape/csd/namespaces/\{namespace\}/scripts/\{id\}/formFields
Aggiorna analisi campoPOST/api/shape/csd/namespaces/\{namespace\}/formFields/analysis

Inizializzare CSD per il tenant:

Terminal window
curl -s -X POST \
-H "Authorization: APIToken xF5XC_API_TOKENx" \
-H "Content-Type: application/json" \
"xF5XC_API_URLx/api/shape/csd/namespaces/system/init"
Terminal window
curl -s \
-H "Authorization: APIToken xF5XC_API_TOKENx" \
"xF5XC_API_URLx/api/shape/csd/namespaces/xF5XC_NAMESPACEx/status" \
| jq .
Terminal window
curl -s \
-H "Authorization: APIToken xF5XC_API_TOKENx" \
"xF5XC_API_URLx/api/shape/csd/namespaces/xF5XC_NAMESPACEx/protected_domains" \
| jq .
Terminal window
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 .
Terminal window
curl -s -X DELETE \
-H "Authorization: APIToken xF5XC_API_TOKENx" \
"xF5XC_API_URLx/api/shape/csd/namespaces/xF5XC_NAMESPACEx/protected_domains/my-app"

Parametri di query: locations (filtra per posizione), risk (filtra per livello di rischio).

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

Filtra per rischio elevato:

Terminal window
curl -s \
-H "Authorization: APIToken xF5XC_API_TOKENx" \
"xF5XC_API_URLx/api/shape/csd/namespaces/xF5XC_NAMESPACEx/detected_domains?risk=high" \
| jq .
Terminal window
curl -s \
-H "Authorization: APIToken xF5XC_API_TOKENx" \
"xF5XC_API_URLx/api/shape/csd/namespaces/xF5XC_NAMESPACEx/domain_details?name=suspicious.example.com" \
| jq .
Terminal window
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 .
Terminal window
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 .
Terminal window
curl -s \
-H "Authorization: APIToken xF5XC_API_TOKENx" \
"xF5XC_API_URLx/api/shape/csd/namespaces/xF5XC_NAMESPACEx/scripts/${SCRIPT_ID}/behaviors" \
| jq .
Terminal window
curl -s \
-H "Authorization: APIToken xF5XC_API_TOKENx" \
"xF5XC_API_URLx/api/shape/csd/namespaces/xF5XC_NAMESPACEx/scripts/${SCRIPT_ID}/networkInteractions" \
| jq .
Terminal window
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 .
Terminal window
curl -s \
-H "Authorization: APIToken xF5XC_API_TOKENx" \
"xF5XC_API_URLx/api/shape/csd/namespaces/xF5XC_NAMESPACEx/mitigated_domains" \
| jq .
Terminal window
curl -s -X DELETE \
-H "Authorization: APIToken xF5XC_API_TOKENx" \
"xF5XC_API_URLx/api/shape/csd/namespaces/xF5XC_NAMESPACEx/mitigated_domains/blocked-domain"
Terminal window
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 .
Terminal window
curl -s \
-H "Authorization: APIToken xF5XC_API_TOKENx" \
"xF5XC_API_URLx/api/shape/csd/namespaces/xF5XC_NAMESPACEx/allowed_domains" \
| jq .
Terminal window
curl -s -X DELETE \
-H "Authorization: APIToken xF5XC_API_TOKENx" \
"xF5XC_API_URLx/api/shape/csd/namespaces/xF5XC_NAMESPACEx/allowed_domains/trusted-cdn"
Terminal window
curl -s \
-H "Authorization: APIToken xF5XC_API_TOKENx" \
"xF5XC_API_URLx/api/shape/csd/namespaces/xF5XC_NAMESPACEx/js_configuration" \
| jq .

L’iniezione JavaScript CSD può essere abilitata direttamente su un HTTP Load Balancer tramite l’API di configurazione in /api/config/namespaces/\{namespace\}/http_loadbalancers/\{name\}.

Il campo client_side_defense all’interno della specifica del load balancer controlla l’iniezione:

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

Il campo policy accetta uno dei seguenti valori:

CampoDescrizione
js_insert_all_pagesInietta su tutte le pagine
js_insert_all_pages_exceptInietta su tutte le pagine tranne le regole di esclusione
js_insertion_rulesInietta solo sulle pagine corrispondenti alle regole
disable_js_insertNon iniettare

Per disabilitare CSD su un load balancer, sostituire client_side_defense con disable_client_side_defense: \{\}.

Terminal window
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'

Recuperare, modificare e applicare:

Terminal window
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'

Corrispondenza di dominio e percorso per le regole di esclusione

Sezione intitolata “Corrispondenza di dominio e percorso per le regole di esclusione”

Quando si utilizza js_insert_all_pages_except o js_insertion_rules, ogni regola corrisponde a una combinazione di dominio e percorso.

Dominio (sceglierne uno):

CampoEsempio
any_domain: \{\}Tutti i domini
domain.exact_value"app.example.com"
domain.suffix_value".example.com"
domain.regex_value".*\\.example\\.com"

Percorso (sceglierne uno):

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