本文目录导读:

- 认证与授权(核心的第一道防线)
- 流量控制与防攻击(保护后端不被冲垮)
- 数据安全(保护传输和内容)
- 网络隔离与安全组(底层防御)
- 日志、监控与审计(事后追踪)
- 具体实施步骤示例(以通用配置为例)
- 安全策略的最佳实践清单
API 网关是系统对外暴露的唯一入口,所有流量都需要经过它,因此安全策略是网关配置中的重中之重,一个完善的 API 网关安全策略,通常从认证与授权、流量控制、数据安全、网络隔离和日志审计五个维度进行设置。
以下是具体的设置指南和最佳实践:
认证与授权(核心的第一道防线)
这是验证“你是谁”以及“你能做什么”的过程。
-
认证(Authentication):
- OAuth 2.0 / OpenID Connect: 适用于第三方应用或微服务间调用的标准协议。
- 设置: 配置网关验证访问令牌的有效性(如 JWT 的签名、过期时间),并将令牌转换为用户信息传递给后端。
- API Key: 适用于内部服务或简单场景,给每个调用方分配唯一的 Key。
- 设置: 要求请求头携带
X-API-Key,网关验证 Key 是否存在、是否过期、是否属于该调用方。
- 设置: 要求请求头携带
- JWT(JSON Web Token): 适合无状态、分布式的场景。
- 设置: 网关应验证 JWT 的签名算法(RS256 优于 HS256)、过期时间(
exp)、颁发者(iss)和受众(aud)。
- 设置: 网关应验证 JWT 的签名算法(RS256 优于 HS256)、过期时间(
- 双因素认证: 对于敏感管理 API(如管理后台),要求额外验证。
- OAuth 2.0 / OpenID Connect: 适用于第三方应用或微服务间调用的标准协议。
-
授权(Authorization):
- RBAC(基于角色的访问控制): 定义角色(如管理员、普通用户、访客),在网关层检查用户角色是否有权访问特定路由。
- ABAC(基于属性的访问控制): 更灵活,根据请求属性(如时间、IP、用户部门)决定是否放行。
- 通过网关实现: 在网关的路由规则中,为每个接口绑定一个权限字符串(如
admin:user:read),网关在认证后,从 JWT 中提取用户权限列表,与接口要求的权限进行比对。
流量控制与防攻击(保护后端不被冲垮)
确保网关能够抵御恶意流量和突发高峰。
- 限流(Rate Limiting):
- 策略: 按 API Key、IP、用户 ID 或全局进行限制。
- 算法: 令牌桶(允许突发)、漏桶(平滑流量)、滑动窗口(精确控制)。
- 设置:
- 触发动作: 超过限制后,返回
429 Too Many Requests。 - 不同接口不同配置: 登录接口(1次/秒)比查询接口(100次/秒)更严格。
- 触发动作: 超过限制后,返回
- IP 黑白名单:
- 白名单: 仅允许特定 IP 段访问管理 API 或内网接口。
- 黑名单: 封禁已知的恶意 IP(可联动 WAF 或威胁情报)。
- DDoS 防护:
- 开启网关自带的 SYN Flood、UDP Flood 防护。
- 与云服务商的 Anti-DDoS 服务联动(部署在网关之前)。
- 请求校验:
- 参数校验: 拒绝超长参数、非法字符(如 SQL 注入尝试)。
- HTTP 方法限制: 明确接口只允许 POST/GET,拒绝对业务接口的 PUT/DELETE/OPTIONS 请求。
数据安全(保护传输和内容)
防止数据在传输过程中被窃取或篡改。
- 强制 HTTPS:
- 设置: 在网关监听端口上只绑定 443 端口(TLS),并将所有 80 端口的 HTTP 请求重定向到 HTTPS。
- 证书管理: 应用最新 TLS 1.2/1.3 协议,禁用 SSLv2/v3 和弱加密套件。
- 敏感数据脱敏与过滤:
- 响应体处理: 网关配置规则,自动替换响应中的敏感字段(如身份证号、手机号等)为 。
- 请求体过滤: 拒绝包含敏感信息(如信用卡号明文)的请求,建议在前端加密。
- CORS(跨域资源共享):
- 严格设置: 不要使用通配符 ,明确指定允许的 Origin(如
https://yourdomain.com)。 - 限制允许的 Methods 和 Headers。
- 严格设置: 不要使用通配符 ,明确指定允许的 Origin(如
网络隔离与安全组(底层防御)
这是云原生环境下容易被忽略但极其重要的一环。
- 网络层隔离:
- 内部隔离: 将 API 网关放在公有子网(Public Subnet),后端服务放在私有子网(Private Subnet)。
- 安全组规则: 后端服务器的安全组只允许来自网关安全组的流量,拒绝任何来自互联网的直接访问。
日志、监控与审计(事后追踪)
即使有防护,也需要假设会失守。
- 全量日志记录:
- 记录字段: 请求时间、来源 IP、API Key/用户ID、请求路径、请求参数、返回状态码、响应时长。
- 注意: 不要记录明文密码、Token 或敏感数据到日志中,建议对日志进行脱敏处理。
- 实时告警:
- 异常指标: 5xx 错误率突增、限流触发次数过多、特定 API 访问频率异常、未授权访问(401/403)比例激增。
- 通知: 通过 Webhook、邮箱、短信通知安全团队。
- 安全审计:
- 定期分析日志,识别异常模式(如爬虫行为、密码爆破尝试)。
- 保留日志至少 180 天以满足合规要求。
具体实施步骤示例(以通用配置为例)
假设你使用的网关是 Kong、APISIX、Nginx Plus 或云服务商如 AWS API Gateway:
- 路由层面(最优先): 为
/api/v1/admin/*配置严格的 IP 白名单 + OAuth 认证 + 管理员角色授权。 - 流量层面:
- 全局默认限流:每用户 100 次/分钟。
- 登录接口
/api/auth/login:每 IP 5 次/分钟(防止暴力破解)。
- 传输层面: 强制 HTTPS 并设置 HSTS Header(
Strict-Transport-Security: max-age=31536000; includeSubDomains)。 - 内容层面: 配置请求大小限制(如
client_max_body_size 10m),防止大文件攻击。 - 故障隔离: 开启熔断器(Circuit Breaker),如果后端连续失败 5 次,网关在 30 秒内直接返回 503,不再转发请求,保护后端服务。
安全策略的最佳实践清单
| 安全维度 | 核心设置 | 目标 |
|---|---|---|
| 身份认证 | OAuth 2.0 / JWT / API Key | 验证调用方身份 |
| 权限控制 | RBAC / ABAC | 控制访问范围 |
| 流量控制 | 限流 / 熔断 / IP 黑白名单 | 防滥用 |
| 数据安全 | HTTPS / 脱敏 / CORS | 防泄露 |
| 网络隔离 | 安全组 / 私有子网 | 防横向移动 |
| 审计 | 全量日志 / 实时告警 | 可追溯 |
建议: 安全策略不是一次性配置,而是持续迭代的过程,建议先启用最严格的认证和限流,再根据实际业务反馈逐步放宽,建议定期使用漏洞扫描工具(如 Nessus、OpenVAS)对网关暴露点进行安全测试。