利用 API 网关和服务网格构建零信任
由 Mux 赞助的 DEV 全球展示挑战赛:展示你的项目!
打造一款用户喜爱的优秀应用需要做出许多不同的决策,从用户界面设计和配色方案到功能和特性集。编写有效的代码是一个创造性的过程,但这只是整个开发过程的一部分。您的应用还需要安全可靠——这不仅是为了用户,也是为了维护您业务的完整性。设计软件架构时,典型的安全措施包括:
- 安全且经过充分测试的身份验证和授权方案
- 通过防火墙和端口监控来控制网络流量的能力
- 服务和资源隔离,使得一台服务器无法访问另一台服务器。
- 通过 SSL/HTTPS 保护服务之间的连接
这些实践共同构成了一种名为“零信任”的理念。零信任架构的核心在于严格限制应用程序的访问权限,防止任何形式的访问。默认情况下,服务之间互不相通。随着时间的推移,并根据实际需要,服务之间会逐步获得通信权限。简而言之,服务仅在必要时才接受外部连接。由于应用程序基础设施的网络默认是“封闭”的,因此可以有效降低恶意访问和意外事件的风险。
在这篇文章中,我们将仔细研究Kong Gateway和Kuma 服务网格如何融入到这种设计中。
为什么你应该考虑零信任设计
零信任并不能保证你的基础设施绝对安全,但它确实能减少外部攻击者的攻击途径。无论你是大型企业还是小型初创公司,安全考量都是一样的:你都希望用户数据在上线的那一刻起就安全可靠。
零信任架构要求开发人员考虑服务之间的交互方式。例如,假设服务 A 负责获取数据,服务 B 负责请求数据。服务 A 需要开放一个特定的端点和端口,以便与服务 B(且仅与服务 B)通信。零信任规划可能会降低生产力,尤其是在添加新服务或不熟悉授予访问权限所需的 DevOps 流程时。
然而,无论采用这种方法看似多么麻烦,其优势远远大于规划所花费的时间。安全事件一旦发生就无法挽回,而且会导致用户信心下降,并给团队带来解决问题的压力。我们经常听到黑客入侵过时且缺乏管理的服务、攻击生产系统或配置错误的数据库,从而导致公共数据库被泄露的案例。
配置 Kong 和 Kuma 以实现零信任架构
如果您将应用程序配置为一组微服务,那么在采用符合零信任理念的网络和策略设置时,您可能会感到有些不知所措。为了制定一套一致的策略,您需要使用像 Kuma 这样的服务网格。服务网格是一个控制不同服务如何共享数据的系统。它负责处理微服务的网络流量、网络策略和可观测性。
要与外部世界(例如您的用户)通信,您需要设置一个API 网关,例如 Kong Gateway。Kong 充当前端服务提供商,用于访问您的所有内部服务。Kong 会将发送到特定端点的 HTTP 请求路由到相应的服务。
Kong 和 Kuma 支持的部分策略和功能包括以下几点:
全面流量加密
您可能了解HTTPS 的重要性,以及它是保护网络流量免受外部干扰的关键步骤。通常,您可以通过 SSL 证书来设置 HTTPS。这固然是很好的第一步,但还有许多其他配置可以提供更全面的保护。
例如,只需几行 YAML 代码,Kong 即可强制所有 HTTP 流量使用 HTTPS 加密。这样做至关重要,因为它能保护用户免于无意中发出不安全的请求。此外,SSL 证书需要定期续订并保持最新状态;证书的平均有效期为 90 天到一年。Kong 还自带证书管理器,可以自动续订证书,确保证书永不过期。更进一步,Kong 还支持加密出站 TLS/TCP 流量。这些协议独立于广为人知的 HTTP/S 系统之外,负责处理电子邮件、文件传输、SSH 等通信。
Kuma 支持双向 TLS (mTLS),这是一种通过共享私钥来验证服务有效性的策略。mTLS 用于确保用户、设备和服务器的合法身份。Kuma 的文档详细介绍了如何使用Kuma 保护服务通信,其中包含有关 mTLS 和其他安全策略的更多详细信息。
可观测性:流量的日志记录、监控和报告
可观测性是一项至关重要的实践。跟踪和可视化应用程序的行为可以帮助您更好地了解应用程序在生产环境中的运行情况。在零信任架构中,可观测性通常被视为服务和网络的基础。至少,您需要确保收集流量日志,以验证和测试您对网络安全性的假设。此外,您还需要确保收集的数据像其他任何关键信息一样得到安全存储。
为了实现这一点,Kong 提供了多个支持分析和监控的插件。其中许多插件都带有自己的 API 接口,因此您可以实现其功能的自动化。
更具体地说,Kuma 提供了一项流量日志策略。该策略允许您定义日志的收集方式,并将不同来源的流量数据路由到不同的目标位置。您可以创建一个统一的数据采集系统,同时保持足够的灵活性以适应各种差异。例如,您可能希望将内部应用程序日志聚合到某个长期存档数据库中,而将面向外部用户的服务日志发送到更容易访问的位置。
零信任架构并非强制推行“一刀切”的安全解决方案,而是从简单的原则出发。例如,“所有流量都应被捕获、存储并可查询”。然后,它实施满足这些需求的解决方案。
服务隔离
将各项服务彼此隔离至关重要,这能确保一台服务器上的安全问题不会影响其他服务器。即使您称之为冗余,也可能已经实施了一定程度的隔离。如果某项服务发生故障且无法处理请求,您应该制定相应的计划,例如将工作排队或负载均衡到另一台运行正常的服务。零信任架构中的服务隔离概念与此略有不同。但关键在于,一台机器上的安全事件不应导致网络中任何其他机器受到攻击。这就像流感一样:您需要隔离受影响的服务,以减缓病毒传播。
Kong 的Ingress 控制器提供精细的流量管理。它基于 Kubernetes 自身的 Ingress 策略构建,并提供了大量的语法糖和自动化功能,几乎无需额外配置。类似地,Kuma 提供流量权限策略来定义允许的流量。您可以将其视为一个功能更强大的防火墙:您可以限制来自特定服务(基于服务名称,而非 IP 地址或端口)的流量来源。您还可以将请求路由到特定的端点目标。任何未知来源或目标都将被禁止。
获取更多信息
构建零信任架构不仅仅是保护自身安全,它更是一个全球性问题。例如,在美国,网络安全指令是一项近期颁布的行政命令,旨在加强基础设施保护,防止黑客攻击和其他未经授权的访问。这表明,零信任设计的理念远不止于技术领域,它还涉及更广泛的问题。
如果您想试用 Kong 和 Kuma,他们提供了快速入门指南。如需了解更多关于零信任架构的信息,请查看 Kong 最近举办的线上活动“ Destination: Zero-Trust”。所有会议内容均已上线,方便您观看。
您可能还有兴趣了解 Kong 和 Kuma 如何通过其新的ZeroLB 架构模式帮助您移除复杂且昂贵的负载均衡器。
文章来源:https://dev.to/mbogan/building-zero-trust-with-an-api-gateway-and-service-mesh-35hg
