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

DevSecOps 用于基础设施即代码 (IaC)

Microsoft Sentinel
Azure Monitor
GitHub

解决方案构想

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

此解决方案构想展示了一个使用 GitHub 实现基础设施即代码 (IaC) 的 DevSecOps 流程。 通过将基础结构定义视为事实来源,工作负载可以在部署生命周期内自动执行验证、安全扫描、治理和合规性。

标准化部署模式、AI 辅助开发、代码安全性和配置扫描、策略驱动的治理和生命周期管理有助于提高安全性、提高运营效率、减少配置偏移并提供可靠的云环境。

体系结构

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

下载此体系结构的 Visio 文件

数据流

以下数据流对应于上图:

  1. 开发人员使用 AI 辅助的测试驱动开发来创建和维护基础结构代码、可重用模块、测试和部署工作流。 他们在定义基础设施的同时,开发单元测试、集成测试和策略即代码(PaC)检查。

  2. 开发人员在提交拉取请求之前,会将 IaC、测试和检查项提交到 GitHub 仓库,以验证质量、安全性和合规性。

  3. 拉取请求在 GitHub Actions 中触发自动测试。 此工作流在部署之前生成并验证部署预览。

  4. GitHub高级安全性提供存储库级安全检查。 检查包括代码扫描或依赖项评审工作流(如果适用),并在存储库上启用机密扫描和推送保护以检测公开的机密。

  5. 配置的 DevOps 安全操作扫描基础结构定义中的错误配置,并将结果报告给 Microsoft Defender for Cloud 中的 DevOps 安全性。 Defender for Cloud将这些发现与云安全状况见解相关联,以帮助在部署之前确定修正优先级。

  6. 部署管道通过使用来自已批准基础设施定义的可重用 IaC 构件(例如 Azure 验证模块(AVM)),来预配或更新 Azure 资源。 Azure部署堆栈有助于保持已部署资源和源代码控制定义之间的一致性,部署拒绝设置有助于通过限制带外更改来减少配置偏差。 通过源代码管理记录并协调已批准的手动更改,以保留 Git 作为权威事实来源。

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

  8. 已配置的自动化会在监控或安全服务检测到异常时创建 GitHub Issue。 例如,Defender for Cloud可能会标识违反安全要求的公开资源。 Azure Monitor 操作组或 Microsoft Sentinel 自动化规则可以调用 Azure 逻辑应用 工作流来创建 GitHub 议题,以供审查和修正。

组件

  • GitHub 是用于版本控制和协作的代码托管平台。 在此体系结构中,GitHub将 IaC 模板存储在中心存储库中,以便通过GitHub Copilot进行开发、测试、治理工作流和 AI 辅助开发。

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

  • GitHub高级安全性提供存储库级安全功能,包括机密扫描和依赖项漏洞检测。 在此体系结构中,GitHub高级安全有助于在合并和部署代码之前识别公开的凭据、易受攻击的开源依赖项和其他存储库安全风险。

  • Defender for Cloud 中的 DevOps 安全性集中管理 DevOps 安全发现结果,并将其与云上下文关联起来。 在此体系结构中,已配置的Microsoft 安全 DevOps GitHub Action会扫描 IaC 工件中的错误配置,并将发现结果报告给 Defender for Cloud,以便进行优先级排序和修正。

  • Azure 已验证模块 (AVM)是由微软维护的预构建 IaC 模块。 在此体系结构中,工作负荷使用 AVM 部署可重用的资源和模式模块,这些模块与 Azure Well-Architected Framework 指南一致。

  • Azure部署堆栈使工作负载能够将部署的资源作为单一生命周期管理单元进行管理。 Azure部署堆栈有助于保持已部署资源和源代码控制的基础结构定义之间的一致性,支持生命周期管理,并通过应用治理控制和拒绝设置来减少配置偏移。

  • Defender for Cloud是一个安全管理平台,可跨混合云工作负载提供威胁防护。 在此体系结构中,它持续监视部署的基础结构是否存在漏洞和威胁,并使用运行时安全见解补充 DevOps 安全发现。

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

  • Azure Policy根据组织和工作负荷标准评估Azure资源。 根据分配的策略效果,Azure Policy可以审核、修改、修正或拒绝不符合的配置。 例如,具有 deny 效果的策略定义可能会阻止部署 SKU 不在允许范围内的虚拟机。

  • Azure Monitor 是一个遥测和可观测性平台,用于从 Azure 资源收集性能指标和活动日志。 在此体系结构中,Azure Monitor 会检测基础设施中的异常情况并触发警报,从而启动分类处置和修复流程。

方案详细信息

采用 IaC 时,在开发代码时创建自动测试。 生成部署计划和基础结构配置状态以模拟实际部署。 测试驱动开发可在工作负载规模扩大时降低测试 IaC 的复杂性。

使用Azure SDK和 API、Azure Resource Graph、特定于工作负载的验证工具或自动化测试框架,针对部署Azure资源运行集成测试。 这些测试有助于验证资源配置、连接性、安全控制措施和操作准备情况。

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

在开发生命周期早期保护基础结构可降低部署后的安全性和合规性问题的风险。 将 GitHub 高级安全性和 Defender for Cloud DevOps 安全性集成到 DevSecOps 工作流中,以识别 IaC 代码中的漏洞、代码质量问题、策略冲突、机密暴露和配置风险。 此方法类似于应用程序代码的静态应用程序安全测试(SAST)。

在部署基础结构并运行基础结构时(尤其是在生产环境中)时,配置偏移可能难以解决。 将 GitHub Actions与 OpenID Connect(OIDC)和Microsoft Entra工作负荷标识联合身份验证配合使用,以预配和管理Azure资源,而无需存储凭据。 通过最小权限的 Azure 基于角色的访问控制(Azure RBAC)分配和环境保护控制来限制部署权限。 若要进行异常的手动更改,请使用实时特权访问、记录更改,并自动创建GitHub问题以通过源代码管理协调基础结构定义。 尽可能避免手动配置,并将 Git 视为基础结构状态的权威源。

为了从源头帮助防止配置偏差,当模板中定义的一组 Azure 资源共享同一生命周期时,请使用 Azure 部署堆栈。 考虑 部署堆栈限制,并应用适当的拒绝设置来限制带外控制平面更改。 将 IaC 定义纳入源代码管理。

为了帮助防止安全事件,请持续监视云环境是否存在威胁和漏洞。 使用Defender for Cloud、Microsoft Sentinel、Azure Monitor和其他威胁防护和 SIEM 工具检测异常活动。 这些工具可以自动向安全管理员发出警报通知,并创建 GitHub Issue 以供调查和修复。

可能的用例

中心平台工程团队可以将可重用的GitHub Actions工作流、PaC 控件和Azure部署堆栈作为批准的黄金路径提供给应用程序、数据和 AI 团队。 GitHub Copilot可帮助开发人员创建基础结构定义、测试和部署工作流。 已配置的 Microsoft 安全 DevOps 操作会在部署前验证基础架构安全性和配置,并将发现结果报告到 Defender for Cloud 中的 DevOps 安全。 组织可以在维护治理、一致性和安全标准的同时加速基础结构交付。

金融服务、医疗保健、公共部门或受监管企业可以使用 DevSecOps for IaC 自动执行基础结构部署、策略实施、安全验证和合规性报告。 Azure Policy、Defender for Cloud、Microsoft Sentinel 和Azure部署堆栈有助于维护可审核的基础结构更改、减少配置偏差,并支持在整个基础结构生命周期内符合性。 GitHub 是所有基础设施变更和治理控制措施的权威依据。

贡献者

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

主要作者:

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

后续步骤