你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

基础结构即代码 (IaC) 的 DevSecOps

Microsoft Sentinel
Azure Monitor
GitHub

解决方案构想

本文介绍了一种解决方案构想。 云架构师可以通过本指南来帮助可视化此体系结构的典型实现的主要组件。 以本文为起点,设计一个符合工作负荷特定要求的架构合理的解决方案。

此解决方案理念说明了将 GitHub 用于基础结构即代码的 DevSecOps 管道(IaC)。 它还介绍如何管理卓越运营、安全性和成本优化的工作流。

Terraform 是 Hashicorp 的商标。 使用此标志并不意味着认可。

体系结构

显示适用于 IaC 的 DevSecOps 的体系结构的关系图。

下载此体系结构的 Visio 文件

数据流

以下数据流对应于上图:

  1. 使用体验驱动开发将基础结构定义(如 IaC 模板)的代码更改检查到 GitHub 存储库中。 同时开发单元测试、集成测试和策略作为代码(PaC),以测试 IaC 的质量。

  2. 拉取请求通过 GitHub Actions 触发自动单元测试。

  3. 配置 GitHub Actions 工作流过程,以使用本地部署的基础结构状态和计划测试 IaC。

  4. 配置 GitHub Actions 以扫描代码质量和安全问题。 创建自己的自定义 GitHub CodeQL 查询来分析 IaC 模板并检测潜在的安全漏洞。 如果检测到漏洞,GitHub 会向组织或存储库所有者和维护者发送警报。

  5. IaC 工具通过定制大小、实例计数和其他属性来预配和修改每个环境的资源。 可以在预配的资源上运行 IaC 的自动化集成测试。

  6. 需要手动更新基础结构时,提升指定管理员的访问权限以执行修改。 修改后,将删除提升的访问权限。 还应记录 GitHub 问题,以便对 IaC 进行对帐。 对帐步骤和方法取决于特定的 IaC 工具。

  7. SecOps 持续监视和防御安全威胁和漏洞。 Azure Policy 强制实施云治理。

  8. 检测到异常时,会自动记录 GitHub 问题,以便可以解决该问题。

组件

  • GitHub 是用于版本控制和协作的代码托管平台。 在此体系结构中,它将存储 IaC 模板,并充当用于开发、测试和治理工作流的中心 存储库

  • GitHub Actions 是持续集成和持续部署(CI/CD)自动化工具,可让工作流直接从 GitHub 存储库生成、测试和部署代码。 在此体系结构中,GitHub Actions 自动执行 IaC 管道的单元测试、安全扫描和基础结构预配。

  • GitHub 高级安全性 是一套安全功能,包括静态分析和 GitHub 中存储的代码漏洞检测。 在此体系结构中,它通过扫描模板并引发有关配置错误或风险的警报来增强 IaC 安全性。

  • CodeQL 是一个语义代码分析引擎,它使自定义查询能够检测代码中的漏洞和配置错误。 在此体系结构中,CodeQL 扫描存储库项目,以确定部署前的潜在安全问题。

  • Terraform 是由 HashiCorp 开发的开源基础结构自动化工具,可用于跨云环境进行声明性预配。 在此体系结构中,Terraform 基于 IaC 定义预配和修改 Azure 资源,并支持测试驱动开发工作流。

  • Microsoft Defender for Cloud 是一个安全管理平台,可跨混合云工作负载提供威胁防护。 在此体系结构中,它会持续监视部署的基础结构是否存在漏洞。

  • Microsoft Sentinel 是云原生安全信息和事件管理(SIEM)和安全业务流程自动响应(SOAR)解决方案,它使用 AI 和分析来检测和响应威胁。 在此体系结构中,Microsoft Sentinel 监视基础结构活动,并在检测到异常时引发警报或 GitHub 问题。

  • Azure Policy 是一项治理服务,用于跨 Azure 资源强制实施规则和合规性。 在此体系结构中,Azure Policy 根据组织和工作负荷标准验证 IaC 部署,并阻止不符合配置。 例如,如果项目即将部署具有无法识别 SKU 的虚拟机,Azure Policy 会向你发出警报并停止部署。

  • Azure Monitor 是一个遥测和可观测性平台,用于从 Azure 资源收集性能指标和活动日志。 在此体系结构中,Azure Monitor 会检测基础结构中的异常情况,并触发警报,以便会审和修正可以启动。

方案详细信息

从概念上讲,适用于 IaC 的 DevSecOps 类似于 Azure Kubernetes 服务(AKS)上的应用程序代码 DevSecOps。 但是,你需要一组不同的管道和工具来管理和自动化 IaC 的持续集成和持续交付。

如果采用 IaC,务必在开发代码时创建自动化测试。 工作负载缩放时,这些测试可降低测试 IaC 的复杂性。 可以使用本地基础结构配置状态(如 Terraform 状态)和 测试驱动开发计划。 这些配置状态模拟实际部署。 可以使用 Azure Resource Graph REST API 针对实际基础结构部署运行 IaC 的集成测试。

PaC 是交付符合法规和公司治理的基础结构的另一个重要方法。 可以将 PaC 工作流添加到管道中以自动化云治理。

在开发阶段早期保护基础结构可降低配置错误的基础结构的风险,这些基础结构在部署后暴露了攻击点。 可以通过使用 GitHub 的 CodeQL 扫描基础结构代码中的安全漏洞,集成 Synk 或 Aqua Security tfsec 等静态代码分析工具。 此过程类似于静态应用程序安全测试。

部署基础结构并运行时,可能难以解决云配置偏移问题,尤其是在生产环境中。

设置专用的服务主体来部署或修改生产环境的云基础结构。 然后,删除允许手动配置环境的其他所有访问权限。 如果需要手动配置,请提升指定管理员的访问权限,然后在更改后删除提升的访问权限。 应将 Azure Monitor 配置为引发 GitHub 问题,以便开发人员能够协调更改。 如果可能,请避免手动配置。

请务必持续监视云环境是否存在威胁和漏洞,以帮助防止安全事件。 可以使用威胁防护和 SIEM 工具来检测异常流量。 这些工具会自动提醒安全管理员并引发 GitHub 问题。

可能的用例

你是 IaC 开发人员中心团队的一员,为虚构的公司 Contoso 使用多云战略。 你希望使用 DevSecOps for IaC 将云基础结构部署到新的 Azure 登陆区域,以帮助确保部署的安全性和质量。 你还希望跟踪和审核对基础结构的所有修改。

作者

Microsoft维护本文。 以下参与者撰写了本文。

主要作者:

若要查看非公开的LinkedIn个人资料,请登录LinkedIn。

后续步骤