【技术分享】微服务网格化升级后的安全架构问题

砍柴网  •  扫码分享
我是创始人李岩:很抱歉!给自己产品做个广告,点击进来看看。  

作者:胡宏伟 腾讯 金融 云解决方案中心

2016 年 9 月 14 日,Envoy 的开源标志着应用技术架构进入到服务网格(Service Mesh)时代,2017 年 5 月 24 日,Google、IBM、Lyft 共同宣布 Istio 开源标志着进入由控制面和数据面组成的服务网格成为主流。Istio 是当前最受欢迎的服务网格技术。 

什么是服务网格? 服务网格(Service Mesh)是管控服务间通信网络的逻辑隔离空间,提供一致透明的服务发现、流量和全链路观测管理环境。同一网格可管理来自多个 Kubernetes 集群,甚至异构 VM 的服务,同一网格内的服务默认网络互通。 

Service Mesh 技术的关注点在于服务间通讯 ,其目标是剥离客户端 SDK,为应用减负,提供的能力主要包括安全性、路由、策略执行、流量管理等。 

服务网格是微服务架构的升级,核心的动作是业务逻辑和网络通信的拆分。 Service Mesh 技术的优势是屏蔽分布式系统通信的复杂性(负载均衡、服务发现、认证授权、监控追踪、流量控制等等),服务只用关注业务逻辑。

【技术分享】微服务网格化升级后的安全架构问题

服务是服务网格管理流量的基本单位,一个服务可对应多个 endpoint 实例,对应关系可来源于服务网格对 Kubernetes 集群的 K8S Service 自动发现,或手动注册 endpoint 与服务的对应关系。 

数据面包括边缘代理网关与 sidecar proxy。边缘代理网关以独立 Pod 的形式部署于网格服务发现 Kubernetes 集群中,管控观测南北向流量;sidecar proxy 部署于业务 Pod 内,或业务虚拟机内,管控观测东西向流量。 

控制面管理和配置,数据面做流量的路由转发。

服务网格架构对

安全防御带来的改变

服务网格在提供微服务间的通信管理、流量控制和安全性方面发挥了重要作用,但在实施和维护过程中也面临一些安全挑战:

问题一:服务网格对内、对外的网络访问策略应该如何管控?

虽然服务网格提供了细粒度的访问控制策略,但复杂、错误的策略可能导致未授权访问或过度限制合法流量。

【技术分享】微服务网格化升级后的安全架构问题

网格内的访问控制

Istio 的流量路由规则可以让您轻松地控制服务之间的流量和 API 调用。

微服务有特殊的安全需求,包括防止中间人攻击、灵活的访问控制、审计工具和相互的 TLS。Istio 包括一个全面的安全解决方案,提供了强大的身份、强大的策略、透明的 TLS 加密,以及验证、授权和审计(AAA)工具来保护服务和数据。 

如何在服务网格中管理7层流量?

Sidecar 模式是最成熟的服务网格部署模式,已被广泛采用在生产环境中,得到了充分的验证和支持。Sidecar 模式每个服务实例一个 L4 和 L7 的代理,安全性高,因为每个服务实例都是隔离的,减少了潜在的攻击面。 

  ●   网络代理: 管理服务间的通信,拦截和处理进出服务的流量。 

  ●    日志和监控: 收集和转发日志、指标和追踪信息。 

  ●    安全性: 实现身份验证、授权和加密。

  ●    配置管理: 动态加载和更新配置。

Sidecar和控制中心协同,鉴权处理需要访问控制中心的服务授权信息,对于日志处理需要拦截日志后将日志写入到消息中间件。

网格间的访问控制

一个大的微服务应用需要对外统一暴露API接口服务的时候,这些场景仍然需要使用API网关或微服务网关。

我们可以使用Envoy Gateway 或者 Istio Ingress Gateway,让开发人员可以专注于业务逻辑,简化了应用程序的开发,通过将灰度发布、蓝绿部署、流量镜像等运维能力从应用程序中剥离出来,让运维能力不再依赖开发团队。

安全隔离

以 service-based 的认证与授权机制,在容器化动态 IP 场景下,可以实现可控的服务认证与访问控制管理。支持 JWT 请求身份认证、自动 mTLS 实现零信任网络,以及基于身份和流量特征限制访问权限。

实现基于身份认证的旁路阻断

在服务网格架构中,流量可能绕过服务网格的控制和管理,从而导致安全性、可观察性和流量管理缺失的风险。

  ●    直接服务调用风险: 如果微服务之间直接通过 IP 地址或其他方式进行调用,而不是通过服务网格的代理(如 Envoy),则会绕过服务网格的流量管理和安全策略。

  ●    不当的网络配置: 网络配置不当(如防火墙规则、路由设置等)可能导致流量绕过服务网格的代理。

  ●    依赖外部服务风险: 微服务可能依赖于外部服务(如第三方 API),如果这些调用不经过服务网格,可能导致旁路风险。

