首页 > 解决方案 > 如何在 Kong Gateway 后面保护公共和内部流量的 API

问题描述

我们目前有多个不在网关后面的 API。公开的 API 使用 OpenID Connect 进行身份验证和声明授权。一些 API 仅供内部使用,并在防火墙后进行网络保护。

我们计划在我们的 API 前设置 Kong Gateway Enterprise。我们应该能够在网关处集中来自公共客户端的令牌验证。我们也可以集中一些基本的授权(例如范围)。一些逻辑可能仍需要在上游 API 中发生。因此,这些 API 仍然需要知道调用者(客户端和用户)的上下文。

理想情况下,我们希望能够拥有可以公开公开并在内部调用的 API,以避免重复逻辑。我想了解一些在 Kong 上实现这一点的安全方法。我仍然不清楚如何在网关后面设置系统。

我的一些问题是:

其他一些可能有用的注释:

标签: web-servicesmicroservicesapi-gatewaykongapi-security

解决方案


这里有很多东西要解压,答案是:这取决于

通常,您应该在外部公开最低限度的 API,因此 DMZ 中的单独网关仅具有外部客户端所需的 API 端点。您通常会进行更多内部更改,因此您不想意外暴露敏感端点。

在涉及 API 时不要太担心重复,拥有多个 API 网关是很常见的,甚至是用于外部通信的出口网关。有像(BFF - 前端模式的后端)这样的模式,其中每个客户端都有自己的用于编排、安全、路由、日志记录和审计的网关。彼此隔离的客户端越多,进行 API 更改的风险就越小。关于传播 Auth 上下文,它实际上归结为信任,以及您的网络和内部参与者的安全性。如果您使用的是自定义标题,那么您必须考虑“混淆代理问题”。使用签名的 JWT 可以解决这个问题,但如果令牌泄露,它可能会被恶意用于攻击链中的任何服务。您可以使用 RFC8693 令牌交换来缓解这种情况,甚至可以将其与 MTLS 结合使用,但这对您的应用程序来说可能是多余的。如果 JWT 由外部客户端处理,则风险更大。在这种情况下,理想情况下它应该是不透明的,并且只被面向外部的网关接受。然后,该 GW 可以将其交换为用于所有内部通信的新令牌。


推荐阅读