当前位置: 首页 > news >正文

云原生安全实战:API网关Envoy的鉴权与限流详解

 

🔥「炎码工坊」技术弹药已装填!
点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】

 

一、基础概念

1. API网关

作为微服务架构的统一入口,负责路由转发、安全控制、流量管理等核心功能。 

2. Envoy

由Lyft开源的高性能云原生代理,支持动态配置、可扩展性,常用于服务网格(如Istio)或边缘网关场景。 

3. 鉴权(Authentication & Authorization)

  • 认证:验证请求身份(如Token、API Key)。 
  •  授权:确认身份是否有权限访问目标资源(如RBAC角色控制)。

4. 限流(Rate Limiting)

通过限制单位时间内的请求量,防止系统过载或恶意攻击(如DDoS)。 


二、技术实现

1. Envoy鉴权实现

Envoy通过External Authorization插件调用外部服务进行鉴权: 

http_filters:  - name: envoy.ext_authz  typed_config:  "@type": type.googleapis.com/envoy.extensions.filters.http.ext_authz.v3.ExtAuthz  grpc_service:  envoy_grpc:  cluster_name: extauth_service  # 外部鉴权服务地址  

流程: 

  1.  客户端请求到达Envoy → 
  2. Envoy将请求头、路径等信息发送给鉴权服务 → 
  3. 鉴权服务返回允许/拒绝结果 → 
  4. Envoy根据结果决定是否转发请求。

2. Envoy限流实现

通过Rate Limit插件对接限流服务(如Redis+自定义逻辑): 

http_filters:  - name: envoy.filters.http.ratelimit  typed_config:  "@type": type.googleapis.com/envoy.extensions.filters.http.ratelimit.v3.RateLimit  domain: "my_domain"  # 与限流服务配置的domain一致  rate_limit_service:  grpc_service:  envoy_grpc:  cluster_name: ratelimit_service  

流程: 

  1. 请求触发限流规则(如路径匹配) → 
  2. Envoy向限流服务发送请求 → 
  3. 限流服务检查配额(如令牌桶算法) → 
  4. 返回是否允许请求通过。

三、常见风险

1. 鉴权风险

  •  未鉴权访问:绕过鉴权直接访问内部接口(如修改请求路径参数)。 
  • 权限提升漏洞:通过篡改请求参数获取更高权限(如修改user_id获取他人数据)。

2. 限流风险

  • 突发流量冲击:限流策略未覆盖突发流量(如秒杀活动)。 
  • 缓存击穿:限流服务故障导致全量请求穿透到后端。

四、解决方案

1. 多层鉴权体系

  • 网关层:基础Token验证(如JWT)。 
  • 服务层:业务级权限校验(如数据库记录检查)。

2. 动态限流策略

  • 令牌桶算法:精确控制平均速率(适合固定配额)。 
  • 滑动窗口算法:适应流量波动(适合突发场景)。

3. 容错机制

  • 限流服务降级:失败时允许部分流量通过,避免系统雪崩。

五、工具示例

1. Envoy配置示例

# 路由限流规则  
route_config:  virtual_hosts:  - name: backend  domains: ["*"]  routes:  - match: { prefix: "/api" }  route:  cluster: backend_service  rate_limits:  - actions:  - request_headers:  header_name: ":path"  descriptor_key: "path"  

2. 限流服务(Redis+Lua)

-- 令牌桶限流Lua脚本  
local key = KEYS[1]  
local rate = tonumber(ARGV[1])  -- 令牌生成速率  
local capacity = tonumber(ARGV[2])  -- 桶容量  
local now = redis.call("TIME")[1]  
local fill_time = capacity / rate  
local ttl = math.floor(fill_time * 2)  local filled = redis.call("GET", key)  
if not filled then  filled = capacity  
end  local delta = math.min(0, filled - 1)  
redis.call("SETEX", key, ttl, filled - delta)  
return filled > 0 ? 1 : 0  

六、最佳实践

1. 部署架构建议

  • 分层架构:Envoy + 外部鉴权服务 + 限流服务 + 后端微服务。 
  • 性能优化:增大Envoy内存缓存(如mem_cache_size: 256m)。

2. 安全加固

  • 最小权限原则:按角色分配API访问权限。 
  • 日志审计:记录鉴权失败和限流事件用于分析。

3. 测试方法

  • 使用wrkab工具模拟高并发场景,验证限流效果。

可视化架构图


 

专有名词说明表

名称解释
Envoy云原生高性能代理,支持动态配置和可扩展性
gRPC高性能RPC框架,Envoy通过gRPC与外部服务通信
JWTJSON Web Token,用于无状态身份验证
令牌桶算法限流算法,通过令牌生成速率控制流量
滑动窗口算法动态限流算法,适应流量波动
Redis内存数据库,常用于限流计数存储
RBAC基于角色的访问控制,用于权限管理

通过本文的系统讲解,初学者可以快速掌握Envoy在API网关场景下的核心安全能力!

 

🚧 您已阅读完全文99%!缺少1%的关键操作:
加入「炎码燃料仓」🚀 获得:
√ 开源工具红黑榜
√ 项目落地避坑指南
√ 每周BUG修复进度+1%彩蛋
(温馨提示:本工坊不打灰工,只烧脑洞🔥) 

 

相关文章:

  • 详解快排的四种方式
  • 1.6 http模块nodejs 对比 go
  • CocosCreator 之 JavaScript/TypeScript和Java的相互交互
  • 篇章十 数据结构——排序
  • “冒个泡泡”,排个序呗~:C语言版冒泡排序全解
  • Linux命令cat /proc/net/snmp查看网络协议层面统计信息
  • 【春秋云镜】CVE-2023-2130漏洞复现exp
  • 如何把工业通信协议转换成http websocket
  • UFW防火墙安全指南
  • 《C++初阶之入门基础》【普通引用 + 常量引用 + 内联函数 + nullptr】
  • Hive 存储格式深度解析:从 TextFile 到 ORC,如何选对数据存储方案?
  • 在Zenodo下载文件 用到googlecolab googledrive
  • Excel 怎么让透视表以正常Excel表格形式显示
  • WebRTC(一):整体架构
  • 基于深度学习的图像分割技术:原理、应用与实践
  • ES6(ES2015)特性全解析
  • Shell 解释器​​ bash 和 dash 区别
  • laravel8+vue3.0+element-plus搭建方法
  • composer init
  • 香港虚拟主机安装WordPress
  • 计算机网络网站建设的实训总结/今天的新闻发布会
  • 青岛做网站建设价格低/seo是指什么
  • 网站有什么/百度推广开户费用
  • 建设银行网站无法转账/开鲁视频
  • 都匀网站制作/万能导航网
  • 淘宝网站c#设计怎么做/百度惠生活怎么优化排名