如何通过 Xray 完成企业 DevSecOps 最佳实践

DevSecOps 是一种相对较新的文化,在软件开发生命周期(SDLC)中,处理安全和合规问题的过程中,开发人员和运维人员都需要参与其中。从 IDE 中的第一行代码一直到将应用程序交付到生产环境。

 

实现一个好的 DevOps 方法是困难的,让 DevSecOps 的方式正确是一个更大的挑战。DevSecOps 的范围很广,是在 DevOps 过程中集成不同安全实践的理念。目标是将 SDLC 每个阶段的安全风险降到最低。我们已经看到了定向攻击对大型企业的影响,比如最近的 SolarWinds 事件。软件的安全性不是一个孤立的问题,识别漏洞与软件开发密不可分。

 

开源软件(OSS)组件使用的持续增长,暴露的代码都存在潜在的隐藏漏洞和违反许可的风险。问题是如何在软件开发过程中安全地使用 OSS 组件,而不将生产代码置于风险之中。监控和降低 OSS 组件的风险是用一个叫做软件组合分析(SCA)的 DevSecOps 工具来处理的。

 

JFrog Xray 是软件组合分析(SCA)工具,可以监控(OSS)软件包的安全性和合规性,并提供相应的查看视角。它是 JFrog DevOps 平台不可分割的一部分,并与 JFrog Artifactory 集成,后者可以存储和组织所有的软件构件。通过充分利用这两个解决方案,可以为我们的软件制品实现安全性和可跟踪性。

 

下面我将详细描述一下如何在我们的企业组织中使用 JFrog Xray 实现 DevSecOps 过程的最佳实践。它包括以下三个部分:

  • 通过采用推荐的制品库结构和依赖构建信息,增加 JFrog Artifactory 中制品的可跟踪性;
  • 通过在 JFrog Xray 中设计配置 Policy 和 Watch 来定义安全和 License 行为规范;
  • 将 JFrog Xray 集成到安全和合规工作流程中。

 

1. JFrog Artifactory: 软件制品跟踪

作为一个通用的制品存储库管理器,Artifactory 允许在制品库中组织设计制品:

  • 在制品的生命周期中监控和跟踪它们;
  • 了解在构建期间使用了哪些依赖组件以及版本;
  • 应用安全策略,并基于特定的配置文件限制对制品的访问。

 

为了提高制品的可追溯性,我们首先需要一个良好的制品库结构和构建信息。

 

1.1. 制品库结构

JFrog 建议使用 4 部分命名约定来扩展和管理全局制品库,如图所示:

<团队/产品> – <技术> – <成熟度> – <地域>

  • 作为项目主要标识符的产品或团队名称;
  • 所使用的技术、工具或封装类型;
  • 包成熟度级别,例如开发、分期和发布阶段;
  • 物理地域,物理拓扑。

通过以上设计方案可以获得以下两点好处:

  • 可追溯性:每个项目的远程存储库知道使用了哪些依赖项;
  • 制品库隔离:更容易在制品库级别(而不是制品库中的路径)实施安全保护和赋予权限。

 

JFrog Artifactory 提供了相关功能和优化方案辅助这样的制品库设计:

  • 使用基于 checksum 的去重校验存储(没有副本)来提高性能和减少物理存储占用空间;
  • 通过虚拟制品库和权限组合制品库,降低制品库结构的复杂度;
  • 在管理数百个制品库时,通过 Rest API 实现自动化,减少制品库初始化工作。

 

2.1. BUILD INFO

build -info 是由 build agent 收集的关于构建的所有信息。构建信息包括项目模块、制品、依赖项、环境和变量的列表。当使用一个 JFrog 客户端来构建代码时,客户端可以收集构建信息并将其发布到Artifactory。当 build-info 被发布到 Artifactory 时,所有发布的细节都可以从 Artifactory UI 中访问。

 

  • 可追溯性:所有生成和依赖的二进制文件都记录在这个物料清单(JSON文件)中。
  • 我们需要做的是:配置 和 修改 我们的 CI pipeline。

 

Artifactory 提供了 CI 插件和 JFrog CLI 可以轻松完成 CI pipeline 文件的修改和生成构建信息。

 

小结:Jfrog Artifactory 的最佳实践

