在快速发展的软件开发领域,基于单元(Cell-Based)的架构正变得越来越受欢迎。这一概念的灵感来自船舶舱壁的设计原则,在舱壁中,单独的水密舱室可隔离故障。通过将这一概念应用于软件,我们创建了一种架构,将应用程序划分为离散的、可管理的组件,即为单元。每个单元独立运行,通过定义明确的接口和协议来与其他单元通信。
基于单元(Cell-Based)的技术之所以受欢迎,是因为它们为我们提供了一种模块化、灵活且可扩展的架构。它们帮助工程师快速扩展,同时提高开发效率并增强可维护性。然而,尽管取得了这些令人印象深刻的成就,但基于单元(Cell-Based)的技术也带来了重大的安全挑战。
隔离和遏制
每个单元都必须在沙箱环境中运行,以防止对底层系统或其他单元的未经授权访问。Docker 或虚拟机(VM)等容器通常用于强制隔离。通过利用沙箱,即使一个单元受到攻击,攻击者也无法轻易提升权限或访问系统的其他部分。
权限和访问控制机制保证单元只能与授权的实体进行交互。基于角色的访问控制(Role-based access control,RBAC)根据分配给用户或实体的角色分配权限。
另一方面,基于属性的访问控制(Attribute-based access control,ABAC)考虑了用户角色、位置和时间等多个属性来做出访问决策。
网络分段(Network Segmentation)是另一个关键策略。组织可以通过为不同的单元创建隔离的网络区域来最大限度地减少攻击面并限制攻击者的横向移动。微分段(Micro-Segmentation)通过在数据中心内创建细粒度的安全区域,进一步实现了这一点,从而对网络流量提供了更好的控制。在每个网段内实施严格的访问控制并监控流量可以增强单元级别的安全性,通过保证稳健安全的架构来帮助满足合规性和监管要求。
零信任安全
在基于单元(Cell-Based)的架构中,采用零信任(Zero-Trust)策略意味着将单元之间的每次交互都视为潜在风险,无论其来源如何。这种方法需要不断验证每个单元的身份并应用严格的访问控制。信任总是通过努力获得的,而非被轻易地假定。
零信任涉及使用详细的数据点来显式检查每个单元的身份和操作。这意味着限制访问,以使单元只具有所需的权限(最小特权访问),并创建假设违规可能已经发生了的安全措施。
要实施零信任,请对所有单元和设备强制执行强身份验证和授权。使用网络分段和微分段来隔离和遏制任何潜在的违规行为。采用先进的威胁检测和响应工具来快速发现和解决架构内的威胁。这种全面的策略可确保动态环境中的鲁棒安全性。
身份验证和授权
OAuth 和 JWT(JSON Web 令牌)等强大的身份验证机制可验证单元的身份并实施严格的访问控制。OAuth 是一种广泛使用的基于令牌的授权框架。它允许在不共享凭据的情况下安全访问资源,这在分布式系统中特别有用。该框架允许单元向其他单元或服务授予对其资源的有限访问权限,从而降低了凭据暴露的风险。
另一方面,JWT 是自包含的令牌,带有有关用户或系统的声明,如身份和权限。它们提供了一种紧凑而安全的方式在单元之间传输信息。JWT 采用加密算法签名,可确保数据的真实性和完整性。当一个单元接收到 JWT 时,它可以验证令牌的签名并解码其有效载荷,以对发送者进行身份验证并根据令牌中的声明授权访问。
使用 OAuth 进行授权,使用 JWT 进行安全信息传输,可以在基于单元(Cell-Based)的架构中实现精确的访问控制。因此,单元只能访问它们被允许使用的资源,从而最大限度地降低了未经授权访问的风险。此外,这些机制支持可扩展性和灵活性。单元可以动态地发布和验证令牌,而无需集中式的身份验证系统,从而增强了架构的整体安全性和效率,并使其具有鲁棒性和适应性。
加密
加密(Encryption)可确保只有预期的接收者才能读取数据。哈希算法可验证数据在传输过程中未被更改,而采用公钥密码的证书可确认相关实体的身份。单元之间交换的所有数据都应该使用 TLS 等强协议进行加密。使用加密可以防止窃听和篡改,并确保数据是机密的、完整的并经过身份验证的。它还可以保护敏感信息免遭未经授权的访问,确保数据的完整性,并验证通信方的身份。
组织应该遵循最佳实践来有效地实施 TLS。通过正确地管理证书、在证书到期前对其进行更新以及在证书被泄露时撤销证书,确保 TLS 实施始终保持最新和稳健至关重要。其他安全措施包括启用完全前向保密(Perfect Forward Secrecy,PFS)以保证会话密钥的安全性,即使服务器的私钥被泄露也应如此。为了避免使用已弃用的协议,定期检查并更新配置是至关重要的。
双向 TLS(mTLS)
mTLS(双向 TLS)通过确保客户端和服务器相互验证来提高安全性。与仅对服务器进行身份验证的标准 TLS 不同,mTLS 要求双方出示并验证证书,以确认其身份。每个单元必须提供来自受信证书颁发机构(CA)的有效证书,接收单元在建立连接之前对此进行验证。这种双向身份验证过程可确保只有受信且经过验证的单元才能通信,从而显著降低了未经授权访问的风险。
除了验证身份之外,mTLS 还能保护数据的完整性和机密性。mTLS 创建的加密通信信道可防止窃听和篡改,这在基于单元(Cell-Based)的架构中至关重要,因为敏感数据在许多组件之间流动。实施 mTLS 涉及管理所有单元的证书。证书必须安全存储,定期更新,如果被泄露,则应适当撤销。组织可以利用自动化工具和系统来协助管理和更新这些证书。
总体而言,mTLS 通过建立相互身份验证、数据的完整性和机密性来确保鲁棒的安全性。它提供了一个额外的安全层,以帮助维护系统的可信度和可靠性,并防止在基于单元(Cell-Based)的架构中进行未经授权的访问。
API 网关
API 网关是一个重要的中介,它提供了对 API 交互的集中控制,同时简化了系统并提高了可靠性。通过集中化的 API 管理,组织可以实现更好的控制、更鲁棒的安全性、更高效的资源使用,并提高整个架构的可见性。
API 网关可以成为基于单元(Cell-Based)的架构实现单元路由器的最佳选择之一。所有 API 与给定单元的交互都有一个单一的入口点,这降低了众多微服务之间直接通信的复杂性,并减少了暴露给外部代理的表面积。集中式路由使更新、扩展和确保 API 访问的一致性和可靠性变得更容易。API 网关处理令牌验证,如 OAuth 和 JWT,以验证通信单元的身份。它还可以实现双向 TLS(mTLS)来对客户端和服务器进行身份验证。只有经过身份验证和授权的请求才能访问系统,从而保证数据的完整性和机密性。
API 网关可以实施速率限制,以控制客户端在特定时间范围内可以发出的请求数量,防止滥用并确保公平的使用资源。它对于防止拒绝服务(DoS)攻击和管理系统负载至关重要。网关还能提供全面的日志记录和监控功能。这些功能提供了对流量模式、性能指标和潜在安全威胁的宝贵见解,从而允许在保持系统健壮性和效率的同时主动识别和解决问题。在 API 网关的帮助下,有效的日志记录和监控对于事件响应和整体系统健康状况至关重要。
服务网格
服务网格(Service Mesh)有助于管理服务之间的通信。它处理了单元通信的复杂性,实施了诸如双向 TLS(mTLS)这样的强大安全策略。数据在传输过程中被加密,客户端和服务器在每次交易期间都会被验证。只有授权的服务才能进行交互,从而大大降低了未经授权访问和数据泄露的风险。
它们还允许详细的访问控制策略,精确地规定了哪些服务可以相互通信,进一步加强了架构的安全性。除了安全性之外,服务网格还通过提供对所有服务交互的一致日志记录、跟踪和监控来增强基于单元(Cell-Based)的架构的可见性和弹性。这种集中式视图能够实时检测异常、潜在威胁和性能问题,从而促进快速有效的事件响应。
网格会自动处理重试、负载均衡和熔断。即使在具有挑战的条件下,通信仍然可靠,这保持了服务的可用性和完整性。服务网格通过在所有服务中一致地应用安全和操作策略来简化安全管理,而无需更改应用程序代码,从而更容易在动态和可扩展的环境中实施合规并防范不断变化的威胁。服务网格可确保通信安全,并增强基于单元(Cell-Based)的架构的整体鲁棒性。
Doordash 最近分享说,它使用基于 Envoy 的服务网格实现了区域感知路由。该解决方案使该公司能够在同一可用区(AZ)内有效地引导流量,从而最大限度地减少更昂贵的跨可用区数据传输。
集中式注册表
集中式注册表是管理基于单元(Cell-Based)的架构中的服务发现、配置和健康状态的支柱。通过维护所有单元和服务实例及其元数据的最新存储库,我们可以确保只有注册和经过身份验证的服务才能交互。这种集中式通过防止未经授权的访问和最大限度地降低恶意服务渗透系统的风险来加强安全性。此外,它在所有服务中实施统一的安全策略和配置。一致性允许应用的最佳实践,并减少可能导致漏洞的配置错误的可能性。
除了增强访问控制和配置一致性之外,集中式注册表还显著提高了监控和事件响应能力。它提供了对服务运行状态和健康状况的实时可见性。允许快速识别和隔离受损或故障的单元。这种积极主动的方法对于遏制潜在的安全漏洞并减轻其对整个系统的影响至关重要。
在集中式注册表内审计变更的能力有助于遵守监管要求,并有助于取证调查。维护服务注册、更新和健康检查的详细日志可以增强基于单元(Cell-Based)的架构的安全态势。通过这种监督,基于单元(Cell-Based)的架构在应对不断演变的威胁时仍具有弹性和可靠性。
单元健康
保持单元健康可以使每个单元平稳可靠地运行,从而保持系统的整体完整性和安全性。持续的健康监测可实时洞察每个单元的运行情况,跟踪响应时间、错误率和资源使用等重要指标。通过自动健康检查,该系统可以快速检测到任何异常、故障或与预期性能的偏差。早期检测允许采取主动措施,例如在受损单元影响到更广泛的系统之前隔离或关闭它们,从而防止潜在的安全漏洞,并确保服务的稳定性和可靠性。
保持单元健康还能直接支持动态扩展和弹性,这对鲁棒的安全性至关重要。健康的单元允许架构有效地扩展以满足需求,同时保持安全控制的一致性。当一个单元未通过健康检查时,自动化系统可以通过适当的配置和安全策略快速更换或扩大新单元,最大限度地减少停机时间并确保持续保护。这种对单元健康管理的响应式方法降低了级联故障的风险。它提高了系统从事件中快速恢复的能力,从而最大限度地减少了安全威胁的影响,并维护了架构的整体安全态势。
基础设施即代码(IaC)
基础设施即代码(IaC)可实现一致、可重复且自动化的基础设施管理。通过代码定义基础设施,团队可以从一开始就在所有单元中实施标准化的安全策略和配置,从而实施最佳实践和合规要求。
像 Terraform 或 AWS CloudFormation 这样的工具可以自动执行配置和配置流程,显著降低了人为错误的风险,人为错误是安全漏洞的常见来源。一致的设置有助于保持统一的安全态势,从而使系统地识别和解决潜在弱点变得更加容易。
IaC 还通过版本控制和可审计性增强了安全性。所有基础架构配置都存储在版本控制的存储库中。团队可以跟踪变更、审查配置,并在需要时恢复到以前的状态。这种透明度和可追溯性对于合规审计和事件响应至关重要,可以提供基础设施变更和部署的清晰历史记录。
IaC 通过快速安全地配置新单元或环境促进了快速扩展和恢复。即使架构不断发展和演变,安全控制也会得到一致的应用。简而言之,IaC 简化了基础设施管理,并将安全性嵌入到了基于单元的架构的核心中,从而提高了其抵御威胁的弹性和鲁棒性。
结论
确保基于单元(Cell-Based)架构的安全对于充分利用其优势并最大限度地降低风险至关重要。为了实现这一目标,必须采取全面的安全措施。组织可以从使用沙箱环境和严格的访问控制机制(如基于角色和基于属性的访问控制)隔离和遏制单元开始。网络分段和微分段至关重要——它们最大限度地减少了攻击面,并限制威胁的横向移动。
采用零信任策略至关重要。它可确保每个单元的身份得到持续地验证。诸如 OAuth 和 JWT 之类的强大身份验证机制以及通过 TLS 和 mTLS 进行的加密通信可保护数据的完整性和机密性。服务网格可处理服务之间安全可靠的交互。同时,集中式注册表可确保只有经过身份验证的服务才能通信,从而增强了监控和事件响应的能力。
API 网关提供了对 API 交互的集中式控制,确保了单元之间一致的安全性。持续的健康状况监控和基础设施即代码(IaC)通过自动化和标准化的基础设施管理进一步增强了安全性,从而实现了快速扩展和恢复。
通过整合这些策略,组织可以创建一个健壮的安全框架,使基于单元的(Cell-Based)架构能够在当今动态的技术环境中安全高效地运行。
作者介绍
Stefania Chaplin 在 DevSecOps、安全意识和软件供应链管理领域担任解决方案架构师,其经验意味着她帮助无数组织了解并实施了整个 SDLC 的安全性。作为一名 python 开发人员,Stefania 喜欢通过编写脚本和自动化流程以及创建集成来优化和提高运维效率。她曾在许多会议上发表过演讲,包括 RSA、DevOps 企业峰会、Blackhat、QCon、ADDO 和 Women in DevOps。当不在电脑前时,Stefania 喜欢冲浪、瑜伽和照顾她所有的热带植物。
查看原文链接:
https://www.infoq.com/articles/cell-based-architecture-application-security/
评论