可以通过部署腾讯无侵入旁路风险检测产品的方式,实现基于身份认证的旁路阻断:

流量监控和异常检测: 实施流量监控和异常检测机制,实时监控请求的行为,识别潜在的旁路攻击。可以使用机器学习算法分析流量模式,及时发现异常行为。

  ●    集成身份和访问管理(IAM): 使用 IAM 解决方案来管理用户和服务的身份验证和授权。IAM 系统可以提供强大的身份验证机制,确保只有经过验证的用户和服务才能访问资源。

  ●    实施强身份验证机制: 使用多因素身份验证(MFA)等强身份验证机制,增加身份验证的安全性,防止未授权访问。

  ●    部署腾讯NDR套件: 通过侧栽的方式接入服务网格流量镜像,识别风险,发现恶意攻击和潜在威胁,对攻击事件进行分析、溯源,并以旁路方式实现精准阻断,对业务无侵入。

【技术分享】微服务网格化升级后的安全架构问题

问题二:高可用环境下对服务网格安全策略的影响?

在高可用环境中,服务网格的安全策略需要综合考虑身份验证、授权、数据加密、流量管理、监控与审计等多个方面。

image.png

身份验证与授权

  ●    服务间身份验证: 在高可用环境中,服务可能会在多个实例之间进行负载均衡。服务网格需要确保每个服务实例都能安全地验证其他服务的身份,通常通过使用短期证书(如 mTLS)来实现。

需要确保身份验证机制的高可用性,以避免单点故障(SPOF)。可以考虑使用分布式身份管理系统。 

  ●    细粒度授权: 高可用环境中,服务的访问控制策略需要灵活且高效。服务网格可以实现基于角色的访问控制(RBAC)或基于属性的访问控制(ABAC),确保只有授权的服务能够访问特定资源。

需要定期审查和更新授权策略,以适应动态变化的服务实例和环境。 

数据加密 

  ●    传输层加密: 在高可用环境中,服务之间的通信可能会通过多个网络路径进行。服务网格应确保所有服务间的通信都经过加密(如使用 mTLS),以防止数据在传输过程中被窃取或篡改。

需要考虑加密证书的管理和更新策略,以确保在高可用环境中不会因证书过期而导致服务中断。 

  ●    静态数据加密: 除了传输层的加密,静态数据的加密也至关重要。确保存储在数据库或其他存储系统中的敏感数据是加密的,以防止数据泄露。

流量管理与安全策略 

  ●    流量控制: 在高可用环境中,流量管理策略(如限流、熔断、重试等)需要与安全策略相结合,以确保在高负载情况下仍能保持服务的安全性和可用性。

例如,流量限制可以防止恶意攻击(如 DDoS 攻击),而熔断机制可以在服务故障时保护其他服务。 

  ●    安全策略的动态调整: 高可用环境中的服务可能会频繁变化(如自动扩展、故障转移等),因此安全策略需要能够动态调整,以适应这些变化。

可以使用服务网格的控制平面来动态更新安全策略,而不需要重启服务。

安全访问监控与审计

  ●    安全事件监控: 在高可用环境中,监控安全事件(如未授权访问、异常流量等)是确保系统安全的重要环节。服务网格可以集成监控工具,实时收集和分析安全相关的指标和日志。

需要支持输出访问日志、统计指标和调用跟踪等可观测性数据,以便和现有的安全系统进行能力集成。需要设置报警机制,以便在检测到异常活动时及时响应。 

  ●    审计与合规: 高可用环境中的服务需要遵循合规要求,因此审计日志的收集和分析至关重要。服务网格应能够记录所有安全相关的事件,并提供审计功能,以便后续分析和合规检查。 

问题三:服务网格如何实现身份管理?  

服务网格支持通过多种机制和工具实现身份管理,以确保微服务之间的安全通信和访问控制。

身份管理在服务网格中主要涉及服务的身份验证、授权和证书管理。以下是服务网格如何实现身份管理的几个关键方面: 

  ●    证书管理: 服务网格通常使用 mTLS 来确保服务间的安全通信。管理和轮换证书可能会变得复杂,尤其是在大规模环境中。服务网格的控制平面(如 Istio、Linkerd)负责自动化证书的生成、分发和更新,确保服务实例在运行时始终拥有有效的证书。服务网格通常使用短期证书(如 mTLS)来实现服务间的身份验证。这些证书的有效期较短,通常为几小时到几天,减少了证书被盗用的风险。 

  ●    身份验证: 确保所有服务和用户都经过适当的身份验证是一个挑战,尤其是在动态环境中,服务实例可能频繁变化。服务网格通过代理(如 Envoy)处理服务间的通信,确保所有请求都经过身份验证和授权检查。尽管 mTLS 提供了加密保护,但如果证书管理不当,仍然可能面临中间人攻击的风险。 

  ●    安全监控与设计: 服务网格可以记录身份验证和授权的相关事件,生成审计日志,以便后续分析和合规检查。这些日志可以帮助识别潜在的安全问题和不当访问行为。通过集成监控工具,服务网格可以实时监控身份管理相关的指标(如身份验证失败次数、授权请求等),及时发现异常情况。 

  ●    安全策略的动态调整: 服务网格支持动态更新身份管理策略,以适应不断变化的环境:管理员可以通过服务网格的控制平面动态更新身份验证和授权策略,而无需重启服务。这种灵活性使得服务网格能够快速响应安全需求的变化。

