什么是政策即代码?

政策即代码是一种政策管理方法,在这种方法中,政策是通过代码来定义、更新、共享和执行的。通过利用基于代码的自动化,而不是依赖人工流程来管理政策,政策即代码可以让团队更快地行动起来,并减少因人为失误而造成错误的可能性。

与此同时,对安全等领域采用 "策略即代码 "的方法,可以用不同类型的利益相关者(如开发人员和安全工程师)都能理解的方式来定义和管理策略。

本页介绍了策略即代码的工作原理、其重要性以及如何在安全环境中利用它。

 

定义政策即代码

要理解 "政策即代码 "的含义,首先必须了解 "政策 "的定义。

在这种情况下,政策是指管理 IT 操作或流程的任何类型的规则、条件或指令。例如,策略可以是一条规则,规定必须满足哪些条件,代码才能通过安全控制并得到部署。或者,它可以是一套程序,在响应安全事件时自动执行。

政策即代码是指使用代码来定义和管理规则和条件。在 "策略即代码 "方法中,团队使用某种编程语言(如 Python、YAML 或 Rego)编写策略。具体语言通常取决于你使用的政策即代码管理和执行工具。

当工程师需要进行更新时,他们会通过修改现有代码来实现。他们还可以与其他人共享代码,让他们通过版本控制系统(VCS)了解自己的策略。最后但并非最不重要的一点是,他们可以使用政策即代码执行引擎来确保政策得到执行。执行引擎可以是独立的政策即代码,也可以内置到 更大的平台中。

 

政策即代码与基础设施即代码

政策即代码 "的概念听起来可能与 " 基础设施即代码 "或 IaC类似。IaC 使用基于代码的文件来自动完成基础设施的设置和配置,多年来一直是 IT 运营团队的常用做法。

IaC 有利于需要配置基础设施的 IT 运营小组,而 "政策即代码 "则可以改善安全运营、合规性管理、数据管理以及更多方面。

 

政策即代码的好处

与手动管理规则、条件和程序的替代方法相比,"政策即代码 "具有若干严重性优势:

  • 效率:当政策被写成代码时,它们可以在几乎无限的大规模范围内自动共享和执行。这比要求工程师每次都手动执行策略要有效得多。如果政策是用简洁明了的代码定义的,而不是用人的语言描述的,有些工程师对其的解释可能与其他人不同,那么更新和共享政策的效率也会更高。
  • 速度自动执行策略的能力还意味着 "策略即代码 "的运行速度比手动方法更快。
  • 可见度:当政策以代码的形式定义时,所有利益相关者都可以很容易地使用代码来了解系统内发生的事情。例如,他们只需检查哪些基于代码的策略已经到位,就可以审查警报或补救规则,而不必询问其他工程师并等待答复。
  • 合作:通过提供统一、系统的政策管理手段,政策即代码简化了协作。这不仅包括同一小组内部的协作,还包括不同类型小组之间的协作--尤其是开发人员(他们习惯于从代码的角度思考和工作)与其他领域(如安全或 IT 运营)专家之间的协作。
  • 准确性:当团队使用代码定义和管理策略时,就能避免在手动管理系统时出现配置错误的风险。
  • 版本控制:如果你跟踪不同版本的策略文件,当它们发生变化时,策略即代码可以确保在新的策略版本产生问题时,你可以很容易地恢复到较早的配置。
  • 测试和验证:当策略被写入代码时,就很容易使用自动审计工具对其进行验证。这样,"策略即代码 "就能帮助降低在生产环境中引入关键错误的风险。

 

如何使用 "政策即代码

目前,利用 "策略即代码 "的最简单方法是,无论你想通过 " 策略即代码 " 方法管理哪个域,都可以采用 原生支持 "策略即代码 "的工具

例如,在安全领域,Prisma Cloud、Bridgecrew 和 Checkov 允许小组使用 Code to Cloud 定义安全策略。它们还能自动扫描和审核策略文件,以便在部署前发现配置错误或漏洞。这种方法是这些工具简化 云安全态势管理的一种方式。

您可能还想了解 Open Policy Agent等工具,该工具旨在提供一个通用框架,将策略即代码应用于任何领域。然而,迄今为止,供应商对这种基于社区的 "策略即代码 "框架的采用仍然有限,这就是为什么寻找支持本机策略即代码的供应商工具是在安全或任何其他 IT 领域实施策略即代码方法的最简单途径。

 

政策即规范常见问题

