保护微服务的 13 个最佳实践

微服务架构提供了灵活性、可扩展性以及修改、添加或删除软件组件的能力,而不会影响应用程序的其他部分。

除了更短的软件开发周期、更小的团队和灵活的编程语言选项之外,它还允许您在不干扰其他组件的情况下扩展或排除某些功能或服务的故障。

通常,微服务允许将大型单一应用程序分解为可独立部署的不同服务。 然而,这些较小的独立服务增加了组件的数量,因此增加了保护它们的复杂性和难度。

整体式与微服务架构图片 红色的帽子

通常,典型的微服务部署将具有硬件、服务或应用程序、通信、云、虚拟化和编排层。 其中每一个都有特定的安全要求、控制和挑战。

与微服务相关的安全挑战

微服务通常是广泛分布的系统,具有复杂的访问规则、更多的监控流量和更大的攻击面。 此外,大多数微服务云在云环境中运行,这些环境也具有不同的安全配置和控制。

由于暴露的 API、端口和组件数量众多,传统防火墙可能无法提供足够的安全性。 这些问题使微服务部署更容易受到各种网络威胁,如中间人、注入攻击、跨站点脚本、DDoS 等。

网络安全是微服务的另一个挑战。 特别是,身份和访问控制呈现出新的复杂程度。 其他漏洞包括不安全的代码和服务发现系统中的缺陷。

尽管保护微服务比单体应用程序更难,但您可以通过制定良好的策略并遵循最佳实践来有效地保护它们。

理想情况下,该体系结构需要一种分布式方法,该方法应涵盖所有不同的组件。

需要解决的典型领域包括

  • 保护应用程序、微服务和用户
  • 保护身份和访问管理
  • 保护数据
  • 增强服务到服务通信的安全性
  • 监控微服务和安全系统

保护微服务的最佳实践

最佳策略之一是结合使用最佳实践、工具和控制措施来保护整个生态系统。 实际方法可能会根据服务类型、应用程序、用户、环境和其他因素而有所不同。

如果您决定使用微服务,则需要确保满足服务、连接和数据的所有安全需求。

现在让我们来看看一些有效的微服务安全实践。

#1。 从一开始就建立安全👮

使安全性成为开发周期的一部分。 理想情况下,从一开始就将安全性集成到微服务开发和部署中。 与在软件开发接近完成时才添加它相比,以这种方式解决安全问题是一种简单、有效且成本更低的方法。

#2。 使用纵深防御机制

深度防御 (DiP) 是一种在服务和数据上应用多个安全层的技术。 这种做法使攻击者更难穿透多层,从而为您的服务和数据提供强大的安全性。

与防火墙等外围安全解决方案不同,纵深防御概念不同。 它依赖于防病毒、防火墙、补丁管理、反垃圾邮件软件等工具的组合,以提供分布在整个系统中的多个安全层。

纵深防御多层安全图像: 因普瓦

使用这种方法,您必须首先识别敏感服务,然后在它们周围应用适当的安全层。

#3。 在容器 📦 级别部署安全性

大多数情况下,微服务依赖于容器技术。 因此,在内部和外部保护容器是减少攻击面和风险的一种方法。 理想情况下,以最小特权安全原则为目标是一种很好的做法,需要结合多种策略,包括但不限于:

  • 将权限限制在所需的最低限度
  • 避免使用 sudo 或特权帐户运行服务和其他任何东西。
  • 限制或控制可用资源的访问和消耗。 例如,限制容器对操作系统资源的访问有助于防止数据被盗或泄露。
  • 不要将机密存储在容器磁盘上。
  • 使用适当的规则来隔离对资源的访问。
  如何删除 Tango 帐户

确保容器镜像没有任何漏洞或安全问题也很重要。 定期对容器进行安全和漏洞扫描将有助于识别风险。

典型的图像扫描工具包括 克莱尔, , 和更多。

#4。 部署多重身份验证🔒

启用多重身份验证可增强前端的安全性。

访问的用户将需要提供他们的用户名和密码详细信息以及另一种形式的验证,例如发送到他们手机或指定电子邮件地址的代码。 该技术使可能使用被盗或被黑客攻击的凭据的攻击者更难访问微服务,因为他们无法提供二次身份验证。

#5。 使用用户身份和访问令牌

在微服务部署中,大量的应用和服务会需要安全的授权和访问控制。 OAuth 2.0 和 OpenID 等授权框架使您能够安全地处理令牌,从而保护您的微服务。 因此,这允许第三方应用程序访问用户的其他服务或数据。

在典型部署中,主应用程序会提示用户授权第三方服务。 接受后,应用程序会为会话生成一个访问令牌。

特别是,OAuth 是最有效的用户身份和访问控制策略之一。 尽管还有其他几种授权协议,您也可以构建自己的授权协议,但最好使用 OAuth since 更标准、更稳定并且被广泛接受。

#6。 创建 API 网关

通常,微服务由分布在不同网络上的多个组件组成,可从各种系统和客户端访问。 公开微服务会增加漏洞和安全风险。 保护它们的一种方法是创建一个单一且安全的入口点,帮助您集中来自外部系统和客户端的所有访问。

为实现这一点,部署一个 API 网关以筛选所有传入的安全问题请求,然后再将它们路由到适当的微服务。 API 网关位于客户端应用程序和微服务之间。 然后它会限制暴露微服务,同时提供额外的请求管理功能,例如身份验证、SSL 终止、协议转换、监控、请求路由、缓存等。

