从混乱到清晰:引导政策引擎实现合规性

所有文章

欢迎回到我们博客系列的第二部分,我们将深入探讨 Valint 的强大功能。在本文中,我们将重点关注 Valint 的策略引擎及其在确保整个供应链合规性方面的关键作用。
在我们之前的博客文章中,我们概述了 Valint的设计原则.

策略引擎如何工作

Valint 的策略引擎按照一组规则运行,这些规则组织成策略,并根据从供应链收集的证据进行验证。让我们分解一下它的关键组件:

证据:旨在由策略自动使用的不可变对象。这些对象包含启用策略执行和满足合规性要求所需的元数据。证据内容包括有关工件、事件和设置的元数据,但也可以收集实际报告、配置或扫描。证据可以采用签名和未签名的形式。我们建议遵循 Intoto 认证规范 利用签名的 证明 和无符号格式,分别。

  • 证明(又名可验证的签名证据): 与特定相关的可验证证据 环境背景,使用某种形式的 PKI 签名来传达信任。

政策: 这些定义了您的供应链必须满足的要求,涵盖验证、合规细节和证据的最终裁决等各个方面。例如,组织可以有一个“容器镜像策略”

政策规则: 策略由规则组成,每个规则代表特定的合规性检查。示例包括签名和身份的验证、SBOM 组件的验证、是否存在严重漏洞的验证。按照前面的示例,“容器镜像策略”可以包含以下规则:

  • 强制执行图像签名。
  • 对图像发出警告,不要对特定标签进行投诉。

捆绑: 政策和规则的集合,可以作为一个整体方便参考。捆绑包提供了一种模块化且有组织的方式来管理和应用策略集作为代码。 Scribe 默认策略包发布于 https://github.com/scribe-public/sample-policies,大家可以参考一下。

将策略与 Valint 一起使用

Valint 使用户能够将策略作为来自公共或私有存储库的代码来使用,从而提供灵活性和自定义选项。首先,只需安装 Valint 并根据您的合规性需求定义您的策略。

安装方式: 首先使用提供的脚本安装 Valint。在终端中执行以下命令:

curl -sSfL https://get.scribesecurity.com/install.sh | sh -s — -t valint
curl -sSfL https://get.scribesecurity.com/install.sh | sh -s — -t valint

政策定义: 接下来,根据组织的合规性要求定义策略。创建一个 YAML 文件,例如 my_policy.yaml,并构造它来封装您想要的规则。以下是您的策略文件的示例:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
名称:my_image_policy 默认值:证据:签名:true 规则: - 使用:images/fresh-image@v1 with:max_days:100 - 使用:images/verify-labels-exist@v1 level:警告 with:labels:# 需要的图像被标记(Dockerfile LABEL 命令) - 维护者 # 需要维护者标签。 - org.opencontainers.image.source # 要求图像标有来源
名称:my_image_policy 默认值:证据:签名:true 规则: - 使用:images/fresh-image@v1 with:max_days:100 - 使用:images/verify-labels-exist@v1 level:警告 with:labels:# 需要的图像被标记(Dockerfile LABEL 命令) - 维护者 # 需要维护者标签。 - org.opencontainers.image.source # 要求图像标有来源
名称:my_image_policy 默认值:证据:签名:true 规则: - 使用:images/fresh-image@v1 with:max_days:100 - 使用:images/verify-labels-exist@v1 level:警告 with:labels:# 需要的图像被标记(Dockerfile LABEL 命令) - 维护者 # 需要维护者标签。 - org.opencontainers.image.source # 要求图像标有来源

在此示例中,我们定义了一个名为 my_image_policy,它要求证据工件必须经过签名,并且图像必须在过去 100 天内创建。此外,如果图像缺少特定标签,它还会发出警告。

随时结帐 其他规则 我们支持开箱即用。

证据创建: 在评估您的政策之前,您需要生成必要的证据。使用 Valint 为您的目标图像创建证据:

valint bom nginx:latest -o attest
valint bom nginx:latest -o attest

该命令生成证据 nginx:latest 图像,确保它包含图像身份和创建时间等元数据。默认情况下,Valint 使用 登录 服务作为证据生成的签名者,将 OIDC 身份绑定到证书。不过,Valint 也支持使用您自己的 x509 用于签名的 PKI 密钥和 CA 链。

登录

只需选择您选择用于签名的 OIDC 标识符即可。

最后,您可以审查证据生成过程的成功及其身份,以确保其完整性和可信度。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
[2024-03-26 12:41:55] 信息证明:[可信] 签名成功,CA:fulcio-signer,CN:sigstore-intermediate,电子邮件:[your_identity@gmail.com],URI:[] ... [2024-03-26 12:41:55] INFO 证明:成功生成证据
[2024-03-26 12:41:55] 信息证明:[可信] 签名成功,CA:fulcio-signer,CN:sigstore-intermediate,电子邮件:[your_identity@gmail.com],URI:[] ... [2024-03-26 12:41:55] INFO 证明:成功生成证据
[2024-03-26 12:41:55] 信息证明:[可信] 签名成功,CA:fulcio-signer,CN:sigstore-intermediate,电子邮件:[your_identity@gmail.com],URI:[] ... [2024-03-26 12:41:55] INFO 证明:成功生成证据

政策评估:定义政策并生成证据后,是时候根据您的供应链组件对其进行评估了。利用 valint verify 命令后跟目标映像和策略文件:

valint verify nginx:latest --policy my_policy.yaml
valint verify nginx:latest --policy my_policy.yaml

评测总结:

评估完成后,查看 Valint 日志提供的汇总表。

表

在这种特殊情况下,Valint 分析表明 nginx:latest 图像成功满足新鲜度要求,但不符合预期的标签标准。提供的表格简要概述了每条规则的评估状态,并注明证据是否已正确签署。

