政策即代码:2023年如何理解和实施
政策即代码(PaC)是一种现代方法,它在自动化、效率、协作等方面为实施团队带来许多优势。
您可能已经将组织政策制定并存储在数据库中。
但是,您有多经常跟踪对它们所做的更改以及它们是否被正确应用?
我理解要跟踪一切是很困难的,尤其是随着规则和法规的变化。
然而,如果政策没有正确实施,可能会对组织造成损害,例如安全和智能。
为此,如果您将政策编码并以文本文件形式呈现,每个人都更容易遵循它们。
这就是政策即代码所能带给您的,而且还能让您跟踪对政策的更改以及它们的实施情况,还有助于维护安全性和合规性。
因此,让我们了解一下政策即代码,它的好处以及如何在您的组织中实施。
什么是政策即代码?
为了更好地理解政策即代码,让我们定义一下在这个上下文中政策是什么。
政策:政策可以是管理IT流程或操作的规则、指令或条件。它定义了一个流程必须始终满足的标准。
例如,给定的一段代码必须符合适用的政策,以便通过IT安全政策并进行部署。
政策可以是不同类型的:运营政策、安全政策和合规政策。
政策即代码:政策即代码(PaC)是一种使用代码来定义、共享、执行和更新政策的政策管理方法。它要求团队使用高级编程语言(如Python、Java、YAML等)根据使用的PaC工具编写政策。
PaC通过利用基于代码的自动化加速了组织的流程,而不是依赖手动的政策管理方式。它还使不同领域的利益相关者(如IT安全和开发)更容易理解政策。
例如,如果开发人员想要进行一些更新,他们可以修改当前的代码,并在需要时与他人共享。这样他们就可以查看他们的政策,并确保不偏离政策。
政策即代码 vs 基础设施即代码
政策即代码(PaC)在概念上与基础设施即代码(IaC)类似,但它们并不相同。
现在,企业从开发到部署都使用现代技术、大量工具和资源。这可能包括本地基础设施、私有和公共云、虚拟机、软件即服务(SaaS)模型和工具等。
除了使用各种资源管理和编排工具外,企业还大量依赖云提供商进行供应。这也需要重要的专业知识来集成和使所有组件易于通信、进行定期修补和解决安全问题。
现在的问题是,管理、审查、审核和批准基础设施的更改需要大量的时间和资源,更不用说在供应商、软件和硬件上花费的金钱了。
对此的一个很好的解决方案是IaC。IaC利用基于代码的文件来自动化供应和配置过程。这几乎是每个IT操作团队的常见做法。
另一方面,PaC通过弥合基础设施即代码和IaC之间的差距来扩展IaC。PaC有助于改进所有部署的安全性、合规性和安全性运营。此外,它的用例比IaC更广泛;PaC在整个软件开发生命周期中被使用。
此外,PaC工具支持多种集成和平台,可以限制授权用户的访问权限,并按照最低特权授予访问权限。策略还可以通过黑名单和白名单定义边界,并监控基础架构,以确保在整个基础架构生命周期和云中的合规性。
策略-代码是如何工作的?
策略-代码实际上是一个可读的、脚本化的文件,其中详细描述了如何完成某个任务的所有条款和条件。例如,它可以概述应用程序的测试策略或其创建、部署和维护策略。
策略是使用高级编程语言(如Java、Python等)创建的,与组织中使用的不同工具兼容。
编写为代码的策略然后输入到一个带有查询的系统(策略引擎)中。在将策略代码作为输入后,策略引擎处理代码并输出查询结果。
接下来,根据当前策略创建一个决策。它有助于确定适当类型的软件以及测试团队应该在何时、在哪些领域进行测试。
此外,策略通过对CI流水线发出的API调用来实施,确保您可以在不破坏任何代码的情况下轻松运行安全测试。在创建策略-代码时,请考虑以下几点:
- 检查依赖关系,确定测试是否会破坏您的部署或构建。将问题记录在问题跟踪工具中。
- 查看上次更改是何时以及其程度。还要确定是否需要进行额外的测试或代码审查。
- 找出软件是否包含敏感数据,其攻击面是什么样的,以及可能导致停机的任何风险。
要工作,策略-代码利用三个元素:
- 策略:PaC使用给定策略本身,并在其中放置代码以便进行决策。
- 数据:PaC使用关于给定软件应用程序、环境或服务的数据。
- 查询:查询基于可用数据和输入到策略引擎中的策略,触发决策过程。
为什么需要策略-代码?
传统的策略执行过程是半自动化或手动化的。在这里,软件开发团队在其应用程序中嵌入策略执行代码。
他们根据自己的意愿实施代码,因为没有定义的框架。结果,很难审查这些代码,并且该过程也难以扩展。
传统策略执行的另一个问题是,策略经常根据不断变化的条件进行更新,这很难跟踪和实施。而且,如果没有定义框架,不同的团队可能会以不同的方式解释和实施策略。
此外,现代企业需要遵守诸如PCI DSS、SOC2等的法规,这些法规是手动执行或作为整个业务逻辑的一部分。这些代码片段是用各种语言编写的,由不同的开发团队管理,并存储在代码库中。因此,更改某些内容可能需要很长时间,从几周到几个月,才能实施。
所有这些可能导致混淆、错误、资源浪费以及繁琐和耗时。但是,如果您实施策略-代码,您将获得自动化定义策略、创建和验证测试用例,并最终强制执行它们的力量。
以下是使用策略-代码的好处,提醒您实施它的原因。
自动化
策略即代码借助各种工具实现自动化。这些工具使用户能够自动化重复、繁琐的任务,例如创建、定义、管理和更新策略。此外,您甚至可以使用CI/CD工具自动化策略测试过程,并确保在部署之前一切正常。
测试和验证
策略是代码,您可以使用一些自动化工具轻松验证其行为和语法。这也通过链接_5系统促进了自动化测试。它将帮助您检测策略违规和漏洞,并确定在部署之前策略是否实施良好。
此外,如果将其与版本控制系统(VCS)结合使用,您可以验证系统行为是否符合预期。您可以通过图形用户界面(GUI)设置策略,并通过拉取请求测试它们。
沙箱化
策略即代码提供沙箱安全,以将软件解决方案彼此隔离。这有助于防止安全风险。由于沙盒涉及高度自动化,有必要确保这些自动化系统不执行危险活动。这使得手动验证不切实际。因此,如果您想要安全地实现沙盒化,应用策略即代码变得至关重要。
速度和准确性
自动化策略执行过程比手动方式更快。它将节省大量时间,您可以将其用于其他重要任务,而不是重复的乏味任务。此外,自动化任务几乎没有错误或失误,这提高了任务和产品的准确性。
编码和可见性
通过将策略条款表示为代码,可以直接在代码中概述策略数据和逻辑,并通过注释进行增强,而不是口头学习策略。这使得利益相关者更容易理解给定策略的逻辑和其他信息,因为他们可以轻松查看代码并提出一些更改建议。
因此,这种增强的可见性还消除了再次联系其他成员的需求,加速了工作流程。
版本控制
如果将策略存储为文本文件,跟踪、管理和控制策略的版本变得很容易。如果需要更新任何策略,只需修改当前代码。但是,如果出现问题,您仍然可以回滚到以前的版本。
此外,团队成员还可以检测策略的更改和时间。这意味着您将从版本控制系统(VCS)的功能中受益,例如历史记录、拉取请求、差异等。
协作
遵循一种定义的编写策略和管理策略的方式,促进了外部和内部团队之间的协作。策略即代码将开发、测试、版本控制和安全等不同的团队和部门汇集在一起。
例如,测试和开发团队可以共同努力,确保他们创建的代码具有最佳的质量,通过必要的测试并准备好部署。
此外,团队还可以利用collaboration tools、版本控制和其他自动化工具进行协作。他们可以查看代码、提出建议、进行代码改进的评论、处理反馈、监控代码安全性等等。所有这些都将有助于加快发布速度。
代码作为策略的用例
代码作为策略的各种用例包括:
#1. 基础设施供应
代码作为策略可以自动化基础设施资源(如服务、数据库等)的供应,用于操作、合规和安全。除了资源供应,它还可以包括标记网络设置、防火墙和其他资源。
按单位或团队对资源进行标记可以帮助您有效管理资源。此外,代码作为策略可以用于创建允许的所有IP地址列表,并进行授权,以便您可以从外部IP地址访问应用程序或页面。
此外,代码作为策略对于不同环境(如开发、沙盒、生产和演示)的不同类型的资源供应非常有用。这样,您可以为所有这些环境配置适用的机器。
#2. Kubernetes控制
如果您在流程中使用Kubernetes,您可能希望将策略配置为代码。您可以为节点、命名空间、Pod等有效配置策略。
此外,您可以设置CPU和内存限制以创建容器和发出请求。这有助于防止内存溢出(OOM)和资源占用。
因此,应用程序始终可用且运行得最佳。建议为最大和最小副本数设置策略,以便轻松满足需求,而不会导致过度资源消耗或短缺。
#3. 访问和授权控制
通过创建一个规定了访问服务的授权规则的策略,您实际上增加了其安全性。它将对哪些用户可以访问哪些资源进行规定。您还可以突出显示允许的访问方法,以防止任何违规行为。
例如,您可以制定只允许使用HTTPS连接的策略。这将有助于提高链接的安全性。另一个例子是设置策略来拒绝您认为不可信的特定类型的服务。
#4. 审计和合规
现在的组织需要遵守适用的政府和行业标准。这可能包括HIPAA、GDPR、PCI DSS等规定。这些标准要求您遵守有关数据存储、计算和网络的规则。
问题是这些规则可能随时根据情况发生变化,跟踪它们可能会很困难和烦琐。
通过代码作为策略,您可以将这些规则编码化并轻松推送到软件开发流程中。它将确保所有策略、输入、更改和查询结果都有记录,这样审计工作就更加容易。这样,您可以更好地满足合规规定,并避免处罚。
#5. 费用控制
控制和管理费用是管理基础设施的重要部分。为此,您可以在资源标记、注释、分发机器类型等方面实施代码作为策略。
- 如果按资源团队或部门进行标记,您可以生成显示支出情况的报告。
- 通过分配特定类型的机器和优化代码,您可以创建报告,并让利益相关方决定优化基础设施资源消耗的最佳方式。
- 您可以设置策略来限制基础设施环境(如生产、开发、沙箱、暂存等)的每个project cost。
如何实施策略即代码
现在,如果您发现策略即代码对您的组织有益,并且想知道如何实施它,请继续阅读。
为了以最简单的方式利用策略即代码,您可以选择在需要此概念的领域(如安全、合规性、预置等)原生支持策略即代码的质量工具。但在选择之前,请考虑您的使用案例、组织战略以及该工具的可扩展性、支持模型、集成和其他功能。
一些最佳的策略即代码工具包括:
#1. 开放策略代理
Open Policy Agent 是一个通用的开源策略引擎,可以统一您的整个策略执行。它适用于任何领域,通过提供策略即代码实现的通用框架来工作。它支持Kubernetes、Terraform、AWS、Docker、Envoy、GKE等服务。
#2. Prisma Cloud
Prisma Cloud 用于安全性,并允许您通过代码定义所有安全策略。您可以自动扫描策略文件,然后在实际部署代码之前对其进行审计以查找漏洞或错误配置。其他用于安全性的策略即代码工具包括Checkov、Bridgecrew等。
#3. SecurityRAT
SecurityRAT 是由OWASP提供的开源工具,在规划阶段非常有用。它将帮助您将IT安全需求以代码形式创建并集成到项目中。这还使得审计更加容易,从而有助于满足合规性要求。
#4. Sentinel
Sentinel 是一个策略即代码框架,可嵌入并能够启用基于逻辑的、细粒度的策略决策,您可以将其扩展到外部源信息以做出明智的决策。它在开发和测试阶段非常有帮助。
其他好用的工具包括TruffleHog、Git-Secrets、Gitty Leaks、InSpec、Terraform等。
结论
策略即代码在资源预置、访问控制、成本控制、审计和合规性以及安全性等方面对企业非常有帮助。
希望本文能帮助您理解策略即代码以及为什么您应该在组织中实施它,以及如何实施。
您还可以探索一些有趣的用于审计和管理的工具code quality。