使用NGINX App Protect保护gRPC API

NGINX | 2021年2月10日

最初,应用采用单体架构。它长期以来一直很好地满足软件开发人员的需求,至今仍适用于某些用例。但随着应用不断扩展,单体架构的开发、安全防护和维护变得越来越困难。微服务应运而生,成为另一种选择。单体应用被拆分为多个小型自治服务,每个服务执行单一业务功能,并通过网络通信,共同提供应用的完整功能。最初,Web开发人员使用SOAP作为通信协议,并使用XML对数据进行编码,但许多人发现这种组合既繁琐又缓慢。因此,业界开始转向基于REST的架构,并广泛采用HTTP和JSON分别作为通信协议和数据序列化方法。

但技术发展往往如此,开发人员会继续探索更好的应用设计方式,例如克服SOAP和REST以文本为基础所带来的固有限制。其中一种系统是gRPC,由Google开发,用于连接其数量庞大且相互独立的自治服务。gRPC使用协议缓冲区(protobuf)作为一种不受平台和语言限制的结构化数据序列化机制,并使用HTTP/2作为通信协议。

gRPC 的优势

与其他API框架相比,gRPC具有低延迟吞吐、支持多种语言、数据表示紧凑和实时流式传输等优势,因此尤其适合微服务之间的通信,以及通过低功耗、低带宽网络进行通信。近年来,gRPC的普及程度显著提升,因为它有助于更快速、更高效地构建新服务,同时提高可靠性和可扩展性,并使客户端和服务器均不受编程语言限制。

gRPC优势的一个典型示例是开放银行。开放银行使用开源技术构建和交付API,使第三方开发者能够为银行或其他金融机构的客户提供更多服务。开放银行的根本理念是更有效、更高效地提供金融信息。gRPC有助于实现这一目标,因为协议缓冲区采用紧凑格式,而HTTP/2支持多路复用,因此传输给定有效负载的速度远快于REST API:接收数据时约快7倍,发送数据时约快10倍。因此,金融机构正采用gRPC进行服务间通信,以更快地提供服务,并提升服务成效、可靠性和扩展能力。

gRPC的速度优势在客户开户流程这一具体用例中尤为突出,而该流程对开放银行业务的成功至关重要。使用其他API框架时,无论对金融机构还是客户而言,创建新账户都可能既繁琐又耗时。借助gRPC的高速数据传输,客户只需几分钟即可创建新账户。这不仅能显著提升客户满意度,还能大幅降低金融机构的成本。

保护gRPC

gRPC标准和协议缓冲区格式以开源库的形式实现。与其他数据表示形式相比,协议缓冲区被认为更能抵御网络攻击,因为该库的解析器会拒绝格式错误的请求,并更严格地检查库的行为。

但针对gRPC的攻击仍存在一些令人担忧的可乘之机。例如,解析器:

  • 允许在不使用关键字stream
  • 允许某个字段在消息中多次出现,即使该字段未声明为可重复字段
  • 不检查映射字段中的重复键;仅考虑该键最后一次出现的值
  • 不检查oneOf复合类型,并允许存在多个字段

攻击者可以利用gRPC协议中的这些缺陷入侵应用。协议缓冲区还允许创建消息定义中未定义的字段。这可确保设计具有可扩展性,使其能够与消息未来的扩展版本兼容,但也可能使应用容易受到走私攻击。在此类攻击中,攻击者会在请求中加入应用代码未明确允许的字段。

NGINX App Protect保护gRPC API

NGINX App Protect旨在更靠近服务应用的位置保护基于gRPC的现代应用。这使AppDev、DevOps和DevSecOps团队能够以代码方式管理应用安全,并利用原生工具。

例如,金融机构及其服务使用gRPC进行服务间通信时,NGINX App Protect可确保其符合开放银行标准。NGINX App Protect引擎会对线上请求中的gRPC消息进行深度检查,解析协议缓冲区消息,并检测消息标头和有效负载中的恶意数据,包括所有嵌套和复杂数据结构中的恶意数据。系统会检查每个请求,并对每个API调用参数应用攻击检测机制。

使用gRPC API时,可通过gRPC接口在类型库文件(IDL文件)和协议缓冲区的proto定义文件中设置安全策略。加载更新后的文件后,NGINX App Protect会立即开始应用新的安全策略,无需更改其配置。gRPC proto文件通常会作为CI/CD流水线的一部分频繁更新,因此,更新安全策略不会中断现有流程或增加额外开销,并可确保应用始终受到最新策略的保护。

NGINX App Protect不仅可保护基于gRPC的微服务之间的东西向流量,还可保护公开资产之间的南北向流量。

gRPC可提升服务间通信的速度、效率和扩展能力,但保护API数据(URL、标头和有效负载)以及公开gRPC API的应用服务至关重要。因此,NGINX App Protect是现代应用架构中的关键组成部分。

要进一步了解如何将gRPC与NGINX App Protect结合使用,请观看我们的白板视频:

免费试用 NGINX App Protect

有关NGINX App Protect对gRPC支持的更多信息,请参阅文档。

要使用您的gRPC API试用NGINX Plus和NGINX App Protect,请开始30天免费试用,或联系我们,讨论您的用例。


分享

关于作者

相关博客文章

NGINX Plus R26 正式发布
NGINX | 2022/02/15

NGINX Plus R26 正式发布

NGINX Plus R26通过缓存JSON Web密钥集加快JWT验证,并强化TLS握手,从而提升安全性。NGINX JavaScript的新功能包括增强对异步函数的支持,以及实现WebCrypto API。

使用NGINX App Protect DoS保护gRPC应用,抵御严重的DoS攻击
NGINX | 2022/02/10

使用NGINX App Protect DoS保护gRPC应用,抵御严重的DoS攻击

gRPC具备开发人员设计和部署现代应用所需的速度与灵活性,但其开放性也使其极易受到第7层DoS攻击。NGINX App Protect DoS可保护gRPC应用免受此类破坏性攻击。

Ingress Controller 选型指南(第 2 部分):风险与面向未来的规划
NGINX | 2021/09/13

Ingress Controller 选型指南(第 2 部分):风险与面向未来的规划

了解选择错误的Ingress控制器可能带来的风险,以及如何从关键方面着手,让您的选择更好地适应未来需求。

NGINX Plus R19 正式发布
NGINX | 2019/09/03

NGINX Plus R19 正式发布

NGINX Plus R19扩展了监控功能,不仅提供更多指标,还新增了指标分析方式;增加试运行模式,用于测试限速效果;增强键值存储,以支持IP地址范围;并使限速更加动态。

NGINX现已正式加入F5
NGINX | 2019/05/09

NGINX现已正式加入F5

NGINX现已正式成为F5的一部分。Gus Robertson现任F5 NGINX业务部门负责人。他阐述了两家公司在人才、文化和愿景方面融合的价值,以及双方将如何携手增强NGINX的开源产品和商业产品。

使用NGINX和NGINX Plus实现高性能缓存
NGINX | 2016/08/24

使用NGINX和NGINX Plus实现高性能缓存

我将介绍NGINX在内容缓存和性能方面的工作原理,并分享一些控制NGINX内容缓存方式的技巧。