llm-guard-server/doc/open-api-interface.md

382 lines
18 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# LLM Guard OpenAPI 对外接口文档
## 1. 文档说明
- 文档版本v1.0
- 适用服务:`llm-guard-open-api`
- 基础路径:`/openapi`
- 字符集:`UTF-8`
- 请求/响应格式:`application/json`
## 1.1 测试环境信息
- 接口地址:`http://49.233.48.5:6201/open-api/openapi/guard/check`
## 2. 调用方式
### 2.1 请求格式
- 请求方法:`POST`
- Content-Type`application/json`
- 鉴权要求:当前版本无需传 `X-Api-Key`、`X-Api-Secret`
### 2.2 参数错误返回
- HTTP 状态:`200`
- 示例:
```json
{
"code": 400,
"msg": "reqData 不能为空"
}
```
## 3. 检测接口
### 3.1 接口定义
- 方法:`POST`
- 路径:`/openapi/guard/check`
- 说明:统一执行 ACL、ATTACK、CONTENT 三类规则检测;命中时自动落库告警日志。
- 兼容性:顶层固定为 `reqData``reqData` 内支持原始网关请求体原样提交,不强制重组字段。
### 3.2 请求体
```json
{
"sourceIp": "10.0.0.1",
"path": "/api/llm/chat/completion/V2",
"method": "POST",
"interfaceType": "LLM",
"model": "qwen-max",
"callerId": "partner-a",
"reqData": {
"messages": [
{
"role": "user",
"content": "please union select password and email test_user@demo.com"
}
],
"model": "通义千问2.5-72B",
"stream": false
}
}
```
### 3.3 请求字段说明
说明:
- 顶层固定字段:`sourceIp`、`path`、`method`、`interfaceType`、`model`、`callerId`、`reqData`。
- `reqData` 内部可直接放三类网关原始入参,不强制重组。
- 系统会优先使用顶层字段做 ACL 与审计,`reqData` 用于内容检测与原文追溯。
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| sourceIp | string | 是 | 来源 IPACL IP 规则依赖) |
| path | string | 是 | 请求路径ACL 接口规则依赖) |
| method | string | 是 | 请求方法ACL 接口规则依赖) |
| interfaceType | string | 是 | 接口类型:`AGENT` / `LLM` / `VLM`(分流) |
| model | string | 是 | 模型标识(业务关联字段) |
| callerId | string | 是 | 调用方标识(调用方追踪) |
| reqData | object | 是 | 业务原始请求体 |
| reqData.requestId | string | 否 | 请求唯一标识;为空时系统自动生成 |
| reqData.traceId | string | 否 | 链路追踪标识;为空时系统自动生成 |
| reqData.scopeCode | string | 否 | 规则作用域;默认 `GLOBAL` |
| reqData.stream | boolean | 否 | 是否流式;默认 `false` |
| reqData.text/messages/files/metadata/payload/其他任意字段 | mixed | 否 | 原始业务参数,统一纳入规则匹配语料 |
### 3.4 模型返回数据检测接口(补充)
- 方法:`POST`
- 路径:`/openapi/guard/check/response`
- 说明:用于检测模型输出内容(响应侧检测),会执行与请求侧一致的规则引擎,但检测阶段为 `RESPONSE`
- 兼容性:顶层结构与 `/openapi/guard/check` 一致,差异是必须传 `respData``reqData` 可选用于补充上下文)。
#### 3.4.1 请求体示例
```json
{
"sourceIp": "10.0.0.1",
"path": "/api/llm/chat/completion/V2",
"method": "POST",
"interfaceType": "LLM",
"model": "gpt-4o-mini",
"callerId": "partner-a",
"reqData": {
"requestId": "req-demo-002",
"traceId": "trace-demo-002",
"scopeCode": "GLOBAL",
"model": "gpt-4o-mini"
},
"respData": {
"output": "answer: User_ID:9527 | Timestamp:2026/02/07 13:47:54",
"content": "我的邮箱是 test_user@demo.com"
}
}
```
#### 3.4.2 字段说明(与 `/check` 对比)
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| sourceIp | string | 是 | 来源 IPACL IP 规则依赖) |
| path | string | 是 | 请求路径ACL 接口规则依赖) |
| method | string | 是 | 请求方法ACL 接口规则依赖) |
| interfaceType | string | 是 | 接口类型:`AGENT` / `LLM` / `VLM` |
| model | string | 是 | 模型标识(业务关联字段) |
| callerId | string | 是 | 调用方标识 |
| reqData | object | 否 | 请求上下文(用于 requestId/traceId/scopeCode 等补充) |
| respData | object | 是 | 模型返回数据,作为响应侧检测输入;为空时返回 `code=400` |
#### 3.4.3 响应说明
- 响应结构与 `/openapi/guard/check` 完全一致(`code/msg/data`)。
- `data.hits` 仍包含 `moduleType/eventType/ruleCode/action/message`
- 命中响应侧规则后会写入告警日志,供“提示词防护/漏洞防护/协议安全/DDos”等页面聚合查询。
## 4. 响应体
### 4.1 成功响应结构
```json
{
"code": 200,
"msg": "来源IP不在白名单命中攻击特征命中内容DLP规则",
"data": {
"requestId": "req-001",
"traceId": "trace-001",
"decision": "BLOCK",
"alerted": true,
"rejectCode": 403,
"rejectAction": "blocked",
"rejectMsg": "内容不合规",
"hits": [
{
"moduleType": "ACL",
"eventType": "ACL_IP_WHITELIST",
"ruleId": null,
"ruleCode": null,
"action": "BLOCK",
"message": "来源IP不在白名单"
},
{
"moduleType": "ATTACK",
"eventType": "ATTACK_SIGNATURE",
"ruleId": "sig_multi_1",
"ruleCode": "ATTACK_SQL_MULTI",
"action": "ALERT",
"message": "命中攻击特征"
},
{
"moduleType": "CONTENT",
"eventType": "CONTENT_DLP",
"ruleId": "dlp_multi_1",
"ruleCode": "DLP_EMAIL_MULTI",
"action": "ALERT",
"message": "命中内容DLP规则"
}
]
}
}
```
### 4.2 响应字段说明
| 字段 | 类型 | 说明 |
|---|---|---|
| code | number | 业务码;`200` 成功,`400` 请求参数错误 |
| msg | string | 命中说明汇总(`hits.message` 去重后以 `` 拼接);未命中时为“未命中规则,允许通过” |
| data.requestId | string | 请求 ID |
| data.traceId | string | 链路 ID |
| data.decision | string | 最终决策:`ALLOW` / `BLOCK` |
| data.alerted | boolean | 是否命中任意规则 |
| data.rejectCode | number | 命中内容合规拦截时返回的拒绝码(来自“拒绝描述配置”) |
| data.rejectAction | string | 命中内容合规拦截时返回的动作标识 |
| data.rejectMsg | string | 命中内容合规拦截时返回的提示文案 |
| data.hits | array | 命中明细列表 |
| data.hits[].moduleType | string | 模块:`ACL` / `ATTACK` / `CONTENT` |
| data.hits[].eventType | string | 事件类型 |
| data.hits[].ruleId | string | 命中的规则/特征 ID |
| data.hits[].ruleCode | string | 命中的规则编码 |
| data.hits[].action | string | 命中动作:`ALLOW` / `BLOCK` / `ALERT` / `MASK` / `REPLACE` |
| data.hits[].message | string | 命中说明 |
### 4.3 判定规则(调用方重点)
- 是否允许放行:看 `data.decision`
- `ALLOW`:允许通过
- `BLOCK`:不允许通过
- 是否触发告警:看 `data.alerted`
- `true`:已触发告警并写日志
- `false`:未触发告警
- 命中明细:看 `data.hits[]`
- 可用于前端展示、审计留痕、二次策略路由。
## 5. 检测范围与执行逻辑
### 5.1 检测模块
- ACLIP 白黑名单、接口封堵、自定义组合规则
- ATTACK攻击规则 + 特征签名(如 SQL 注入、越狱等)
- CONTENTDLP邮箱/手机号/证件等)、内容策略、脱敏模板策略
- 内容审核页面联动:`合规检测范围` 可控制是否执行输入侧内容检测;`词库管理` 会参与内容命中;`拒绝描述配置` 会覆盖拦截文案与返回字段。
### 5.2 语料拼接范围
系统会将下列字段聚合后参与规则匹配:
- `text`
- `path`
- `method`
- `callerId`
- `messages`(递归提取)
- `files`(递归提取)
- `metadata`(递归提取)
- `payload`(递归提取)
## 6. 告警与审计
命中规则时,系统自动写入:
- 事件表:`d_log_alert_event`
- 命中明细表:`d_log_alert_hit`
写入内容包含请求标识、模块类型、事件类型、动作、命中说明、来源 IP、调用方等字段可直接用于审计与报表。
## 7. 三类网关报文适配建议
### 7.1 智能体接口AGENT
- 建议映射:`text`、`files`、`metadata`。
- 原始结构可同时放入 `payload` 便于追溯。
### 7.2 语义模型接口LLM
- 建议映射:`messages`。
- 补充模型请求参数到 `metadata/payload`
### 7.3 多模态接口VLM
- 建议映射:`messages`(含文本/图片等多模态内容)。
- 文件或大对象建议放 `files` 并保留 `payload` 原文。
## 8. 调用示例cURL
### 8.1 请求侧检测:`/openapi/guard/check`
```bash
curl -sS "http://ip:6201/open-api/openapi/guard/check" \
-H "Content-Type: application/json" \
-d '{
"sourceIp":"10.0.0.1",
"path":"/api/llm/chat/completion/V2",
"method":"POST",
"interfaceType":"LLM",
"model":"qwen-max",
"callerId":"partner-a",
"reqData":{
"requestId":"req-demo-001",
"traceId":"trace-demo-001",
"scopeCode":"GLOBAL",
"messages":[
{
"role":"user",
"content":"please union select password and email test_user@demo.com"
}
]
}
}'
```
### 8.2 响应侧检测:`/openapi/guard/check/response`
```bash
curl -sS "http://ip:6201/open-api/openapi/guard/check/response" \
-H "Content-Type: application/json" \
-d '{
"sourceIp":"10.0.0.1",
"path":"/api/llm/chat/completion/V2",
"method":"POST",
"interfaceType":"LLM",
"model":"gpt-4o-mini",
"callerId":"partner-a",
"reqData":{
"requestId":"req-demo-002",
"traceId":"trace-demo-002",
"scopeCode":"GLOBAL",
"model":"gpt-4o-mini"
},
"respData":{
"output":"answer: User_ID:9527 | Timestamp:2026/02/07 13:47:54",
"content":"我的邮箱是 test_user@demo.com"
}
}'
```
## 9. 对接注意事项
- 顶层必填字段(`/openapi/guard/check``sourceIp`、`path`、`method`、`interfaceType`、`model`、`callerId`、`reqData`。缺失会返回 `code=400`
- 顶层必填字段(`/openapi/guard/check/response``sourceIp`、`path`、`method`、`interfaceType`、`model`、`callerId`、`respData`。缺失会返回 `code=400`
- 建议调用方保证 `requestId` 全局唯一,方便对账和审计检索。
- 建议统一使用 `scopeCode=GLOBAL`(或双方约定的租户/场景编码)。
-`decision=BLOCK` 时,调用方应立即拦截业务请求,不再透传下游。
-`decision=ALLOW``alerted=true` 时,建议记录风控告警但允许继续处理。
## 10. 建议额外字段
建议这些字段放在 `reqData` 内(如无对应值可不传):
- 强烈建议:
- `sourceIp`:用于 ACL 白名单/黑名单判断。
- `path`:用于接口封堵规则判断。
- `method`:与 `path` 组合判断 ACL 接口规则。
- `interfaceType`:标识 `AGENT/LLM/VLM`,便于策略分层与审计。
- `callerId`:用于区分调用方、追踪告警来源。
- 可选增强:
- `tenantId` / `appId` / `bizCode`:多租户或多应用隔离策略。
- `reqTimestamp`(毫秒时间戳):用于请求时序核对。
- `clientVersion`:便于回溯某版本客户端行为。
- `channel`web/app/openapi 等):便于运营统计与分流。
## 11. 与“注入攻击防护”页面的数据关联
- 配置侧页面接口:
- `GET /config/attack/injection/page`:页面聚合(不分页,仅返回引擎状态 + 卡片统计)。
- `GET /config/attack/injection/rule/list`:按分类查询“细分规则管理”列表(弹窗)。
- `POST /config/attack/injection/rule`:新增细分规则。
- `PUT /config/attack/injection/rule`:编辑细分规则(规则名称/描述/风险等级等)。
- `PUT /config/attack/injection/rule/status`:启停细分规则。
- `DELETE /config/attack/injection/rule/{ids}`:删除细分规则。
- `GET /config/attack/injection/monitor/list`:实时拦截流分页。
- `GET /config/attack/injection/monitor/export`:实时拦截流导出。
- 页面数据来源:`open-api` 在调用 `/openapi/guard/check`(请求侧)或 `/openapi/guard/check/response`(响应侧)命中 ATTACK 规则后写入的告警日志。
- 关键落库表:`d_log_alert_event`(字段如 `module_type/event_type/rule_code/hit_message/source_ip/request_path/action_taken/occurred_at`)。
- 页面“实时拦截流”即查询 `module_type=ATTACK` 的告警事件;引擎卡片命中数由同表聚合得到。
- 若调用方需在页面展示更准确的“目标服务”,建议在请求中稳定传递 `callerId`(已写入 `d_log_alert_event.caller_id`)。
- 规则编辑与检测联动:`open-api` 规则匹配仍基于 `d_attack_rule.rule_code/category/sub_type/action/status` + `d_attack_signature`;当细分规则 `sub_type``SQL_UNION/SQL_ERROR/CMD_TIME` 等扩展值时,`open-api` 会自动归并到对应注入引擎开关(如 `INJECTION_SQL`、`INJECTION_CMD`)进行启停控制。
## 12. 与“提示词安全”页面的数据关联
- 配置侧页面接口:
- `GET /config/attack/prompt/page`:页面聚合(不分页,仅返回引擎状态、卡片统计、防御等级、特征库数量)。
- `GET /config/attack/prompt/rule/list`:规则管理弹窗列表(不分页)。
- `GET /config/attack/prompt/rule/{id}`:规则详情。
- `POST /config/attack/prompt/rule`:新增规则。
- `PUT /config/attack/prompt/rule`:编辑规则。
- `PUT /config/attack/prompt/rule/status`:启停规则。
- `DELETE /config/attack/prompt/rule/{ids}`:删除规则。
- `POST /config/attack/prompt/rule/import`:导入规则。
- `GET /config/attack/prompt/rule/export`:导出规则。
- `GET /config/attack/prompt/log/list`:防护日志分页(来源于 open-api 写入日志)。
- `GET /config/attack/prompt/log/export`:导出防护日志。
- 页面数据来源:`open-api` 在调用 `/openapi/guard/check`(请求侧)或 `/openapi/guard/check/response`(响应侧)命中 ATTACK 规则后写入的告警日志。
- 关键落库表:`d_attack_rule`(提示词规则)、`d_attack_signature`(攻击特征)、`d_attack_switch`(提示词开关)、`d_log_alert_event`(命中日志)。
- 防护日志字段来源:`d_log_alert_event` 提供时间/处置动作,`d_attack_rule(category=PROMPT)` 提供分类,`d_log_alert_hit.actual_value_preview/confidence` 提供提示词片段与置信度。
- 规则编辑与检测联动:当 `d_attack_rule.category=PROMPT` 时,`open-api` 会按 `sub_type` 自动映射提示词开关键(如 `PROMPT_JAILBREAK`、`PROMPT_INJECTION`、`PROMPT_INDUCEMENT`、`PROMPT_SEMANTIC`、`PROMPT_RULE_MATCH`、`PROMPT_SIGNATURE`)决定是否参与检测。
## 13. 与“DDoS 防护”页面的数据关联
- 配置侧页面接口:
- `GET /config/attack/ddos/page`DDoS 页面聚合(状态、指标卡、模块开关、风险提示,不含趋势/熔断列表)。
- `GET /config/attack/ddos/trend/list`:流量清洗趋势分页(从聚合页拆分)。
- `GET /config/attack/ddos/circuit/list`:智能熔断监控分页(从聚合页拆分)。
- `POST /config/attack/ddos/report/generate`:生成完整防护报表(聚合快照)。
- `GET /config/attack/ddos/switch/config/{switchKey}`:查询单个 DDoS 模块阈值配置。
- `PUT /config/attack/ddos/switch/config`:更新单个 DDoS 模块阈值配置。
- 页面数据来源:`open-api` 在调用 `/openapi/guard/check`(请求侧)或 `/openapi/guard/check/response`(响应侧)命中 DDoS 策略后写入告警日志。
- 关键落库表:`d_log_alert_event``module_type=DDOS` 的记录用于趋势与监控)、`d_attack_switch``DDOS_%` 开关矩阵)。
- 检测联动说明:`open-api` 会根据 `DDOS_CONN_LIMIT/DDOS_RATE_LIMIT/DDOS_TOKEN_RATE/DDOS_CONCURRENCY` 开关键执行限流判定;阈值读取自 `d_attack_switch.switch_desc` 的 JSON 配置(如 `threshold/windowSec`),命中后写入 `d_log_alert_event`,并反映到 DDoS 页面指标与熔断监控。
## 14. 与“协议安全”页面的数据关联
- 配置侧页面接口:
- `GET /config/attack/protocol/page`:协议安全页面聚合(引擎状态 + 模块卡片,不分页)。
- `GET /config/attack/protocol/switch/config/{switchKey}`:查询某个协议模块的深度防护配置(细分规则 + 最近违规审计)。
- `PUT /config/attack/protocol/switch/config`:保存某个协议模块的深度防护配置(支持模块总开关 + 细分规则开关)。
- `PUT /config/attack/protocol/probe/enabled`:启停“协议漏洞主动探测引擎”。
- 页面数据来源:`open-api` 调用 `/openapi/guard/check``/openapi/guard/check/response` 时触发协议检测,命中后写入告警日志。
- 关键落库表:
- `d_attack_switch`:存储 `PROTOCOL_%` 模块开关与 `switch_desc` JSON细分规则开关
- `d_log_alert_event`:存储 `module_type=PROTOCOL` 的违规命中记录,作为“最近协议违规审计”数据源。
- 检测联动说明:`open-api` 在 `checkProtocolRules` 中按 `PROTOCOL_%` 模块开关和细分规则配置执行协议层检测(方法限制、头字段检查、内容类型检查、参数检查、加密与证书校验、漏洞与异常检测等);其中漏洞/异常探测受 `PROTOCOL_PROBE_ENGINE` 控制。命中后按 `rule_code=PROTOCOL_*` 写入日志并回传命中详情。
## 15. 与“漏洞防护”页面的数据关联
- 配置侧页面接口:
- `GET /config/attack/vuln/page`:漏洞防护页面聚合(规则库版本 + 模块卡片,不分页)。
- `GET /config/attack/vuln/switch/config/{switchKey}`:查询单个漏洞模块配置(趋势、风险、检测逻辑、拦截样本)。
- `PUT /config/attack/vuln/switch/config`:更新单个漏洞模块配置与开关状态。
- `POST /config/attack/vuln/rule-base/sync`:同步漏洞规则特征库版本。
- `POST /config/attack/vuln/asset/bind`:将漏洞补丁策略与资产(接口/调用方)关联。
- `GET /config/attack/vuln/patch/status`:查询“高危漏洞虚拟补丁状态”卡片数据。
- 页面数据来源:`open-api` 调用 `/openapi/guard/check``/openapi/guard/check/response` 触发漏洞检测,命中后写入告警日志。
- 关键落库表:
- `d_attack_switch`:存储 `VULN_%` 漏洞模块开关与精简检测逻辑配置(`switch_desc` JSON
- `d_log_alert_event`:存储 `module_type=VULNERABILITY` 的命中事件。
- `d_log_alert_hit`:存储命中载荷片段,用于“拦截攻击样本”展示。
- 检测联动说明:`open-api` 在 `checkVulnerabilityRules` 中按 `VULN_%` 配置执行目录遍历、XSS、CSRF、文件包含、信息泄露、规则自定义、扫描、补丁、规则库同步等检测并按模块生成 `rule_code=VULN_*` 日志。