tduarte-eng/MIAGUARD
GitHub: tduarte-eng/MIAGUARD
基于 FastAPI 的 LLM 输入安全护栏服务,通过可配置的扫描器在模型调用前拦截 prompt 注入、PII 泄露等风险。
Stars: 0 | Forks: 0
# POC Guardrails V2
基于 FastAPI 的 Guardrails API,用于在调用 LLM 之前验证用户输入。
## 目标
在进入主流程之前拦截高风险内容(prompt injection、PII、有害内容等),并通过 Langfuse 实现可观测性,同时集成 LiteLLM。
## 架构(摘要)
- `main.py`
- 暴露 HTTP 端点(`/health`, `/guards/{guard_name}/validate`)
- 从 payload 中提取文本(`llmOutput`, `prompt`, `text`, `messages`)
- 根据 guard 配置文件选择扫描器(`GUARDS_CONFIG`)
- 拦截时返回 `400`(避免客户端 fail-open)
- `guardrails_logic.py`
- 包含输入/输出契约
- 定义扫描器提示词(`S01`…`S11`)
- 以**顺序**方式执行扫描器,并采用 **fail-fast** 策略
- 基础设施出错时应用 **fail-secure** 行为
- `observability.py`
- 初始化 Langfuse 客户端
- 创建主 trace 及每个扫描器的 observation
- 为每次请求生成安全评分
- `deploy_lab.sh`
- 在 ACR 中构建并推送镜像
- 更新 Azure Container App
- 将 `.env` 中的变量应用到 Container App
## Guard 配置文件(endpoint)
主要端点:
```
POST /guards/{guard_name}/validate
```
可用配置文件:
- `default_guard`: `S01`, `S02`
- `strict_financial_guard`: `S01`, `S02`, `S07`, `S08`, `S09`
- `content_moderation_guard`: `S06`, `S10`
- `test_always_block_guard`: `S11`
- `full_paranoid_mode`: `S01..S10`
## 当前决策流程
1. 接收文本并从 guard 中选择扫描器列表。
2. **按列表顺序**执行扫描器。
3. 如果某个扫描器检测到风险,则中断(`break`)并拦截。
4. 如果出现 RBAC/Azure 错误,返回基础设施拦截。
5. 如果出现未映射的错误,视为风险处理(fail-secure)。
## 本地运行
### 前置条件
- Docker 和 Docker Compose
- Python 3.11+(可选,用于不带 Docker 的本地测试)
- 已配置 `.env` 文件
### 启动本地 API
```
docker-compose up -d --build
```
### 快速测试
```
curl -X POST "http://localhost:8080/guards/default_guard/validate" \
-H "Content-Type: application/json" \
-d '{
"prompt": "Quais boas práticas de estudo?",
"messages": [{"role":"user","content":"Quais boas práticas de estudo?"}]
}'
```
## 部署到 Azure
官方脚本:
```
./deploy_lab.sh
```
该脚本执行:
1. 登录 ACR
2. 构建/推送镜像
3. 创建/更新 Container App
4. 在 Container App 中应用环境变量
## 在 Azure 中验证变量
### 1) 查看已配置的环境变量名称
```
az containerapp show \
-n aca-mia-miaguard-lab-brazilsouth \
-g rg-mia-lab \
--query "properties.template.containers[0].env[].name" -o tsv
```
### 2) 检查容器内的运行时
```
az containerapp exec \
-n aca-mia-miaguard-lab-brazilsouth \
-g rg-mia-lab \
--command "env | grep -E 'LITELLM_|OPENAI_|LANGFUSE_'"
```
### 3) 验证存在性而不泄露密钥
```
az containerapp exec \
-n aca-mia-miaguard-lab-brazilsouth \
-g rg-mia-lab \
--command "python -c \"import os; ks=['LITELLM_API_KEY','LITELLM_API_BASE_URL','LITELLM_MODEL_NAME','LANGFUSE_HOST']; [print(k, bool(os.getenv(k)), len(os.getenv(k,'') or '')) for k in ks]\""
```
### 4) 对比本地 `.env` 与 Azure(仅名称)
```
python3 - <<'PY'
from pathlib import Path
import json, subprocess
local = [
l.split('=',1)[0].strip()
for l in Path('.env').read_text().splitlines()
if l.strip() and not l.strip().startswith('#') and '=' in l
]
raw = subprocess.check_output([
'az','containerapp','show',
'-n','aca-mia-miaguard-lab-brazilsouth',
'-g','rg-mia-lab','-o','json'
], text=True)
obj = json.loads(raw)
az = [e.get('name') for e in obj['properties']['template']['containers'][0].get('env', [])]
print('faltando_no_azure:', sorted(set(local) - set(az)))
print('extras_no_azure:', sorted(set(az) - set(local)))
PY
```
## 故障排除
### 错误 `RBAC: access denied`
如果出现在端点返回中:
- 验证 Container App 中的 `LITELLM_API_*` 变量
- 从运行时测试对 LiteLLM 的访问
- 检查 Container Apps 之间的 ingress/IP allowlist 规则
### 可观测性错误(Langfuse)
POC 已在 `observability.py` 中包含针对 `Langfuse.__init__` 签名的兼容性补丁。
## 后续步骤(路线图)
1. **异步调用扫描器**
- 将顺序执行迁移为并行/异步执行。
- 定义结果聚合策略(例如:只要有扫描器标记风险即拦截)。
- 保持每次请求的全局超时设置。
2. **将 guardrails 扩展至输入和输出**
- 保留输入验证(调用前)。
- 增加输出验证(调用后)及专用端点/流程。
- 按类型对策略进行版本控制(`input_policy`, `output_policy`)。
3. **通过 Session ID 增强可观测性**
- 端到端传递 `session_id`(request -> trace -> scanners)。
- 规范化缺失时 `session_id` 的生成方式。
- 便于关联同一用户/会话的多次调用。
4. **从 Azure 捕获用户以填充 `user_id`**
- 通过 Azure 环境的 headers/token 获取调用方的身份/认证信息。
- 在 Langfuse 中填充真实的 `user_id`,而非静态值。
- 在身份不可用时实现安全降级。
## 建议的下一步
- 使用 `asyncio.gather` 实现异步扫描器 POC。
- 为输出验证引入独立的契约。
- 定义身份标准(`session_id`, `user_id`)和遥测规范。
标签:AI 防火墙, API 安全, API密钥检测, API集成, AV绕过, Azure Container Apps, CISA项目, DNS 反向解析, Docker, Fail-Secure, FastAPI, GraphQL安全矩阵, Guardrails, Langfuse, LiteLLM, LLM 安全, PII 脱敏, Python, 人工智能安全, 内容审核, 可观测性, 合规性, 安全扫描器, 安全防御评估, 提示词注入防护, 敏感数据泄露, 数据防泄漏 (DLP), 无后门, 生产环境安全, 请求拦截, 越狱防护, 输入验证, 逆向工具