Zum Inhalt springen

API-Referenz

CSD verfügt über eine dedizierte API unter /api/shape/csd/ zur Verwaltung von Domänen, Skripten, Abwehrmaßnahmen und Überwachung. CSD kann auch über die Load-Balancer-Konfigurations-API auf HTTP-Load-Balancern aktiviert werden.

Alle API-Aufrufe erfordern ein API-Token. Generieren Sie eines in der XC Konsole unter VerwaltungCredentialsAPI Credentials.

Richten Sie Ihre Umgebungsvariablen wie unter API-Automatisierung — Umgebungseinrichtung beschrieben ein:

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

Alle curl-Beispiele verwenden das Platzhalterformat xTOKENx. Ersetzen Sie dieses durch Ihre Umgebungsvariablen oder verwenden Sie das interaktive Formular oben auf der Seite. Beispielsweise entspricht xF5XC_API_TOKENx dem Wert $F5XC_API_TOKEN.

Terminal-Fenster
-H "Authorization: APIToken xF5XC_API_TOKENx"
  • POST gibt das erstellte Objekt als JSON zurück.
  • PUT und DELETE geben bei HTTP 200 ein leeres \{\} zurück – dies ist normal und kein Fehler. Behandeln Sie einen leeren Antworttext nicht als Fehler.

Listen-Endpunkte (z. B. /healthchecks, /origin_pools, /protected_domains) und individuelle GET-Endpunkte (z. B. /healthchecks/\{name\}) geben unterschiedliche Antwortstrukturen zurück:

EndpunkttypBeispielpfadAntwortstruktur
Liste/origin_poolsEinträge haben .name, .namespace, .tenant auf oberster Ebene mit metadata: null und get_spec: null
Individueller GET/origin_pools/\{name\}Objekt hat .metadata.name, .spec.* mit vollständiger Konfiguration

Verwenden Sie die korrekten jq-Pfade für jeden Fall. Um beispielsweise Namen aus einem Listen-Endpunkt zu extrahieren, verwenden Sie .items[].name und nicht .items[].metadata.name.

Bei GET- und DELETE-Operationen für geschützte Domänen ist der \{name\}-Pfadparameter der Domänenwert selbst (z. B. bankexample.com) und kein beliebig gewählter Objektname. Dies unterscheidet sich von anderen F5 XC-Objekten, bei denen der Name ein benutzerdefinierter Bezeichner ist.

Basispfad: /api/shape/csd/namespaces/\{namespace\}/

