Pular para o conteúdo

Referência da API

O CSD possui uma API dedicada em /api/shape/csd/ para gerenciamento de domínios, scripts, mitigação e monitoramento. O CSD também pode ser habilitado em Balanceadores de Carga HTTP por meio da API de configuração do balanceador de carga.

Todas as chamadas de API requerem um token de API. Gere um no Console XC em AdministrationCredentialsAPI Credentials.

Configure suas variáveis de ambiente conforme descrito em Automação de API — Configuração do Ambiente:

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

Todos os exemplos com curl utilizam o formato de placeholder xTOKENx. Substitua pelas suas variáveis de ambiente ou utilize o formulário interativo no topo da página. Por exemplo, xF5XC_API_TOKENx corresponde a $F5XC_API_TOKEN.

Terminal window
-H "Authorization: APIToken xF5XC_API_TOKENx"
  • POST retorna o objeto criado como JSON.
  • PUT e DELETE retornam um \{\} vazio no HTTP 200 — isso é normal, não é um erro. Não trate um corpo de resposta vazio como falha.

Endpoints de lista (p. ex., /healthchecks, /origin_pools, /protected_domains) e endpoints GET individuais (p. ex., /healthchecks/\{name\}) retornam estruturas de resposta diferentes:

Tipo de endpointExemplo de caminhoEstrutura da resposta
Lista/origin_poolsItens possuem .name, .namespace, .tenant no nível superior, com metadata: null e get_spec: null
GET individual/origin_pools/\{name\}O objeto possui .metadata.name, .spec.* com a configuração completa

Utilize os caminhos jq corretos para cada caso. Por exemplo, para extrair nomes de um endpoint de lista, use .items[].name, não .items[].metadata.name.

Para operações GET e DELETE de domínios protegidos, o parâmetro de caminho \{name\} é o próprio valor do domínio (p. ex., bankexample.com), e não um nome de objeto arbitrário. Isso difere de outros objetos F5 XC, nos quais o nome é um identificador escolhido pelo usuário.

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

OperaçãoMétodoCaminho
Habilitar CSDPOST/api/shape/csd/namespaces/system/init
Obter StatusGET/api/shape/csd/namespaces/\{namespace\}/status
Obter Configuração JSGET/api/shape/csd/namespaces/\{namespace\}/js_configuration
Testar JSPOST/api/shape/csd/namespaces/\{namespace\}/testjs
Atualizar DomíniosPOST/api/shape/csd/namespaces/\{namespace\}/update_domains
OperaçãoMétodoCaminho
ListarGET/api/shape/csd/namespaces/\{namespace\}/protected_domains
ObterGET/api/shape/csd/namespaces/\{namespace\}/protected_domains/\{name\}
CriarPOST/api/shape/csd/namespaces/\{namespace\}/protected_domains
ExcluirDELETE/api/shape/csd/namespaces/\{namespace\}/protected_domains/\{name\}
OperaçãoMétodoCaminho
Listar DetectadosGET/api/shape/csd/namespaces/\{namespace\}/detected_domains
Obter DetalhesGET/api/shape/csd/namespaces/\{namespace\}/domain_details
OperaçãoMétodoCaminho
ListarGET/api/shape/csd/namespaces/\{namespace\}/allowed_domains
ObterGET/api/shape/csd/namespaces/\{namespace\}/allowed_domains/\{name\}
CriarPOST/api/shape/csd/namespaces/\{namespace\}/allowed_domains
ExcluirDELETE/api/shape/csd/namespaces/\{namespace\}/allowed_domains/\{name\}
OperaçãoMétodoCaminho
ListarGET/api/shape/csd/namespaces/\{namespace\}/mitigated_domains
ObterGET/api/shape/csd/namespaces/\{namespace\}/mitigated_domains/\{name\}
CriarPOST/api/shape/csd/namespaces/\{namespace\}/mitigated_domains
ExcluirDELETE/api/shape/csd/namespaces/\{namespace\}/mitigated_domains/\{name\}
OperaçãoMétodoCaminho
Listar ScriptsPOST/api/shape/csd/namespaces/\{namespace\}/scripts
Listar Scripts (legado)GET/api/shape/csd/namespaces/\{namespace\}/scripts
Obter Visão Geral do ScriptGET/api/shape/csd/namespaces/\{namespace\}/scripts/\{id\}/dashboard
Listar ComportamentosGET/api/shape/csd/namespaces/\{namespace\}/scripts/\{id\}/behaviors
Listar Interações de RedeGET/api/shape/csd/namespaces/\{namespace\}/scripts/\{id\}/networkInteractions
Atualizar JustificativaPOST/api/shape/csd/namespaces/\{namespace\}/scripts/\{script_id\}/justification
Excluir JustificativaDELETE/api/shape/csd/namespaces/\{namespace\}/script/justification/\{justification_id\}
Atualizar Status de LeituraPOST/api/shape/csd/namespaces/\{namespace\}/scripts/\{id\}/readStatus
Listar Usuários AfetadosPOST/api/shape/csd/namespaces/\{namespace\}/scripts/\{script_id\}/affectedUsers
OperaçãoMétodoCaminho
Listar Campos de FormulárioGET/api/shape/csd/namespaces/\{namespace\}/formFields
Listar Campos de Formulário (POST)POST/api/shape/csd/namespaces/\{namespace\}/formFields
Obter Campo de FormulárioGET/api/shape/csd/namespaces/\{namespace\}/formFields/\{id\}
Listar por ScriptGET/api/shape/csd/namespaces/\{namespace\}/scripts/\{id\}/formFields
Atualizar Análise de CampoPOST/api/shape/csd/namespaces/\{namespace\}/formFields/analysis

Inicializa o CSD para o 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"

Parâmetros de consulta: locations (filtrar por localização), risk (filtrar por nível de risco).

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

Filtrar por alto risco:

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 .

Configuração do CSD no Balanceador de Carga HTTP

Seção intitulada “Configuração do CSD no Balanceador de Carga HTTP”

A injeção de JavaScript do CSD também pode ser habilitada diretamente em um Balanceador de Carga HTTP por meio da API de configuração em /api/config/namespaces/\{namespace\}/http_loadbalancers/\{name\}.

O campo client_side_defense dentro da especificação do balanceador de carga controla a injeção:

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

O campo policy aceita um dos seguintes valores:

CampoDescrição
js_insert_all_pagesInjetar em todas as páginas
js_insert_all_pages_exceptInjetar em todas as páginas, exceto pelas regras de exclusão
js_insertion_rulesInjetar apenas nas páginas que correspondam às regras
disable_js_insertNão injetar

Para desabilitar o CSD em um balanceador de carga, substitua client_side_defense por disable_client_side_defense: \{\}.

Ler Configuração do CSD a partir do Balanceador de Carga

Seção intitulada “Ler Configuração do CSD a partir do Balanceador de Carga”
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'

Recupere, modifique e aplique:

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'

Correspondência de Domínio e Caminho para Regras de Exclusão

Seção intitulada “Correspondência de Domínio e Caminho para Regras de Exclusão”

Ao utilizar js_insert_all_pages_except ou js_insertion_rules, cada regra corresponde a uma combinação de domínio e caminho.

Domínio (escolha um):

CampoExemplo
any_domain: \{\}Todos os domínios
domain.exact_value"app.example.com"
domain.suffix_value".example.com"
domain.regex_value".*\\.example\\.com"

Caminho (escolha um):

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