单体应用是最早出现的应用形态,在很长一段时间内都很好地服务于软件开发人员,如今在某些用例中仍然适用。但是,随着应用的发展,单体应用的开发、保护和维护难度加大。微服务作为一种替代方案应运而生 — 它将单体应用分解成多个小型自主服务,每个服务执行单项业务功能,并通过网络进行通信,共同提供应用的全部功能。最初,Web 开发人员使用 SOAP 作为通信协议,并使用 XML 对数据进行编码,但许多人发现这种组合方式费时费力。这促使人们转向基于 REST 的架构,并广泛采用 HTTP 和 JSON 分别作为协议和数据序列化方法。
但是,技术领域对于进步的追求是无止尽的,开发人员始终没有停止寻找更好的方法来设计应用,以克服 SOAP 和 REST 基于文本的架构所固有的限制问题。其中一种解决方案是 gRPC,它由 Google 开发,用于连接其大量独立的自主服务。gRPC 使用协议缓冲区(protobufs)作为结构化数据序列化的平台和语言中立机制,并使用 HTTP/2 作为通信协议。
gRPC 的优势
与其他 API 框架相比,gRPC 具有低延迟吞吐量、支持多种语言、数据形式紧凑和实时流传输等优势,因此特别适合微服务间通信和低功耗、低带宽网络通信。近年来,gRPC 越来越受欢迎,因为它支持更轻松、更快速、更高效地构建新服务,并具有更出色的可靠性和可扩展性,以及面向客户端和服务器的语言独立性。
最能体现 gPRC 优势的一个典型用例就是开放银行,它使用开源技术来构建和提供 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 流水线的一部分会经常更新,因此更新安全策略不会造成进程中断或增加进程开销,而且您的应用始终会受到最新策略的保护。
除了保护基于 gRPC 的微服务之间的东西向流量外,NGINX App Protect 还会保护公开资产之间的南北向流量。
虽然 gRPC 改进了 service 到 service 通信的速度、效率和规模,但保护 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 天免费试用版,或与我们联系以讨论您的用例。