VorgangMethodePfad
CSD aktivierenPOST/api/shape/csd/namespaces/system/init
Status abrufenGET/api/shape/csd/namespaces/\{namespace\}/status
JS-Konfiguration abrufenGET/api/shape/csd/namespaces/\{namespace\}/js_configuration
JS testenPOST/api/shape/csd/namespaces/\{namespace\}/testjs
Domänen aktualisierenPOST/api/shape/csd/namespaces/\{namespace\}/update_domains
VorgangMethodePfad
AuflistenGET/api/shape/csd/namespaces/\{namespace\}/protected_domains
AbrufenGET/api/shape/csd/namespaces/\{namespace\}/protected_domains/\{name\}
ErstellenPOST/api/shape/csd/namespaces/\{namespace\}/protected_domains
LöschenDELETE/api/shape/csd/namespaces/\{namespace\}/protected_domains/\{name\}
VorgangMethodePfad
Erkannte auflistenGET/api/shape/csd/namespaces/\{namespace\}/detected_domains
Details abrufenGET/api/shape/csd/namespaces/\{namespace\}/domain_details
VorgangMethodePfad
AuflistenGET/api/shape/csd/namespaces/\{namespace\}/allowed_domains
AbrufenGET/api/shape/csd/namespaces/\{namespace\}/allowed_domains/\{name\}
ErstellenPOST/api/shape/csd/namespaces/\{namespace\}/allowed_domains
LöschenDELETE/api/shape/csd/namespaces/\{namespace\}/allowed_domains/\{name\}
VorgangMethodePfad
AuflistenGET/api/shape/csd/namespaces/\{namespace\}/mitigated_domains
AbrufenGET/api/shape/csd/namespaces/\{namespace\}/mitigated_domains/\{name\}
ErstellenPOST/api/shape/csd/namespaces/\{namespace\}/mitigated_domains
LöschenDELETE/api/shape/csd/namespaces/\{namespace\}/mitigated_domains/\{name\}
VorgangMethodePfad
Skripte auflistenPOST/api/shape/csd/namespaces/\{namespace\}/scripts
Skripte auflisten (Legacy)GET/api/shape/csd/namespaces/\{namespace\}/scripts
Skriptübersicht abrufenGET/api/shape/csd/namespaces/\{namespace\}/scripts/\{id\}/dashboard
Verhalten auflistenGET/api/shape/csd/namespaces/\{namespace\}/scripts/\{id\}/behaviors
Netzwerkinteraktionen auflistenGET/api/shape/csd/namespaces/\{namespace\}/scripts/\{id\}/networkInteractions
Begründung aktualisierenPOST/api/shape/csd/namespaces/\{namespace\}/scripts/\{script_id\}/justification
Begründung löschenDELETE/api/shape/csd/namespaces/\{namespace\}/script/justification/\{justification_id\}
Lesestatus aktualisierenPOST/api/shape/csd/namespaces/\{namespace\}/scripts/\{id\}/readStatus
Betroffene Benutzer auflistenPOST/api/shape/csd/namespaces/\{namespace\}/scripts/\{script_id\}/affectedUsers
VorgangMethodePfad
Formularfelder auflistenGET/api/shape/csd/namespaces/\{namespace\}/formFields
Formularfelder auflisten (POST)POST/api/shape/csd/namespaces/\{namespace\}/formFields
Formularfeld abrufenGET/api/shape/csd/namespaces/\{namespace\}/formFields/\{id\}
Nach Skript auflistenGET/api/shape/csd/namespaces/\{namespace\}/scripts/\{id\}/formFields
Feldanalyse aktualisierenPOST/api/shape/csd/namespaces/\{namespace\}/formFields/analysis

CSD für den Mandanten initialisieren:

Terminal-Fenster
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-Fenster
curl -s \
-H "Authorization: APIToken xF5XC_API_TOKENx" \
"xF5XC_API_URLx/api/shape/csd/namespaces/xF5XC_NAMESPACEx/status" \
| jq .
Terminal-Fenster
curl -s \
-H "Authorization: APIToken xF5XC_API_TOKENx" \
"xF5XC_API_URLx/api/shape/csd/namespaces/xF5XC_NAMESPACEx/protected_domains" \
| jq .
Terminal-Fenster
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-Fenster
curl -s -X DELETE \
-H "Authorization: APIToken xF5XC_API_TOKENx" \
"xF5XC_API_URLx/api/shape/csd/namespaces/xF5XC_NAMESPACEx/protected_domains/my-app"

Abfrageparameter: locations (nach Standort filtern), risk (nach Risikostufe filtern).

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

Nach hohem Risiko filtern:

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

Die CSD-JavaScript-Injektion kann auch direkt auf einem HTTP-Load-Balancer über die Konfigurations-API unter /api/config/namespaces/\{namespace\}/http_loadbalancers/\{name\} aktiviert werden.

Das Feld client_side_defense innerhalb der Load-Balancer-Spezifikation steuert die Injektion:

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

Das Feld policy akzeptiert einen der folgenden Werte:

FeldBeschreibung
js_insert_all_pagesAuf allen Seiten injizieren
js_insert_all_pages_exceptAuf allen Seiten außer den Ausschlussregeln injizieren
js_insertion_rulesNur auf Seiten injizieren, die den Regeln entsprechen
disable_js_insertNicht injizieren

Um CSD auf einem Load Balancer zu deaktivieren, ersetzen Sie client_side_defense durch disable_client_side_defense: \{\}.

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

Abrufen, ändern und anwenden:

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

Bei der Verwendung von js_insert_all_pages_except oder js_insertion_rules gleicht jede Regel eine Kombination aus Domäne und Pfad ab.

Domäne (eine auswählen):

FeldBeispiel
any_domain: \{\}Alle Domänen
domain.exact_value"app.example.com"
domain.suffix_value".example.com"
domain.regex_value".*\\.example\\.com"

Pfad (einen auswählen):

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