基础设施即代码(IaC)是一种通过机器可读的定义文件,而不是物理硬件配置或交互式配置工具来管理和配置计算基础设施的方法。它使开发人员和 IT 专业人员能够通过代码自动管理、监控和配置资源,从而提高一致性并减少人工错误。IaC 支持云服务的可扩展性和灵活性,确保基础设施部署的可重复性和标准化。
合规性即代码 "是一种将合规性规范写入代码并集成到自动部署管道中的做法。它可确保 IT 基础设施和应用程序持续遵守监管和安全标准,并将合规性检查编入自动和可重复的验证流程。这种方法最大限度地减少了人为错误,降低了合规性审核所需的时间和精力。
安全即代码 "是指通过编纂安全策略和控制措施,将安全实践融入软件开发生命周期。它允许在 CI/CD 管道中自动评估和执行安全性,确保安全检查成为软件交付流程不可分割的一部分,而不是事后才想到。采用自动漏洞扫描仪和配置管理系统等工具,确保应用程序从开始到部署的整个过程都安全可靠。
配置管理是系统地处理系统变更的过程,其方式可确保长期的完整性。这涉及到对软件和硬件组件的记录维护和更新,确保系统配置的一致性,以及任何更改的可追溯性。Ansible、Puppet 和 Chef 等集中式配置管理工具可自动部署和运行基础设施,实现可扩展性和可靠性。
自动化脚本是无需人工干预即可执行任务的编码程序。它们对于自动化整个 IT 环境中重复而复杂的操作、提高效率和减少人为错误的可能性至关重要。在云计算中,自动化脚本用于配置资源、管理部署和协调工作流程,通常在 Terraform 等工具中使用,或通过 AWS CloudFormation 等云提供商脚本接口使用。
GitOps 是一个操作框架,它将用于应用程序开发的 DevOps 最佳实践,如版本控制、协作、合规性和 CI/CD 等,应用到基础设施自动化中。GitOps 的核心理念是将 Git 作为声明式基础架构和应用程序的唯一真实来源。有了以 Git 为中心的 CI/CD 管道,团队就可以提出拉取请求,加快并简化应用程序的部署和运营任务。
持续集成/持续部署(CI/CD) 是一种软件交付方法,它将自动化引入应用程序开发的各个阶段。CI/CD 的主要概念是持续集成、持续交付和持续部署。CI/CD 将常规代码变更整合到共享存储库中,自动运行测试,并将代码推送到生产环境。这种做法可以减少人工错误,缩短开发周期,提高软件质量。
不可变基础架构是一种管理 IT 资源上的服务和软件即部署的方法,其中的组件是替换而不是更改。基础架构一旦部署,就永远不会修改;相反,任何更新或更改都是通过用新版本替换服务器或容器来实现的。这种模式最大限度地减少了因配置漂移或人工干预造成的不一致和潜在安全漏洞。
代码安全 包括用于防范软件代码中的漏洞和防止未经授权访问或更改代码库的方法和工具。它涉及静态和动态代码分析、代码签名和使用安全编码标准等实践,以确保软件开发从一开始就高度重视安全性。
代码审计是一种全面分析,通过检查源代码来发现错误、安全漏洞或违反编程惯例的行为。系统地进行代码审计有助于维护代码库的健康、提高安全性并确保合规性。
政策实施是在 IT 环境中实施和确保遵守已定义政策的过程。它涉及积极管理访问控制、资源利用和操作行为,以确保所有行动都符合既定的安全政策和合规性要求。
声明式配置指定了系统的理想状态,但没有概述实现该状态的步骤。系统的底层管理工具负责执行必要的操作,以维持已宣布的状态。这种方法与命令式配置形成鲜明对比,后者要求用脚本或命令来描述达到所需状态的过程。
版本控制系统是一种跟踪文件更改的工具,它记录了文件的修改和修改人。它们对于协同软件开发至关重要,可让多个贡献者同时在同一代码库中工作,而不会覆盖彼此的工作。版本控制系统有助于回滚、分支和合并,并在合并贡献时帮助解决冲突。
防止配置漂移可确保基础设施的状态随着时间的推移与其定义的配置保持一致。通过将部署和操作流程自动化,并定期核对实际状态与期望状态,Puppet、Chef 和 Ansible 等防漂移工具可以检测并纠正差异,从而维护系统的完整性和安全性。
代码审查政策制定了标准和程序,以便在源代码并入主代码库之前,由同行对其进行系统审查。这些政策强制执行最佳编码实践,识别潜在的安全漏洞,并提高代码质量。它们通常规定审查员分配标准、审查范围以及批准或拒绝代码的条件。
策略定义语言(PDL)提供了一种正式的语法,用于编写规范系统行为、管理访问和执行合规性的策略。PDL(如开放式策略代理中使用的 PDL)能够在软件开发和部署的不同阶段清晰地阐明规则并自动执行策略,从而确保安全实践的一致应用。
基础设施即代码模板是用于自动配置 IT 基础设施的预定义脚本或文件。IaC 模板以 YAML 或 JSON 等语言编写,描述了应用程序所需的资源和配置,可在开发、测试和生产过程中实现一致且可重复的环境设置。
自动监管在持续集成和部署管道中集成了策略执行,确保更改自动遵守公司和监管标准。它采用的工具和做法可以监控 IT 环境,减少人工监督,并提供实时的合规性保证。自动化治理可快速识别和纠正偏离既定政策的问题。
上一页 什么是云原生安全?