问题四:安全可观测性和监控

服务网格的安全可观测性是指在微服务架构中,通过监控、日志记录和追踪等手段,实时了解和分析服务间的安全状态和行为。这种可观测性对于识别潜在的安全威胁、确保合规性以及优化安全策略至关重要。

  ●    安全指标监控: 服务网格可以监控与安全相关的指标,例如身份验证失败次数、授权请求的成功与失败、TLS 连接的状态等。这些指标可以帮助识别异常行为和潜在的安全问题。

通过集成监控工具(如 Prometheus、Grafana),可以实时可视化这些指标,便于运维团队进行分析和响应。 

  ●    流量监控及异常检测: 监控服务间的流量模式,识别异常流量(如 DDoS 攻击、数据泄露等)。服务网格可以提供流量的详细视图,包括请求的来源、目的地、协议等信息。在复杂的服务网格环境中,识别异常行为和潜在的安全威胁可能变得更加困难。 

  ●    分布式追踪: 服务网格可以实现分布式追踪,记录请求在微服务间的流转情况。这有助于了解请求的完整路径,识别潜在的安全漏洞。通过追踪工具(如 Jaeger、Zipkin),可以可视化请求的延迟和错误,帮助识别安全问题的根源。 

问题五:依赖性管理中的安全问题

在服务网格的依赖性管理中,安全问题是一个重要的关注点。由于微服务架构的复杂性和服务之间的紧密耦合,安全漏洞可能会在不同服务之间传播,导致严重的安全风险。 

  ●    服务间的信任关系问题:  服务网格中的服务可能会建立不必要的信任关系,导致某个服务的漏洞影响到其他服务。

应对策略: 实施最小权限原则,确保服务之间的信任关系仅限于必要的服务。使用服务网格的安全策略(如 Istio 的授权策略)来限制服务之间的通信。 

  ●    供应链安全问题: 服务网格通常依赖于多个第三方库和服务,这些依赖项可能存在安全漏洞,会影响整个系统的安全性。需要确保所有依赖项都是最新的并且没有已知漏洞。

应对策略: 定期审查和更新第三方依赖,确保使用的库和服务是最新的,并且没有已知的安全漏洞。实施供应链安全策略,确保所有依赖的来源是可信的。 

网格大小的划分 

在设计和实施服务网格时,合理的大小划分是确保系统可维护性、可扩展性、安全性和性能的关键因素。服务网格的大小划分通常涉及到微服务的划分、服务之间的关系、流量管理、以及团队的组织结构等多个方面。 

在实际的应用案例中,一般都是基于业务模块维度,或者基于单元化原则来进行网格的划分。过大的网格,会导致管控策略的复杂度大幅升高;而把网格拆的过细,也会导致服务解耦成本的上升。

微服务的功能划分,总体应基于单一职责原则,即每个微服务应专注于特定的业务功能或领域,遵循单一职责原则。这样可以减少服务之间的耦合,提高服务的可维护性。其次,应考虑服务之间的依赖关系,过于复杂的依赖关系可能导致服务网格的管理和维护变得困难。对于高度依赖的服务,可以考虑将它们聚合为一个服务,以减少交互的复杂性。相反,对于功能过于庞大的服务,可以拆分为多个小服务。 

也可以根据流量模式和使用情况划分服务。 例如,某些服务可能会处理大量的请求,而其他服务则相对较少。可以根据流量需求进行服务的划分和部署。考虑服务的负载均衡策略,确保服务能够有效地处理流量。过多的网格,也会带来更精细的流量管理和安全策略需求,以确保跨集群的通信安全和可靠。 

可以考虑根据团队的组织结构划分服务。 每个团队可以负责一个或多个微服务,确保团队能够独立开发、测试和部署服务。 

总之,服务网格的大小划分是一个复杂的过程,需要综合考虑微服务的功能、依赖关系、流量管理、团队结构、监控需求、性能要求、技术栈和基础设施等多个因素。通过合理的划分,可以提高系统的可维护性、可扩展性和性能,确保服务网格能够有效支持业务需求。 

尽管服务网格提供了许多安全功能,但在实施和维护过程中仍然面临多种安全挑战。组织需要采取综合措施,包括合理的配置管理、有效的身份和访问管理、监控和日志分析、以及团队培训,以应对这些挑战并确保服务网格的安全性。

随意打赏

提交建议
微信扫一扫,分享给好友吧。