通过这种方法,API 网关将所有外部服务路由到微服务,同时还支持纵深防御安全原则。

微服务 API 网关图片 直播簿

典型的 API 网关包括 NGINX, , 泰克, 大使, AWS API 网关, 和更多。

要了解有关 API 安全性的更多信息,请查看我们关于为何以及如何保护 API 端点的指南。

#7。 基于部署区域的配置文件 API

通过确保用户只能访问他们需要的 API 和服务来实施基于角色的限制。 由于大多数恶意软件通常会将服务暴露给更多人,因此将访问权限限制为仅授权用户可降低风险。 减少暴露的一种技术是根据应该有权访问 API 的用户来标记 API。 通常,API 可以是;

  • 以太网 API – 用于向数据中心外的外部世界公开的服务。
  • Corporate Zone API——这些用于内部私人流量
  • DMZ API——处理来自互联网的流量
  • 混合区域 API – 用于数据中心部署
  2022 年 9 个最佳 AP(应付帐款)自动化工具

#8。 保护服务到服务的通信

有效的做法包括在两个微服务通信时对请求进行身份验证和授权。

通常,您可以使用三种主要技术来保护服务间通信。 它们是信任网络、JSON Web 令牌 (JWT) 和相互传输层安全性(mTLS,或相互 TLS)。

使用 JWT Image 保护服务间通信 直播簿

在这三者中,最受欢迎的是 mTLS。 在这种方法中,每个微服务都必须携带一对公钥/私钥。 然后,客户端微服务使用密钥对通过 mTLS 向接收微服务验证自己。

在身份验证期间,每个微服务都会生成一个证书。 之后,每个微服务将使用对方的证书来验证自己。

虽然 TLS 为传输中的数据提供完整性和机密性,但它还使客户端能够识别微服务。 客户端微服务通常知道其他微服务。 然而,由于 TLS 是单向的,接收微服务无法验证客户端微服务,攻击者可以利用此缺陷。 另一方面,mTLS 提供了一种方法,其中每个微服务都可以识别另一个。

#9。 速率限制🚏客户端流量

限制外部流量可以防止诸如拒绝服务 (DoS) 攻击以及某些客户端占用大部分应用程序带宽的情况等问题。 一种方法是应用各种规则,这些规则可以根据 IP、时间等监视和控制从客户端发送或接收的流量速率。

将您的服务配置为在检测到多次失败的 API 登录尝试或任何其他可疑活动时减慢速度。

一个缓慢的系统会阻止攻击者并可能放弃他们访问服务的尝试。 您可以使用 API 网关、通过代码或任何其他技术进行速率限制。 通常,大多数 SaaS 环境都有 API 速率限制,以最大限度地减少用户滥用和攻击。

#10。 使用编排管理器

除了增强安全性之外,编排管理器还允许您自动执行配置、协调和其他微服务管理任务。 通常,这些工具使您能够管理多个容器、限制元数据访问、隔离工作负载、收集日志等等。

一些编排工具具有附加功能,使开发人员能够存储和共享敏感信息,例如 SSL 证书、加密密钥、密码和身份令牌。

有效微服务编排的两种常用方法是:

  • 将编排编码为微服务
  • 使用 API 网关提供编排层

由于需要扩展服务时存在挑战,因此不建议通过 API 网关进行编排。

微服务编排层——图片 全球逻辑

典型的编排管理工具包括 库伯内斯, 伊斯蒂奥, Azure Kubernetes 服务 (AKS), ETC。

要了解更多信息,请浏览 DeOps 的容器编排。

#11。 监控所有系统和服务

由于微服务依赖于分布式系统,因此您需要为所有单独的组件制定可靠且有效的监控策略。

部署持续监控可以让您及时检测和解决安全风险。 为此,有广泛的微服务监控解决方案,包括 普罗米修斯, 统计数据, Influx数据库, 日志存储, ETC。

微服务架构内部监控

使用适当的工具来监控内部系统和服务。 一些最佳实践包括;

  • 在应用层启用日志记录。 你可以 斯普伦克, 格拉巴纳, 麋鹿栈,以及其他在应用程序、容器、网络和基础架构级别收集日志的工具。
  • 监控使用指标
  • 使用 CPU、内存、响应时间、错误、通知等指标的趋势来检测表明存在或潜在攻击的异常活动。
  • 审核传入的客户端请求、数据库记录、容器和其他区域中的日志,以识别不一致或异常活动。
  为最佳打字服务雇用的 8 个平台

#12。 自动化安全活动

自动化安全流程,例如部署更新、漏洞扫描、监控、执行策略和其他活动。 此外,检查更新以确保它们是安全的并且不会引入新的漏洞。

更新后,安全软件最好对所有容器和微服务进行测试,看看之前是否存在漏洞或安全问题。

#13。 时刻保护🛡️数据

保护传输中和静止的数据。 理想情况下,强制对所有通信使用 HTTPS,以保护传输中的数据,并对所有静态敏感数据进行加密。 避免传输和存储位于代码之外的纯文本密码、密钥、凭据和敏感数据。

最好的策略是尽早使用标准技术加密所有敏感数据。 此外,尽可能晚地解密数据以减少暴露。

结论

微服务依靠分布式组件来提供更多灵活性和部署选项等优势。 但是,在使用微服务时,组织必须调整内部安全策略和策略,以采用更加云原生和分布式的方法。

理想情况下,旨在减少攻击面,保护微服务环境、API、应用程序和数据。