保护 DevOps 平台环境以实现零信任

本文帮助你作为 DevOps 团队成员实现最低特权的零信任原则并保护 DevOps 平台环境。 它包含了我们保护企业 DevOps 环境电子图书中的内容,并重点介绍了机密和证书管理的最佳做法。

现代企业依赖于 DevOps 平台进行部署,包括开发人员提高工作效率所需的管道和生产环境。 在过去,应用程序安全方法没有考虑到当今这些管道和生产环境面临着更大攻击面。 随着黑客向左移动并瞄准上游工具,你需要创新方法来保护 DevOps 平台环境。

在下图中,请注意,DevOps 平台环境连接到应用程序环境以及持续集成和持续交付 (CI/CD) 管道扩展。

示意图演示了上面链接的电子书中所述的 DevOps 平台环境和安全威胁,此处链接的相关文章汇总了这些内容。

CI/CD 管道扩展为黑客提供了从应用程序环境进行特权提升的机会。 扩展和集成会增加攻击面的漏洞。 防范恶意软件入侵的威胁至关重要。

攻击者如何及为什么以管道为目标

管道和生产环境可能与标准应用程序安全做法和流程无关。 它们通常需要高级访问凭证,这些凭证可为攻击者提供深入和造成实质影响的访问。

虽然攻击者找到了入侵系统的新方法,但管道最常见的攻击途径包括:

  • 提取运行时变量和参数注入。
  • 从管道检索服务原则或凭证的脚本。
  • 错误配置的个人访问令牌,允许具有密钥的任何人访问 DevOps 平台环境。
  • 需要访问代码(通常是只读访问,但有时是写入访问)的集成工具中的漏洞和错误配置。 集成工具可包括测试框架、静态应用程序安全测试 (SAST) 和动态应用程序安全测试 (DAST)。

机密和证书管理的最佳做法

避免灾难性的泄密事件其实很简单,只需有效地进行机密管理即可。 下图演示了有效机密、密码、访问令牌和证书管理的示例。

示意图演示了机密和证书管理。

如上图所示,开发人员根据客房请求开始构建。 然后,GitHub 使用保管库应用角色的角色 ID 和机密 ID 来启动运行程序。 受信任实体定期从保管库请求新的机密 ID,并从 GitHub 获取 GitHub 机密 ID。 保管库使用 GitHub 机密角色 ID 和机密 ID 来登录和获取代码签名资产。 运行器对移动应用程序进行定制和代码签名。

以下最佳做法可帮助你构建安全设置,以最大程度地减少机密和参数泄露。

  • 在每个应用程序生命周期阶段为机密和证书提供安全存储。 始终像开放源代码项目一样进行开发。 确保团队将机密存储在密钥保管库中,而非存储在代码或团队环境中。 使用用于安全地存储和访问机密的 Azure Key Vault 云服务。
  • 配备 Azure 以信任 GitHub 的 OIDC 作为联合标识。 OpenID Connect (OIDC) 允许 GitHub Actions 工作流访问 Azure 中的资源,而无需将 Azure 凭据存储为长期存在的 GitHub 机密。

有关 DevOps 环境安全性的更多最佳做法

为了帮助防御安全事件,请查看以下最佳做法来强化 DevOps 平台环境。 在保护企业 DevOps 环境电子图书中找到这些建议的详细讨论。

  • 为每个 DevOps 平台环境配备审核线索。查看审核日志以跟踪谁获得了访问权限、发生了什么更改以及任何活动系统的日期/时间。 具体包含带有流入生产的 CI/CD 管道的 DevOps 平台。 DevOps 工具的审核日志提供了可靠的方法来更快地修正威胁、查找可疑活动并发出警报,以发现可能的违规或漏洞,以及查找潜在的数据或特权滥用。 确保在每个环境中提供精细控制和审核线索。
  • 保护软件供应链。 通过将每个库引入代码库,你可以扩展软件供应链,并继承每个开放源代码项目或工具的依赖关系。 请谨慎删除不必要的库和开放源代码组件,以缩小软件供应链的攻击面。
  • 自动执行基础结构即代码 (IaC) 模板扫描。 通过 IaC 环境,可以轻松扫描错误配置、合规性审核和策略问题。 实施合规性检查和访问控制可提高整个基础结构的安全态势。 验证满足自动化系统要求的工具集成的安全性。
  • 自动执行审批工作流。 对于将代码投入生产的任何审批工作流程,某些自动或手动检查必须确认每个请求的安全性、业务价值、状态和质量。 这些检查充当开发和生产之间的大门,以防止拒绝服务攻击和黑客在不标记或不触发警报的情况下将代码注入生产环境。
  • 仅允许经过验证的 DevOps 工具集成。 与在开发人员环境中一样,DevOps 工具附带扩展和集成,使 DevOps 团队高效且安全。 确认经过验证的集成需要执行其工作所需的最低特权。 尽可能实现最低权限访问,并确保适当级别的读写权限。 了解如何禁用或限制组织的 GitHub Actions。

后续步骤