博客 | NGINX

使用 NGINX App Protect 保护 gRPC API

NGINX-F5-horiz-black-type-RGB 的一部分
Yaniv Sazman 缩略图
亚尼夫·萨兹曼
2021 年 2 月 10 日发布

一开始是一块巨石。 它长期以来为软件开发人员提供了良好的服务,并且在某些用例中仍然如此。 但随着应用的增长,整体式应用程序变得难以开发、保护和维护。 微服务作为一种替代方案出现了——将整体式应用程序分解为小型且自主的服务,这些服务执行单一业务功能并通过网络通信以提供应用的全部功能。 最初,Web 开发人员使用SOAP作为通信协议,并使用XML来编码数据,但许多人发现这种组合既麻烦又缓慢。 这启发了向基于REST的架构的转变,以及广泛采用HTTPJSON作为协议和数据序列化方法。

但正如技术发展中经常出现的情况一样,开发人员继续寻找更好的方法来设计应用,例如克服 SOAP 和 REST 基于文本的方向所固有的局限性。 其中一个系统就是gRPC ,它是 Google 开发的,用于连接其大量独立、自主的服务。gRPC 使用协议缓冲区(protobufs) 作为平台和语言中立的机制来序列化结构化数据,并使用 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 团队能够以代码形式管理应用安全性并利用本机工具。

例如,NGINX App Protect 可确保金融机构及其服务在为服务间通信实施 gRPC 时符合开放银行标准。 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 对于您的现代应用架构至关重要。

有关使用 NGINX App Protect 的 gRPC 的更多信息,请查看我们的灯板视频:

免费试用 NGINX App Protect

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

要将 NGINX Plus 和 NGINX App Protect 与你的 gRPC API 结合使用,请开始30 天免费试用联系我们讨论你的用例


“这篇博文可能引用了不再可用和/或不再支持的产品。 有关 F5 NGINX 产品和解决方案的最新信息,请探索我们的NGINX 产品系列。 NGINX 现在是 F5 的一部分。 所有之前的 NGINX.com 链接都将重定向至 F5.com 上的类似 NGINX 内容。”