Aller au contenu

Référence API

CSD dispose d’une API dédiée à /api/shape/csd/ pour la gestion des domaines, des scripts, de la mitigation et de la surveillance. CSD peut également être activé sur les équilibreurs de charge HTTP via l’API de configuration des équilibreurs de charge.

Tous les appels API nécessitent un jeton API. Générez-en un dans la console XC sous AdministrationCredentialsAPI Credentials.

Configurez vos variables d’environnement comme décrit dans Automatisation API — Configuration de l’environnement :

Fenêtre de terminal
set -a && source .env && set +a

Tous les exemples curl utilisent le format de substitution xTOKENx. Remplacez par vos variables d’environnement ou utilisez le formulaire interactif en haut de la page. Par exemple, xF5XC_API_TOKENx correspond à $F5XC_API_TOKEN.

Fenêtre de terminal
-H "Authorization: APIToken xF5XC_API_TOKENx"
  • POST renvoie l’objet créé au format JSON.
  • PUT et DELETE renvoient un \{\} vide avec HTTP 200 — c’est normal, pas une erreur. Ne traitez pas un corps de réponse vide comme un échec.

Les points de terminaison de liste (ex. /healthchecks, /origin_pools, /protected_domains) et les points de terminaison GET individuels (ex. /healthchecks/\{name\}) renvoient des structures de réponse différentes :

Type de point de terminaisonExemple de cheminStructure de réponse
List/origin_poolsLes éléments ont .name, .namespace, .tenant au niveau supérieur avec metadata: null et get_spec: null
GET individuel/origin_pools/\{name\}L’objet possède .metadata.name, .spec.* avec la configuration complète

Utilisez les chemins jq appropriés pour chacun. Par exemple, pour extraire des noms d’un point de terminaison de liste, utilisez .items[].name et non .items[].metadata.name.

Pour les opérations GET et DELETE sur les domaines protégés, le paramètre de chemin \{name\} est la valeur du domaine lui-même (ex. bankexample.com), et non un nom d’objet arbitraire. Cela diffère des autres objets F5 XC où le nom est un identifiant choisi par l’utilisateur.

Chemin de base : /api/shape/csd/namespaces/\{namespace\}/

OpérationMéthodeChemin
Activer CSDPOST/api/shape/csd/namespaces/system/init
Obtenir le statutGET/api/shape/csd/namespaces/\{namespace\}/status
Obtenir la configuration JSGET/api/shape/csd/namespaces/\{namespace\}/js_configuration
Tester JSPOST/api/shape/csd/namespaces/\{namespace\}/testjs
Mettre à jour les domainesPOST/api/shape/csd/namespaces/\{namespace\}/update_domains
OpérationMéthodeChemin
ListerGET/api/shape/csd/namespaces/\{namespace\}/protected_domains
ObtenirGET/api/shape/csd/namespaces/\{namespace\}/protected_domains/\{name\}
CréerPOST/api/shape/csd/namespaces/\{namespace\}/protected_domains
SupprimerDELETE/api/shape/csd/namespaces/\{namespace\}/protected_domains/\{name\}
OpérationMéthodeChemin
Lister les détectésGET/api/shape/csd/namespaces/\{namespace\}/detected_domains
Obtenir les détailsGET/api/shape/csd/namespaces/\{namespace\}/domain_details
OpérationMéthodeChemin
ListerGET/api/shape/csd/namespaces/\{namespace\}/allowed_domains
ObtenirGET/api/shape/csd/namespaces/\{namespace\}/allowed_domains/\{name\}
CréerPOST/api/shape/csd/namespaces/\{namespace\}/allowed_domains
SupprimerDELETE/api/shape/csd/namespaces/\{namespace\}/allowed_domains/\{name\}
OpérationMéthodeChemin
ListerGET/api/shape/csd/namespaces/\{namespace\}/mitigated_domains
ObtenirGET/api/shape/csd/namespaces/\{namespace\}/mitigated_domains/\{name\}
CréerPOST/api/shape/csd/namespaces/\{namespace\}/mitigated_domains
SupprimerDELETE/api/shape/csd/namespaces/\{namespace\}/mitigated_domains/\{name\}
OpérationMéthodeChemin
Lister les scriptsPOST/api/shape/csd/namespaces/\{namespace\}/scripts
Lister les scripts (legacy)GET/api/shape/csd/namespaces/\{namespace\}/scripts
Obtenir la vue d’ensemble du scriptGET/api/shape/csd/namespaces/\{namespace\}/scripts/\{id\}/dashboard
Lister les comportementsGET/api/shape/csd/namespaces/\{namespace\}/scripts/\{id\}/behaviors
Lister les interactions réseauGET/api/shape/csd/namespaces/\{namespace\}/scripts/\{id\}/networkInteractions
Mettre à jour la justificationPOST/api/shape/csd/namespaces/\{namespace\}/scripts/\{script_id\}/justification
Supprimer la justificationDELETE/api/shape/csd/namespaces/\{namespace\}/script/justification/\{justification_id\}
Mettre à jour le statut de lecturePOST/api/shape/csd/namespaces/\{namespace\}/scripts/\{id\}/readStatus
Lister les utilisateurs affectésPOST/api/shape/csd/namespaces/\{namespace\}/scripts/\{script_id\}/affectedUsers
OpérationMéthodeChemin
Lister les champs de formulaireGET/api/shape/csd/namespaces/\{namespace\}/formFields
Lister les champs de formulaire (POST)POST/api/shape/csd/namespaces/\{namespace\}/formFields
Obtenir un champ de formulaireGET/api/shape/csd/namespaces/\{namespace\}/formFields/\{id\}
Lister par scriptGET/api/shape/csd/namespaces/\{namespace\}/scripts/\{id\}/formFields
Mettre à jour l’analyse du champPOST/api/shape/csd/namespaces/\{namespace\}/formFields/analysis

