作为一名程序员,你可能很早就学到:如果你发现自己一遍又一遍地编写相同的代码,那么你应该将该代码分成一个类或一个函数,以提高效率并使其更容易改变功能。如今,这个想法扩展到DevOps实践中,如基础设施即代码(IaC),其中技术堆栈的管理和供应被分离出来用于自动化和一站式访问。最近,出现了策略即代码,以提供将策略应用于多种目的和场景的自动化和易用性。

策略即代码:CNCF孵化项目Open Policy Agent_守护程序

Open Policy Agent(OPA)就是一个这样的策略即代码项目,该项目刚刚被CNCF接受为孵化级托管项目。根据声明,OPA是“一个开源的、通用的策略引擎,可以在整个堆栈中实现统一的、上下文感知的策略实施”,“比硬编码服务逻辑或ad-hoc特定于域的语言提供更大的灵活性和表现力。“


Styra的软件工程师和OPA的技术负责人Torin Sandall将这种去耦视为该项目的核心原则。


“该项目背后的核心思想之一是,你可以将策略决策与策略执行分开。 OPA为架构师、开发人员和安全从业者提供了一种非常好的方式,可以将安全策略表达为代码,然后在其上进行交付。“Sandall说, “你可以将它用于微服务,可以将它与API网关一起使用,可以将它与脚本和CI / CD管道一起使用。你可以在堆栈中的所有位置应用它来解决各种不同的策略相关问题。无论是访问控制和微服务环境,还是对容器化工作负载施加限制,OPA的任务都是相同的,即帮助大型组织对这些资源实施约束、保护或制定规则和治理。“


OPA通过使用JSON over HTTP的RESTful API提供通用语言兼容性,并且可以轻松部署而无需依赖关系。它可以作为守护程序与服务并行运行,或者对于使用Go编写的服务,OPA可以嵌入并且用作库,从而无需运行单独的守护程序。它还为用户提供了一个交互式shell,用于试验查询和数据集。


Sandall表示,OPA作为孵化级项目被接受,表明该项目已经取得了不小的进步,一些大型企业已经使用该技术。在CNCF孵化级别托管的其他项目包括OpenTracing、Fluentd、gRPC、rkt、CNI、Jaeger、Notary、TUF、Vitess、NATS、Linkerd、Helm、Rook、Harbor和etcd。


“在过去的一年里,在生产项目中使用的数目有了很大的增长。Netflix将该项目作为内部安全平台的一部分运行,Intuit和Capital One等公司正在将该项目作为生产中Kubernetes的入场控制项目运行。“Sandall说, “在生产中使用该项目的组织越来越多,以执行重要的策略。“


GitHub上的OPA存储库显示了与该项目于第三方技术的集成,例如Kubernetes、Docker和Istio等。


展望未来,Sandall表示,该项目将侧重于继续强化和优化项目核心,同时也将扩展开放支持,将OPA策略编译为可分发和嵌入的WebAssembly二进制文件。该项目最近还与Styra、谷歌和微软合作启动了Gatekeeper子项目,该子项目“将OPA与Kubernetes集成,以帮助管理员执行入场控制策略和审核集群以应对现有的策略违规行为”,并将附带一个标准的commune用例策略库,如注册表白名单或标签管理。