[ PROMPT_NODE_23958 ]
API Shield 配置说明
[ SKILL_DOCUMENTATION ]
# 配置
## 模式验证 2.0 设置
> ⚠️ **经典模式验证已弃用。** 请使用模式验证 2.0。
**上传模式 (仪表板):**
Security > API Shield > Schema Validation > Add validation
- 上传 .yml/.yaml/.json (OpenAPI v3.0)
- 端点自动添加到端点管理
- 操作: Log (记录) | Block (阻止) | None (无)
- 正文检查: JSON 有效载荷
**更改验证操作:**
Security > API Shield > Settings > Schema Validation
针对单个端点: Filter → 省略号 → Change action
默认操作: 设置全局缓解操作
**从经典版迁移:**
1. 导出现有模式 (如果可用)
2. 删除所有经典模式验证规则
3. 等待 5 分钟以清除缓存
4. 通过模式验证 2.0 界面重新上传
5. 在 Security > Events 中验证
**Fallthrough (兜底) 规则** (捕获所有未知端点):
Security > API Shield > Settings > Fallthrough > Use Template
- 选择主机名
- 创建使用 cf.api_gateway.fallthrough_triggered 的规则
- 操作: Log (发现) 或 Block (严格)
**正文检查:** 支持 `application/json`, `*/*`, `application/*`。禁用源站 MIME 嗅探以防止绕过。
## JWT 验证
**设置令牌配置:**
Security > API Shield > Settings > JWT Settings > Add configuration
- 名称: "Auth0 JWT Config"
- 位置: Header/Cookie + 名称 (例如 "Authorization")
- JWKS: 粘贴来自 IdP 的公钥
**创建验证规则:**
Security > API Shield > API Rules > Add rule
- 主机名: api.example.com
- 取消选择要忽略的端点
- 令牌配置: 选择配置
- 强制存在: 忽略 或 标记为不合规
- 操作: Log/Block/Challenge
**按 JWT 声明进行速率限制:**
wirefilter
lookup_json_string(http.request.jwt.claims["{config_id}"][0], "sub")
**特殊情况:**
- 两个 JWT,不同的 IdP: 创建 2 个配置,选择两者,“验证所有”
- IdP 迁移: 2 个配置 + 2 个规则,根据状态调整操作
- Bearer 前缀: API Shield 处理带或不带前缀的情况
- 嵌套声明: 使用点表示法 `user.email`
## 双向 TLS (mTLS)
**设置:**
SSL/TLS > Client Certificates > Create Certificate
- 生成 CF 管理的 CA (所有计划)
- 上传自定义 CA (企业版,最多 5 个)
**配置 mTLS 规则:**
Security > API Shield > mTLS
- 选择主机名
- 选择证书
- 操作: Block/Log/Challenge
**测试:**
bash
openssl req -x509 -newkey rsa:4096 -keyout client-key.pem -out client-cert.pem -days 365
curl https://api.example.com/endpoint --cert client-cert.pem --key client-key.pem