Initialiser CSD pour le tenant :

Fenêtre 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"
Fenêtre de terminal
curl -s \
-H "Authorization: APIToken xF5XC_API_TOKENx" \
"xF5XC_API_URLx/api/shape/csd/namespaces/xF5XC_NAMESPACEx/status" \
| jq .
Fenêtre de terminal
curl -s \
-H "Authorization: APIToken xF5XC_API_TOKENx" \
"xF5XC_API_URLx/api/shape/csd/namespaces/xF5XC_NAMESPACEx/protected_domains" \
| jq .
Fenêtre 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 .
Fenêtre 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"

Paramètres de requête : locations (filtrer par localisation), risk (filtrer par niveau de risque).

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

Filtrer par risque élevé :

Fenêtre de terminal
curl -s \
-H "Authorization: APIToken xF5XC_API_TOKENx" \
"xF5XC_API_URLx/api/shape/csd/namespaces/xF5XC_NAMESPACEx/detected_domains?risk=high" \
| jq .
Fenêtre 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 .
Fenêtre 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 .
Fenêtre 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 .
Fenêtre de terminal
curl -s \
-H "Authorization: APIToken xF5XC_API_TOKENx" \
"xF5XC_API_URLx/api/shape/csd/namespaces/xF5XC_NAMESPACEx/scripts/${SCRIPT_ID}/behaviors" \
| jq .
Fenêtre de terminal
curl -s \
-H "Authorization: APIToken xF5XC_API_TOKENx" \
"xF5XC_API_URLx/api/shape/csd/namespaces/xF5XC_NAMESPACEx/scripts/${SCRIPT_ID}/networkInteractions" \
| jq .
Fenêtre 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 .
Fenêtre de terminal
curl -s \
-H "Authorization: APIToken xF5XC_API_TOKENx" \
"xF5XC_API_URLx/api/shape/csd/namespaces/xF5XC_NAMESPACEx/mitigated_domains" \
| jq .
Fenêtre 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"
Fenêtre 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 .
Fenêtre de terminal
curl -s \
-H "Authorization: APIToken xF5XC_API_TOKENx" \
"xF5XC_API_URLx/api/shape/csd/namespaces/xF5XC_NAMESPACEx/allowed_domains" \
| jq .
Fenêtre 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"
Fenêtre de terminal
curl -s \
-H "Authorization: APIToken xF5XC_API_TOKENx" \
"xF5XC_API_URLx/api/shape/csd/namespaces/xF5XC_NAMESPACEx/js_configuration" \
| jq .

Configuration CSD sur l’équilibreur de charge HTTP

Section intitulée « Configuration CSD sur l’équilibreur de charge HTTP »

L’injection JavaScript CSD peut également être activée directement sur un équilibreur de charge HTTP via l’API de configuration à /api/config/namespaces/\{namespace\}/http_loadbalancers/\{name\}.

Le champ client_side_defense dans la spécification de l’équilibreur de charge contrôle l’injection :

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

Le champ policy accepte l’une des valeurs suivantes :

ChampDescription
js_insert_all_pagesInjecter sur toutes les pages
js_insert_all_pages_exceptInjecter sur toutes les pages sauf les règles d’exclusion
js_insertion_rulesInjecter uniquement sur les pages correspondant aux règles
disable_js_insertNe pas injecter

Pour désactiver CSD sur un équilibreur de charge, remplacez client_side_defense par disable_client_side_defense: \{\}.

Lire la configuration CSD depuis l’équilibreur de charge

Section intitulée « Lire la configuration CSD depuis l’équilibreur de charge »
Fenêtre 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'

Récupérer, modifier et appliquer :

Fenêtre 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'

Correspondance de domaine et de chemin pour les règles d’exclusion

Section intitulée « Correspondance de domaine et de chemin pour les règles d’exclusion »

Lors de l’utilisation de js_insert_all_pages_except ou js_insertion_rules, chaque règle correspond à une combinaison domaine et chemin.

Domaine (choisir l’un) :

ChampExemple
any_domain: \{\}Tous les domaines
domain.exact_value"app.example.com"
domain.suffix_value".example.com"
domain.regex_value".*\\.example\\.com"

Chemin (choisir l’un) :

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