策略即代码是一种将规则和约束(包括安全、合规和组织策略)表达为机器可读代码的方法,可在 IT 架构和 DevOps 管道中自动执行。
不再依赖人工检查合规性或记住安全规则,这些规则以可执行逻辑的形式存在,每次开发者或系统提出变更或请求时都会运行。如果有人提交变更,策略引擎会根据编码的规则自动评估该变更,并予以允许、拒绝或标记。
这一过程将策略管理实践从静态文档转向嵌入软件交付管道中的、持续执行的活动控制面。
基于代码的规则有助于确保相同的策略以可重复、可扩展的方式在所有地方应用。策略引擎可以在构建或部署期间于数秒内运行自动化检查,缩短反馈周期,帮助 DevOps 团队避免后期出现安全或合规意外。
PaC 使企业能够改善整体网络安全态势,并保持对行业和监管标准的合规性。此外,将策略当作代码来对待,与更广泛的“一切皆代码”转型相一致,该转型将基础设施请求等事物转变为可审查的代码文件,开发团队可以围绕这些文件开展协作。
通过 Think 时事通讯,了解有关 AI、自动化、数据等方面最重要且最有趣的行业趋势。请参阅 IBM 隐私声明。
策略即代码工具使开发者能够将可执行代码写入运行时环境和持续集成/持续交付 (CI/CD) 管道,因此每次变更都会自动接受合规性检查。
从技术上讲,大多数 PaC 设置都遵循相同的核心步骤:
策略检查可以发生在软件开发生命周期 (SDLC) 的任何节点,从代码集成到线上生产环境与监控。
因为策略是代码,它们也可以像任何其他软件制品一样对待。
开发团队可以编写自动化测试,将样本输入送入策略并验证其返回的决策,从而在策略变更时加快反馈循环。
当策略被编码后,开发人员可以将公共逻辑提取为可复用的模块或函数。多个高层级策略就可以调用共享的策略,而不必在各处重复条件。
开发人员还可以重命名、重构或将大型策略拆分成更小的策略,而不改变其行为,就像将一个大型应用函数重构为多个小函数一样。
这些能力使团队能够将现有的软件工程实践应用于治理逻辑,从而帮助他们在 IT 架构扩展和演进的过程中保持安全与合规要求。
假设某公司 X 想实施一项“仅 HTTPS”策略,要求所有 Web 服务都必须使用 HTTPS,而不是普通的 HTTP。 为了将该策略代码化,一位平台工程师编写了一条简单的规则,内容如下:
工程师将此策略文件放在与应用程序相同的代码仓库中的“policies”文件夹内,并开启一个拉取请求来添加该策略。该拉取请求会触发对策略文件的自动语法检查,并由另一位工程师进行代码审查。只有策略通过了必要的测试,它才会被合并到主分支。
在持续集成 (CI) 管道中,所有策略文件都会从“policies”文件夹加载到策略引擎。策略引擎读取该策略,将其转换为内部表示形式,并编译成紧凑的低级形式。这种紧凑形式使引擎能够针对管道检查的每个服务快速回答“允许还是拒绝?”
无论文件格式如何,CI 作业会获取现有配置文件,提取重要字段(名称、协议、端口),并为每个服务构建一个简单的 JSON 描述。
调用方通过发送标准化服务描述作为输入,并指明应应用“仅 HTTPS”策略包,向策略引擎请求决策。
策略引擎随后根据规则评估输入。它检查服务的协议字段。如果协议是 HTTP,就意味着输入匹配策略中的“拒绝”条件。引擎会指示该变更应被拒绝,并生成一条消息,告知开发者该服务必须使用 HTTPS 而不是 HTTP。如果服务使用 HTTPS,则不满足任何拒绝条件,引擎会指示该变更被允许。
然后,策略引擎将规则评估结果汇总为该服务的单一决策对象。决策对象通常会指明总体决策是“允许”还是“拒绝”,以及问题的严重程度(高、中、低)。它们还包含一个消息列表,解释输入被拒绝的原因以及引擎在评估过程中发现的所有警告。如果一切合规,决策对象会指示该变更被允许,并仅附带信息性说明(或完全不包含任何消息)。
最后,CI 工具执行该决策。如果决策是“拒绝”,该变更将无法合并到主代码分支。工程师会看到一条错误消息,指出该服务必须使用 HTTPS 并进行特定的修改。如果决策是“允许”,制品将被打包并部署,CI 管道照常继续。
策略即代码源于现代 DevOps 和云工程中更广泛的“一切皆代码”运动。
最初,基础设施即代码 (IaC) 是那次重大转变。团队不再让系统管理员通过用户界面点击操作或遵循运行手册,而是用声明式代码文件来描述服务器、网络和其他资源。这些文件存储在版本控制系统中,并通过自动化管道进行应用。
随着企业看到其好处,这种方法扩展到了 IT 架构的其他组件。应用程序配置转向了基于代码的方法。CI/CD 管道变成了存放在代码仓库中的脚本。监控和告警规则也开始以代码形式存在。这些实践合在一起被称为“一切皆代码”。
“一切皆代码”的核心理念是,如果系统的某个部分可以被描述,就应该被描述为代码,并像管理软件应用一样进行管理。
PaC 本质上是将该理念应用于规则、治理和合规领域。传统上,策略存在于 PDF 和 wiki 中,或由委员会决定,并由人工执行。在发布周期缓慢且基础设施相对静态的情况下,这种流程是可行的。
随着云原生和微服务架构成为主流,团队开始每天多次部署代码,人工流程无法跟上。PaC 通过以机器可读的格式表达策略来应对这一挑战,因此它们可以在 Git 中进行版本控制、像代码文件一样接受审查、在 CI 中进行测试,并在管道或运行时自动执行。
策略即代码是一种像管理软件代码一样管理 IT 策略的实践。基础设施即代码 (IaC) 与此类似,但侧重点不同。它使工程团队能够使用应用程序代码来定义和管理 IT 基础设施 。
IaC 让开发者能够通过编写代码来描述虚拟机 (VM) 和负载均衡器等网络资产的期望状态,而不是手动创建和配置这些资产。然后,IaC 工具会获取这些代码,并创建或修改指定的资源。
IaC 使基础设施的扩展和自动化变得容易得多。如果团队需要更多服务器,他们只需更改代码中的一个数字(例如,将实例数从六个改为九个)。自动化工具会处理供应这些额外资源的细节。
从高层次来看,IaC 规定应存在哪些基础设施以及应如何配置,而 PaC 则侧重于基础设施必须遵守的规则和约束。IaC 代码创建并配置资源,而 PaC 代码有助于确保这些资源(及其使用方式)遵循既定的安全要求、合规标准和运维护栏。
在许多现代 IT 架构和 CI/CD 设置中,IaC 与 PaC 提供了互补的益处。IaC 自动执行资源供应,而 PaC 在此基础上添加自动化治理。
当开发者更改 IaC 文件时,PaC 引擎可以检查新的计划或配置。如果一切符合既定策略,变更会被放行并继续,基础设施得以更新。如果有内容违反了规则,管道就会失败,在问题修复之前不会部署任何内容。
DevSecOps 旨在将安全与合规嵌入到 DevOps 生命周期中,而不是在最后才附加进去。这是一种在软件开发生命周期的每个阶段都优先考虑并执行安全流程的开发方法。
PaC 通过以下方式支持 DevSecOps 实践:
PaC 通过将安全检查移到开发流程的最早阶段,帮助团队实现安全左移,而不是等到部署后再运行检查——那时问题可能已经影响到用户。如果开发者引入了有风险的配置或不安全的模式,自动化策略可以帮助检测问题并使构建失败。
PaC 工具通过将安全规则直接嵌入 CI/CD 管道和运行时系统来自动执行策略,因此每次代码或基础设施变更时都会自动进行检查。不再依赖人工记住每一条安全标准并手动审查每一次变更,系统会一致地评估变更,确保不会意外跳过任何步骤。
PaC 帮助开发者在保持部署速度的同时,不牺牲一致性和安全性。它在每个环境、每个阶段(开发、测试、预发布和生产)都运行相同的策略定义。此功能使团队能够频繁发布,因为他们可以相信同一套规则在所有地方都得到应用。这也有助于他们避免不同环境之间出现配置漂移或对规则有稍许不同解读的情况。
PaC 将应用程序安全策略视为存储在版本控制系统中的任何其他代码制品。开发、运维和安全团队都可以通过熟悉的工作流(代码审查、分支策略)来审查、讨论和更新策略,这使得策略讨论更透明,也更融入日常开发工作。
策略即代码在企业 IT 架构中有广泛的应用。
PaC 可以表达细粒度的授权逻辑,定义谁可以在什么条件下对哪些资源执行哪些操作,所有这些都集中在一个可测试的策略层中。
例如,团队使用 PaC 来详细规定哪些用户角色可以访问敏感的应用程序编程接口 (API) 和端点,以及可以使用哪些 HTTP 方法。不再是“管理员可以访问系统”,开发者可以规定“具有角色 X 的用户可以在 A 到 B 的时间段内对资源 Z 执行 Y 操作”。
传统上,如《健康保险流通和责任法案》 (HIPAA) 之类的监管要求存在于冗长的文档中。人员阅读这些文档,并尝试将其转换为配置和检查清单。
通过 PaC,团队可以将这些高层要求编码为计算机能够评估的规则。这些规则可以在不同环境间共享和复用,当法规发生变化时,只需更新相应的规则一次,就会自动应用到部署了该策略的所有地方。
此外,每当策略引擎运行合规检查时,PaC 都会创建机器可读的日志文件,帮助团队维护详细的审计跟踪。每次评估都可以生成实时日志或指标,指明哪些系统通过了,哪些失败了以及系统失败的具体原因。这些结果会输入到仪表板和报告中,按系统、账户或环境显示合规状态。
没有 PaC 时,团队很容易过度配置资源(大型实例、大容量磁盘、大量副本),直到月度成本报告显示激增时才注意到。PaC 扭转了这一局面。规则在资源创建之前或创建时进行评估,因此成本低效的选择可以被立即阻止或标记。
例如,如果有人试图在测试环境中启动一个大型实例类型,策略可以拒绝该变更并返回错误,说明只允许使用较小的规模。这种方法让开发人员能够快速行动,同时仍然遵守预算限制。
在 Kubernetes 中,开发者向 API 服务器提交清单(描述他们希望 Kubernetes 创建什么以及期望其如何行为的文件)以创建 Pod、部署和其他资源。
准入控制器和策略引擎位于 API 服务器之前,检查每个清单所发出的 API 请求。它们应用 PaC 来决定是允许、拒绝还是变更传入的资源。这样一来,治理在集群的“门口”自动进行。
当组织运行多个集群时(例如,按区域或按业务单元),PaC 使他们能够在各处应用相同的治理规则。同一个策略仓库可以同步到许多集群,因此每个集群都强制执行相同的资源限制、镜像规则和元数据要求。
开发人员和安全专业人员正在探索策略即代码,将其作为一种创建分层护栏模型的方法,该模型涵盖 AI 或智能体工作流的整个生命周期。尽管该实践仍处于新兴阶段,但初步研究已经揭示了 PaC 在 AI 工作流中的许多可能应用。
PaC 有助于在 AI 的推理与决定其实际允许执行哪些操作的系统之间建立清晰的分离。AI 工具可以提出操作或计划,但策略引擎会在触及任何底层系统之前,根据编码规则评估这些提议。
在输入阶段,PaC 可以帮助过滤或转换用户提示、编辑敏感数据、执行租户隔离并阻止已知的攻击模式。在规划期间,PaC 可以要求 AI 智能体生成结构化的计划,并在允许执行之前,根据允许的工具、操作和风险条件验证每一步。
在执行时,每次工具调用或 API 调用都可以由策略执行层进行检查。该层决定是允许、拒绝还是修改某个操作,或者将其升级给人类。执行之后,策略可以驱动日志记录、审计跟踪、保留规则以及对模型输出的后过滤,以帮助确保响应符合必要的要求。
利用 AI 和自动化的强大功能,主动解决整个应用程序堆栈中的问题。
使用开发运维软件和工具,在多种设备和环境中构建、部署和管理云原生应用程序。
通过我们的云咨询服务持续实现应用现代化,加速业务敏捷性与增长——支持任意平台部署。