建议开发团队使用专用制品库和构建信息,这保证了工件的完全可追溯性,包括:

  • 跟踪使用哪些依赖版本来构建产品的特定版本;
  • 在软件的生命周期/交付过程中跟踪软件;
  • 按范围隔离制品(例如,项目、团队、制品成熟度级别),这在清理过程中非常有用。

 

1. JFrog Xray:开源软件安全和合规管理利器

 

JFrog Xray 主要通过以下三个特性来实现我们软件的安全管理过程:

  • Policies:制定安全管理规则
  • Watchs:配置管理规则应用于哪些制品库
  • Violations:通过配置的 Policy Watch 管理策略查看制品库的安全合规情况

基于以上功能特性我们可以根据组织的内部法律和对软件的安全管理策略以及所选择的安全流程定义一组 Policy 和 Watch

 

示例组织:

  • 每个开发项目由一个发布经理/技术负责人代表;
  • DevOps 团队负责CI/CD工具;
  • 安全团队负责实现安全流程;
  • DevOps 和安全团队都是企业全局管理部门或跨项目的;
  • DevOps(DevOps + 安全团队)实现安全流程;
  • 安全负责定义策略。

 

设计 Policy 将取决于内部安全流程。在下面的违规工作流部分有更多的信息。建议为每个项目和每个成熟度级别(跨项目)设置一个 watch。

 

以下概述了两种类型的策略结构和模式:

  • 企业全局级别 policies,为整个组织设置。
  • 项目级别的 policies,每个项目/应用程序/团队设置。

 

1.1. 模式1:企业级策略

此模式描述了对整个组织来说是全局的策略。

如下图所示,企业级策略模式意味着 项目A和项目B:

  • 共享高、中、低严重违规的相同定义(CVSS评分的特定范围);
  • 使用相同的对于安全处理规则,例如阻断下载或阻断构建失败。

建议做法:

  • 每个发布经理/技术负责人都应该通过 Watch 来管理他们自己项目的违规行为(漏洞列表 和 忽略漏洞列表);
  • 交叉项目 Watch 帮助 DevSecOps 团队监控所有项目。

 

1.1. 模式2:项目级策略

此模式描述了专用于特定项目的策略。

 

比内部项目更公开的项目,例如面向互联网的应用程序,需要更严格的安全政策。

如下图所示,项目级策略模式意味着 DevOps 团队基于每个项目/业务单元构建单独的策略,并确保它们符合安全团队的指示。

建议做法:

  • 每个发布经理/技术负责人通过监视来管理他们自己项目的违规行为(CVSS评分的特定范围);
  • 交叉项目 Watch 帮助 DevSecOps 团队监控所有项目;
  • 每个项目的专用 Watch 由 DevSecOps 团队创建和维护。

 

JFrog Xray 的最佳实践,需要牢记的其他指引:

  • REST API 可以帮助我们创建/更新/删除 Policy 和 Watch,自动化创建和更新,并使用自己的门户来限制对策略的访问;
  • 电子邮件通知策略:Policy 级别 — 旨在通知策略经理(DevOps 或安全团队)。Watch 级别 — 目的是在项目级别通知用户。
  • 可以考虑将忽略违规限制到我们的发布经理或技术主管,以确保它将被适当地检查和处理;
  • 对远程存储库进行索引将允许Xray在开发团队提出请求时立即扫描第三方依赖项。
  • 漏洞检索配置到本地存储库将允许 Xray 在整个交付过程中扫描应用程序中使用的 OSS,甚至在它们被部署到生产后;
  • 建立构建信息漏洞索引将允许 Xray 在 CI pipeline 中通知和/或组织一个有漏洞的构建失败,以防在构建或任何运行时依赖关系中发现了违规。

 

总结:

将 JFrog 平台(包括 Artifactory 和 Xray)集成到企业组织中以实现和利用你的 DevSecOps 文化的指导方针。可以实现对制品的完全跟踪,并使用 JFrog 平台构建一个安全流程,可以通过采用正确的制品库结构和依赖 Artifactory 中的构建信息来实现。

可以在 JFrog Xray 中组织 Policy 和 Watch 以匹配您的内部安全性和遵从性结构。最困难也是最核心的部分是如何定义一个适合自身企业安全管控流程的工作流来实现。

标签:JFrog pipelines   JFrog 容器注册   JFrog docker 注册    JFrog helm 仓库   供应链安全与合规