SARIF 格式的结果:

此外,您还可以探索 Valint 生成的 SARIF 格式的结果,这是另一个证据和平,以详细说明评估、违规、级别和证据参考。

支持的管理平台:

这种标准化格式得到了各种安全管理系统的支持,例如 GitHub、Azure 和 Scribe SAAS。 Scribe 平台不仅可以处理策略结果,还可以促进证据管理,并为漏洞管理、指标跟踪等提供广泛的功能。

信息预览:

政策结果中提供的信息一目了然:

截图

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
{“版本”:“2.1.0”,“$schema”:“https://raw.githubusercontent.com/oasis-tcs/sarif-spec/master/Schemata/sarif-schema-2.1.0.json”, “运行”:[ {“工具”:{“驱动程序”:{“informationUri”:“https://scribesecurity.com”,“名称”:“valint”,“规则”:[{“id”:“新鲜” -image", "name": "新鲜图像", "shortDescription": { "text": "验证图像不早于阈值的规则" }, }, { "id": "labels", "name": "Labels", "shortDescription": { "text": "验证图像是否具有所有必需标签的规则" }, }, "results": [ { "ruleId": "fresh-image" , "ruleIndex": 0, "kind": "通过", }, { "ruleId": "labels", "ruleIndex": 1, "kind": "失败", "level": "警告", "策略.violation": { "type": "缺少标签", "details": [ { "label": "not_found" }, { "label": "org.opencontainers.image.source" } }, ... ] }
{“版本”:“2.1.0”,“$schema”:“https://raw.githubusercontent.com/oasis-tcs/sarif-spec/master/Schemata/sarif-schema-2.1.0.json”, “运行”:[ {“工具”:{“驱动程序”:{“informationUri”:“https://scribesecurity.com”,“名称”:“valint”,“规则”:[{“id”:“新鲜” -image", "name": "新鲜图像", "shortDescription": { "text": "验证图像不早于阈值的规则" }, }, { "id": "labels", "name": "Labels", "shortDescription": { "text": "验证图像是否具有所有必需标签的规则" }, }, "results": [ { "ruleId": "fresh-image" , "ruleIndex": 0, "kind": "通过", }, { "ruleId": "labels", "ruleIndex": 1, "kind": "失败", "level": "警告", "策略.violation": { "type": "缺少标签", "details": [ { "label": "not_found" }, { "label": "org.opencontainers.image.source" } }, ... ] }
{“版本”:“2.1.0”,“$schema”:“https://raw.githubusercontent.com/oasis-tcs/sarif-spec/master/Schemata/sarif-schema-2.1.0.json”, “运行”:[ {“工具”:{“驱动程序”:{“informationUri”:“https://scribesecurity.com”,“名称”:“valint”,“规则”:[{“id”:“新鲜” -image", "name": "新鲜图像", "shortDescription": { "text": "验证图像不早于阈值的规则" }, }, { "id": "labels", "name": "Labels", "shortDescription": { "text": "验证图像是否具有所有必需标签的规则" }, }, "results": [ { "ruleId": "fresh-image" , "ruleIndex": 0, "kind": "通过", }, { "ruleId": "labels", "ruleIndex": 1, "kind": "失败", "level": "警告", "策略.violation": { "type": "缺少标签", "details": [ { "label": "not_found" }, { "label": "org.opencontainers.image.source" } }, ... ] }

政策组合

Valint 中的包是一个策略即代码包,本质上是一个 Git仓库 托管一套政策和规则。用户可以通过分叉 Valint 提供的示例存储库并根据自己的需求进行自定义来设置自己的捆绑包。

分叉并定制: 首先分叉 Valint 的 样本库。自定义策略和规则以符合您组织的需求。

向 Valint 提供: 向 Valint 提供您的自定义捆绑包:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
valint verify --bundle https://github.com/my_org/my_bundle.git \ --policy my_policy.yaml
valint verify --bundle https://github.com/my_org/my_bundle.git \ --policy my_policy.yaml
valint verify --bundle https://github.com/my_org/my_bundle.git \ --policy my_policy.yaml

自订规则

自定义规则时,基本职责是解析证据有效负载并根据定义的合规标准报告违规行为。无论您是修改现有规则还是创建新规则。

定义合规标准: 根据组织策略、安全标准或法规定义合规性标准。

定义证据标准: 定义预期传达合规性的证据。

评估合规性并报告违规行为: 使用证据有效负载来评估是否符合定义的标准。如果组件不符合要求,请报告违规行为。
Valint 确保签名和证据来源要求可随时用于任何自定义规则。

虽然 Valint 目前雇用 奥帕雷戈 对于规则制定来说,随着 Python 规则计划在不久的将来集成,令人兴奋的前景正在等待着。

下一步是什么?

现在可以与 Gatekeeper 集成!请参阅我们的 文件 了解详情。请继续关注即将发布的博客文章,我们将深入探讨这一令人兴奋的发展。

请留意未来的博客文章,我们将在其中探讨政策举措,包括实施 SLSA 和 SSDF 等安全框架的高级政策。

对于 Python 爱好者来说,这是一个令人兴奋的消息!我们的最新更新包括广泛的 Python 支持,显着提高了兼容性。这使得政策制定者能够使用 Python 自定义规则并利用其大量的库。

结语

总之,Valint 的策略引擎提供了一个强大的解决方案,可确保您的供应链内的合规性。通过利用证据、策略和捆绑包等组件,组织可以简化合规工作并有效降低风险。

此内容由领先的端到端软件供应链安全解决方案提供商 Scribe Security 为您提供 - 为整个软件供应链中的代码工件以及代码开发和交付流程提供最先进的安全性。 了解更多