跳转到内容

API 参考

CSD 在 /api/shape/csd/ 提供了专用 API,用于管理域名、脚本、缓解措施和监控。也可以通过负载均衡器配置 API 在 HTTP 负载均衡器上启用 CSD。

所有 API 调用均需要 API 令牌。请在 XC 控制台的 AdministrationCredentialsAPI Credentials 中生成令牌。

按照 API 自动化 — 环境配置 中的说明设置您的环境变量:

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

所有 curl 示例均使用 xTOKENx 占位符格式。请替换为您的环境变量,或使用页面顶部的交互式表单。例如,xF5XC_API_TOKENx 对应 $F5XC_API_TOKEN

Terminal window
-H "Authorization: APIToken xF5XC_API_TOKENx"
  • POST 以 JSON 格式返回已创建的对象。
  • PUTDELETE 在 HTTP 200 时返回空的 \{\} — 这是正常现象,并非错误。请勿将空响应体视为失败。

列表端点(如 /healthchecks/origin_pools/protected_domains)与单个 GET 端点(如 /healthchecks/\{name\})返回不同的响应结构

端点类型示例路径响应结构
列表/origin_pools条目具有顶层 .name.namespace.tenantmetadata: nullget_spec: null
单个 GET/origin_pools/\{name\}对象具有 .metadata.name.spec.* 以及完整配置

请针对每种情况使用正确的 jq 路径。例如,从列表端点提取名称时,请使用 .items[].name,而非 .items[].metadata.name

对于受保护域名的 GET 和 DELETE 操作,路径参数 \{name\}域名值本身(例如 bankexample.com),而非任意对象名称。这与其他 F5 XC 对象不同,后者的名称是用户自定义的标识符。

基础路径:/api/shape/csd/namespaces/\{namespace\}/

操作方法路径
启用 CSDPOST/api/shape/csd/namespaces/system/init
获取状态GET/api/shape/csd/namespaces/\{namespace\}/status
获取 JS 配置GET/api/shape/csd/namespaces/\{namespace\}/js_configuration
测试 JSPOST/api/shape/csd/namespaces/\{namespace\}/testjs
更新域名POST/api/shape/csd/namespaces/\{namespace\}/update_domains
操作方法路径
列表GET/api/shape/csd/namespaces/\{namespace\}/protected_domains
获取GET/api/shape/csd/namespaces/\{namespace\}/protected_domains/\{name\}
创建POST/api/shape/csd/namespaces/\{namespace\}/protected_domains
删除DELETE/api/shape/csd/namespaces/\{namespace\}/protected_domains/\{name\}
操作方法路径
列出已检测域名GET/api/shape/csd/namespaces/\{namespace\}/detected_domains
获取详情GET/api/shape/csd/namespaces/\{namespace\}/domain_details
操作方法路径
列表GET/api/shape/csd/namespaces/\{namespace\}/allowed_domains
获取GET/api/shape/csd/namespaces/\{namespace\}/allowed_domains/\{name\}
创建POST/api/shape/csd/namespaces/\{namespace\}/allowed_domains
删除DELETE/api/shape/csd/namespaces/\{namespace\}/allowed_domains/\{name\}
操作方法路径
列表GET/api/shape/csd/namespaces/\{namespace\}/mitigated_domains
获取GET/api/shape/csd/namespaces/\{namespace\}/mitigated_domains/\{name\}
创建POST/api/shape/csd/namespaces/\{namespace\}/mitigated_domains
删除DELETE/api/shape/csd/namespaces/\{namespace\}/mitigated_domains/\{name\}
操作方法路径
列出脚本POST/api/shape/csd/namespaces/\{namespace\}/scripts
列出脚本(旧版)GET/api/shape/csd/namespaces/\{namespace\}/scripts
获取脚本概览GET/api/shape/csd/namespaces/\{namespace\}/scripts/\{id\}/dashboard
列出行为GET/api/shape/csd/namespaces/\{namespace\}/scripts/\{id\}/behaviors
列出网络交互GET/api/shape/csd/namespaces/\{namespace\}/scripts/\{id\}/networkInteractions
更新说明POST/api/shape/csd/namespaces/\{namespace\}/scripts/\{script_id\}/justification
删除说明DELETE/api/shape/csd/namespaces/\{namespace\}/script/justification/\{justification_id\}
更新已读状态POST/api/shape/csd/namespaces/\{namespace\}/scripts/\{id\}/readStatus
列出受影响用户POST/api/shape/csd/namespaces/\{namespace\}/scripts/\{script_id\}/affectedUsers
操作方法路径
列出表单字段GET/api/shape/csd/namespaces/\{namespace\}/formFields
列出表单字段(POST)POST/api/shape/csd/namespaces/\{namespace\}/formFields
获取表单字段GET/api/shape/csd/namespaces/\{namespace\}/formFields/\{id\}
按脚本列出GET/api/shape/csd/namespaces/\{namespace\}/scripts/\{id\}/formFields
更新字段分析POST/api/shape/csd/namespaces/\{namespace\}/formFields/analysis

为租户初始化 CSD:

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"

查询参数:locations(按位置过滤)、risk(按风险级别过滤)。

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

按高风险过滤:

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 .

也可以通过 /api/config/namespaces/\{namespace\}/http_loadbalancers/\{name\} 上的配置 API,直接在 HTTP 负载均衡器上启用 CSD JavaScript 注入。

负载均衡器规格中的 client_side_defense 字段用于控制注入:

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

policy 接受以下之一:

字段描述
js_insert_all_pages在所有页面上注入
js_insert_all_pages_except在所有页面上注入,排除规则中指定的页面除外
js_insertion_rules仅在匹配规则的页面上注入
disable_js_insert不注入

如需在负载均衡器上禁用 CSD,请将 client_side_defense 替换为 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'

检索、修改并应用:

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'

使用 js_insert_all_pages_exceptjs_insertion_rules 时,每条规则匹配域名与路径的组合。

域名(选择其一):

字段示例
any_domain: \{\}所有域名
domain.exact_value"app.example.com"
domain.suffix_value".example.com"
domain.regex_value".*\\.example\\.com"

路径(选择其一):

字段示例
path.path"/login"
path.prefix"/checkout"
path.regex"/user/[0-9]+"