콘텐츠로 이동

API 참조

CSD는 도메인, 스크립트, 완화 및 모니터링 관리를 위해 /api/shape/csd/에 전용 API를 제공합니다. CSD는 로드 밸런서 구성 API를 통해 HTTP 로드 밸런서에서도 활성화할 수 있습니다.

모든 API 호출에는 API 토큰이 필요합니다. XC 콘솔의 관리자격 증명API 자격 증명에서 생성하세요.

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, .tenant가 있으며 metadata: nullget_spec: null
개별 GET/origin_pools/\{name\}객체에는 .metadata.name, .spec.*와 전체 구성이 있음

각각에 올바른 jq 경로를 사용하세요. 예를 들어, 목록 엔드포인트에서 이름을 추출하려면 .items[].metadata.name이 아닌 .items[].name을 사용하세요.

보호된 도메인의 GET 및 DELETE 작업에서 \{name\} 경로 매개변수는 임의의 객체 이름이 아닌 도메인 값 자체(예: bankexample.com)입니다. 이는 이름이 사용자가 선택한 식별자인 다른 F5 XC 객체와 다릅니다.

기본 경로: /api/shape/csd/namespaces/\{namespace\}/

작업메서드경로
CSD 활성화POST/api/shape/csd/namespaces/system/init
상태 조회GET/api/shape/csd/namespaces/\{namespace\}/status
JS 구성 조회GET/api/shape/csd/namespaces/\{namespace\}/js_configuration
JS 테스트POST/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 .

CSD JavaScript 삽입은 /api/config/namespaces/\{namespace\}/http_loadbalancers/\{name\}의 구성 API를 통해 HTTP 로드 밸런서에서 직접 활성화할 수도 있습니다.

로드 밸런서 사양 내의 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_defensedisable_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_except 또는 js_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]+"