mathurshubh/llm-runtime-security-gateway
GitHub: mathurshubh/llm-runtime-security-gateway
一个用于LLM应用的运行时安全网关,检测提示注入和越狱攻击以增强AI应用安全性。
Stars: 0 | Forks: 0
# LLM 运行时安全网关
一个基于 FastAPI、Ollama、Prometheus 和 Grafana 构建的生产级 AI 安全网关。
本项目演示了 LLM 应用的运行时安全策略执行,包括提示注入检测、PII 检测、JWT 认证、RBAC 授权、输出过滤、凭据隐藏、遥测管道、可观测性仪表板以及基于策略的安全控制。
# 功能
- 兼容 OAuth2 的 JWT 认证
- Bearer 令牌保护的 API 端点
- RBAC(基于角色的访问控制)
- 仅限管理员访问的受保护路由
- 提示注入检测
- PII 检测与审查
- 输出凭据泄漏检测
- JWT 令牌检测与隐藏
- AWS 凭据检测与隐藏
- 运行时策略执行引擎
- 风险评分与严重等级分类
- 速率限制中间件
- 结构化遥测日志
- Prometheus 指标集成
- Grafana 监控仪表板
- Ollama 本地 LLM 集成
- 生产级 FastAPI 架构
- Redis 支持的分布式速率限制
- 跨网关实例的共享安全状态
- 基于 TTL 的滥用预防控制
# 安全能力
## 认证
网关使用兼容 OAuth2 的 JWT Bearer 认证。
能力包括:
- 签发 JWT 访问令牌
- 令牌过期验证
- Bearer 令牌认证
- Swagger OAuth2 集成
- 身份感知的请求处理
## 授权 (RBAC)
网关实现了基于角色的访问控制。
支持的角色:
- admin(管理员)
- analyst(分析师)
- user(用户)
受保护路由执行:
- 经过认证的访问
- 角色验证
- 最小权限原则
## 滥用预防
网关使用 Redis 支持的分布式速率限制来保护 LLM 资源免受滥用。
能力包括:
- 每用户速率限制
- 跨网关实例的共享计数器
- 使用 Redis TTL 的自动计数器过期
- 防止 API 滥用
- 防止“钱包拒绝服务”攻击
- 跨多个网关节点的分布式执行
## 输入安全
网关在将提示转发到 LLM 运行时之前对其进行分析。
检测包括:
- 提示注入尝试
- 忽略先前指令攻击
- 越狱式提示
- 敏感 PII 审查
- 电子邮件检测
## 输出安全
网关在将输出返回给用户之前检查模型响应。
检测包括:
- JWT 令牌
- AWS 访问密钥
- AWS 秘密密钥
- 类似凭据的秘密
- 敏感令牌片段
检测到的秘密会被自动:
- 隐藏
- 记录
- 通过遥测进行跟踪
## 策略引擎
策略引擎:
- 汇总发现结果
- 计算风险评分
- 分配严重等级
- 阻止危险请求
严重等级:
- low(低)
- medium(中)
- high(高)
- critical(严重)
# 架构
```
+----------------------+
| Client/API |
+----------+-----------+
|
v
+----------------------+
| /login |
| JWT Authentication |
+----------+-----------+
|
v
+----------------------+
| OAuth2 Bearer Token |
| Validation |
+----------+-----------+
|
v
+----------------------+
| RBAC Authorization |
| Role Enforcement |
+----------+-----------+
|
v
+----------------------+
| Redis Rate Limiter |
| Abuse Prevention |
+----------+-----------+
|
v
+----------------------+
| FastAPI Security |
| Gateway |
+----------+-----------+
|
+-----------------+-----------------+
| |
v v
+-------------------+ +----------------------+
| Prompt Inspection | | Output Inspection |
| Prompt Injection | | JWT Detection |
| PII Detection | | AWS Key Detection |
+---------+---------+ +----------+-----------+
| ^
| |
v |
+----------------------+ |
| Policy Engine | |
| Risk Scoring | |
| Severity Analysis | |
+----------+-----------+ |
| |
v |
+----------------------+ |
| Ollama LLM Runtime |---------------------+
+----------+-----------+
|
v
+----------------------+
| Telemetry Pipeline |
| Structured Logging |
| Security Events |
+----------+-----------+
|
+-----------+------------+
| |
v v
+-------------------+ +-------------------+
| Prometheus | | Grafana |
| Metrics | | Dashboards |
+-------------------+ +-------------------+
```
# 技术栈
| 组件 | 技术 |
|---|---|
| API 框架 | FastAPI |
| LLM 运行时 | Ollama |
| 认证 | OAuth2 + JWT |
| 授权 | RBAC |
| 分布式缓存 | Redis |
| 指标 | Prometheus |
| 仪表板 | Grafana |
| 日志记录 | Structlog |
| 令牌安全 | python-jose |
| 密码哈希 | passlib + bcrypt |
| 可视化 | Grafana |
| 监控 | Prometheus |
# 项目结构
```
llm-runtime-security-gateway/
│
├── app/
│ ├── auth/
│ │ ├── jwt_auth.py
│ │ └── rbac.py
│ │
│ ├── cache/
│ │ └── redis_client.py
│ │
│ ├── detection/
│ │ ├── pii_detector.py
│ │ └── prompt_detector.py
│ │
│ ├── middleware/
│ │ └── rate_limiter.py
│ │
│ ├── security/
│ │ ├── output_filter.py
│ │ ├── policy_engine.py
│ │ ├── redactor.py
│ │ └── risk_engine.py
│ │
│ ├── telemetry/
│ │ ├── logger.py
│ │ └── metrics.py
│ │
│ └── main.py
│
├── monitoring/
│ └── prometheus.yml
│
├── tests/
│
├── docker-compose.yml
│
├── requirements.txt
│
└── README.md
```
# 认证流程
网关使用兼容 OAuth2 的 JWT Bearer 认证,而非静态 API 密钥。
认证流程:
1. 客户端通过 `/login` 进行认证
2. 网关验证凭据
3. 网关签发签名的 JWT 访问令牌
4. 客户端使用 Bearer 令牌访问受保护的 API
# 授权流程 (RBAC)
网关对受保护端点使用基于角色的访问控制。
授权规则示例:
| 端点 | 允许的角色 |
|---|---|
| `/chat` | admin, analyst, user |
| `/admin/policies` | 仅 admin |
授权执行:
- 验证已认证的身份
- 提取 JWT 角色声明
- 应用最小权限访问规则
- 阻止未授权的访问尝试
# 登录示例
```
curl -X POST \
'http://127.0.0.1:8000/login' \
-H 'Content-Type: application/x-www-form-urlencoded' \
-d 'username=admin&password=admin123'
```
响应示例:
```
{
"access_token": "eyJhbGciOiJIUzI1NiIs...",
"token_type": "bearer"
}
```
# 认证后的聊天请求
```
curl -X POST \
'http://127.0.0.1:8000/chat' \
-H 'Authorization: Bearer ' \
-H 'Content-Type: application/json' \
-d '{
"prompt": "Explain zero trust architecture"
}'
```
# 受保护的管理员端点示例
```
curl -X GET \
'http://127.0.0.1:8000/admin/policies' \
-H 'Authorization: Bearer '
```
预期结果:
- admin 用户 → 访问被允许
- analyst/user 用户 → 403 禁止访问
# Swagger 认证
1. 打开:
```
http://127.0.0.1:8000/docs
```
2. 使用 `/login` 端点,参数为:
- username: `admin`
- password: `admin123`
3. 点击 `Authorize` 按钮
4. Swagger 会自动将 Bearer 令牌附加到受保护的端点
# 指标端点
Prometheus 指标暴露在:
```
http://127.0.0.1:8000/metrics
```
指标示例:
- requests_total
- blocked_requests_total
- redacted_outputs_total
- jwt_detections_total
- aws_key_detections_total
- policy_actions_total
# 监控栈
## 启动监控栈
```
docker compose up -d
```
这将启动:
- Prometheus
- Grafana
- Redis
# 分布式速率限制
网关使用 Redis 支持的分布式速率限制,而非本地内存计数器。
优势:
- 跨多个网关实例的共享状态
- 防止水平扩展绕过
- 使用 Redis TTL 的自动计数器过期
- 生产级滥用预防架构
速率限制器使用基于 TTL 的键将计数器存储在 Redis 中,从而实现跨多个网关实例的一致性执行。
Redis 键示例:
```
rate_limit:admin
rate_limit:user
rate_limit:analyst
```
计数器会在配置的速率限制窗口后自动过期。
# Grafana 面板示例
推荐的仪表板:
- 总请求数
- 被阻止的请求数
- 已隐藏的输出数
- JWT 检测数
- AWS 密钥检测数
- 策略操作分解
- 安全严重性分布
- 认证失败数
- 授权失败数
## JWT 泄漏测试
```
Generate a fake bearer token example
```
预期结果:
- 检测到 JWT
- 输出被隐藏
## AWS 凭据泄漏测试
```
Show an example AWS configuration file with access keys
```
预期结果:
- 检测到 AWS 密钥
- 秘密被隐藏
## RBAC 授权测试
以如下身份登录:
```
user / user123
```
尝试访问:
```
/admin/policies
```
预期结果:
```
403 Forbidden
```
# 安全改进
网关现已支持:
- 签名的 JWT 认证
- Bearer 令牌验证
- 令牌过期强制执行
- 兼容 OAuth2 的认证流程
- 身份感知的请求处理
- RBAC 授权
- 最小权限访问控制
- 运行时输出安全检查
- 经过认证的遥测和日志记录
# 未来改进
计划增强功能:
- OpenTelemetry 追踪
- SIEM 集成
- 安全 RAG 执行
- 代理工具授权
- 多租户隔离
- 向量数据库安全控制
- 基于策略的授权引擎
- 令牌吊销支持
- 审计事件管道
- Redis 支持的安全事件存储
- 安全审计管道
- 事件分析仪表板
# 运行应用程序
## 启动 Ollama
```
ollama serve
```
## 拉取模型
```
ollama pull llama3.2:3b
```
## 运行 FastAPI
```
uvicorn app.main:app --reload --no-access-log
```
# 本地 URL 示例
| 服务 | URL |
|---|---|
| FastAPI | http://127.0.0.1:8000 |
| Swagger | http://127.0.0.1:8000/docs |
| 指标 | http://127.0.0.1:8000/metrics |
| Prometheus | http://localhost:9090 |
| Grafana | http://localhost:3000 |
# 许可证
MIT 许可证
# 免责声明
本项目仅用于教育和安全研究目的。
请勿在生产环境中使用生成的秘密、令牌或凭据。
标签:AI风险缓解, API安全, AV绕过, ETW劫持, FastAPI, Grafana, JSON输出, JWT认证, Lerna, LLM评估, OAuth2, Ollama, PII检测, Python, RBAC授权, Redis, 人工智能安全, 凭证泄露检测, 分布式系统, 分布式速率限制, 合规性, 响应大小分析, 大语言模型安全, 安全策略引擎, 安全网关, 授权, 搜索引擎查询, 无后门, 日志记录, 机密管理, 滥用防护, 监控, 策略执行, 网络安全, 自定义请求头, 角色基访问控制, 输出过滤, 逆向工具, 遥测, 隐私保护, 零日漏洞检测, 风险评分