IBM Cloud Docs
持续合规性管道

持续合规性管道

持续合规性管道 (CC 管道) 定期扫描已部署的工件及其源存储库。

CC 管道通过使用 environment-tag 值来处理 inventory 存储库中的条目,以确定要查看的最新已部署状态。 在对工件和源存储库进行扫描和运行检查之后,管道将创建新的突发事件问题或更新突发事件存储库中的现有突发事件问题。 最后,通过使用这些问题和结果,管道收集证据并汇总证据,因此 Security and Compliance Center 可以更新找到的工件的合规性状态。

阶段和任务

下表列出了在 CC 管道中运行的任务。 此外,该表还提供了以下每个阶段的概述:

  • 任务或阶段: 这是指在 .pipeline-config.yaml 配置文件中定义的阶段的名称。

  • 简短描述: 提供阶段执行期间执行的操作的简明说明。

  • 允许定制: 这指示用户是否具有通过在 .pipeline-config.yaml 文件中插入定制脚本来修改或替换阶段的缺省行为的灵活性。

  • 默认参考实现:这表明DevSecOps管道带有该阶段的预定义或默认实现。 值得注意的是,对于某些阶段,例如 unit-tests 或者 setup,这DevSecOps管道不提供任何开箱即用的实现。 而是需要用户提供定制脚本或根据其应用程序需求定制的代码。

  • 证据收集: 指示阶段是否执行标准证据收集。 什么时候DevSecOps管道为某个阶段提供参考实现,开箱即用地进行证据收集。 但是,如果 用户 选择修改或替换这些预定义阶段,那么他们必须确保其定制实现包含相应的证据收集。 对于以下阶段,用户也负有同样的责任:DevSecOps管道没有提供开箱即用的实现,因此需要他们进行证据收集。 该列指示负责执行证据收集的实体 (用户/管道)。

  • 允许跳过 (适用于版本> = v10): 这指示用户是否可以通过在 .pipeline-config.yaml 中将 skip 属性设置为 true 来选择退出运行此阶段。 但是,使用此功能时请务必谨慎,尤其是对于旨在收集证据的阶段。 跳过此类阶段可能会导致缺少构建的基本证据。

表 1. 持续合规性管道阶段和任务
任务或阶段 简短描述 .pipeline-config.yaml 中允许的定制 缺省引用实现 证据收集 跳过允许
start 设置管道环境。 管道
setup 设置构建和测试环境。
detect-secrets 对应用程序代码运行检测密钥扫描。 管道
static-scan 对应用程序代码运行静态扫描代码。 管道
dynamic-scan 在应用程序上运行动态扫描。 管道
compliance-checks 对应用程序存储库运行 Code Risk Analyzer 扫描和其他合规性检查。 管道
scan-artifact 扫描已构建的工件。 管道
finish 收集,创建日志文件,工件和证据并将其上载到证据锁定程序。 管道

有关如何使用 .pipeline-config.yaml 文件定制阶段的更多信息,请参阅 定制脚本管道参数 列表。

阶段和证据

下表提供了各种类型的证据与收集这些证据的管道中的特定阶段之间的关系。

表 2. 持续集成阶段和关联的证据
任务或阶段 证据类型
start 不适用
setup 不适用
detect-secrets com.ibm.detect_secrets
static-scan com.ibm.static_scan
compliance-checks com.ibm.code_bom_check, com.ibm.code_cis_check, com.ibm.code_vulnerability_scan, com.ibm.branch_protection
dynamic-scan com.ibm.dynamic_scan
scan-artifact com.ibm.cloud.image_vulnerability_scan
finish com.ibm.pipeline_logs, com.ibm.pipeline_run_data

有关如何使用 collect-evidence 脚本在可定制用户阶段中收集证据的更多信息,请参阅 collect-evidence script

处理工件和存储库的库存

开始阶段将克隆库存并处理生产环境中的最新条目。 您可以通过提供以下管道参数来指定此环境:

表 2. 持续合规性管道工件和存储库
名称 类型 描述 必需或可选
environment-tag 文本 表示库存中最新目标环境的标记。 示例: prod_latestus-south_prod_latest 必需
environment-branch 文本 表示库存中的目标环境的分支名称。 示例: prod 不推荐-改为首选 environment-tag
region-prefix 文本 区域名称作为目标环境的 latest 标记的前缀。 示例: us-south 不推荐-改为首选 environment-tag

库存条目包含已部署的工件和存储库源。 管道处理并收集库存条目,并使用以下 pipelinectl 命令为管道运行注册库存条目:

启动阶段还会克隆找到的存储库,每个存储库和每个落实对。 例如,在文件夹中克隆了具有落实 sha1repo1,但管道在单独的文件夹中克隆了具有落实 sha2 的同一 repo1

管道通过使用简单命名表示法和递增索引来注册管道运行的工件和存储库,例如以下示例:

  • repo-1, repo-2, repo-3
  • artifact-1 artifact-2, artifact-3

您可以使用以下 pipelinectl 命令在定制阶段中列出这些条目:

如果使用 pipelinectl 命令 load_repo "$repo" branch 检索 CC 管道中的分支信息,那么它始终将 master 作为分支返回。 因此,请使用 commit hashes 而不是分支。

设置阶段

CC 管道中的安装阶段运行位于 .pipeline-config.yaml 定义的 setup 阶段中的脚本。 您可以使用以下命令来确定脚本正在哪个管道中运行:

get_env pipeline_namespace

此命令返回 cccdcipr,具体取决于正在运行的管道。 通过这种方式,您可以在管道之间复用设置脚本 (如果需要)。

检测私钥扫描

IBM 检测私钥 工具可识别私钥在应用程序代码中可见的位置。 此处 提供了有关为扫描设置存储库的更多信息。

静态代码扫描

静态代码扫描阶段在指定的应用程序存储库代码库上运行静态代码分析器工具。

CC 管道提供在扫描程序的库存中找到的存储库。

您可以使用以下任何方法向管道添加静态代码:

  • 通过将 SonarQube 工具添加到工具链,提供已运行的 SonarQube 实例名称,URL 和凭证。 static-scan 任务在指定的存储库上运行扫描。
  • 将代码添加到 .pipeline-config.yaml 文件中的 static-scan 定制阶段以用于定制实现。

动态扫描

Dynamic scan 阶段运行动态应用程序安全测试工具,以在已部署的应用程序中查找漏洞。

  • 将您自己的动态扫描代码添加到 .pipeline-config.yaml 文件中的动态扫描定制阶段以用于定制实现。

要了解有关使用 OWASP-ZAP 配置动态扫描的更多信息,请参阅 为 CC 管道配置 ZAP 扫描

扫描并检查一致性检查

表 3. 合规性扫描和检查
扫描或检查 描述
Code Risk Analyzer 漏洞扫描 查找所有应用程序包依赖关系,容器基本映像和操作系统包的漏洞。 使用 Code Risk Analyzer 工具。
Code Risk Analyzer CIS 检查 在 Kubernetes 部署清单上运行 配置检查。 使用 Code Risk Analyzer 工具。
Code Risk Analyzer 材料清单 (BOM) 检查 用于捕获所有依赖关系的 pedigree 的指定存储库的 BOM。 将以不同的粒度收集此 BOM。 例如,BOM 捕获构建中使用的基本映像的列表,基本映像中的软件包的列表以及安装在基本映像上的应用程序软件包的列表。 BOM 充当分析结果的参考标准,并且可能用于实施策略检测点。 使用 Code Risk Analyzer 工具。
Mend Unified Agent 漏洞扫描 Mend Unified Agent 扫描工具 会扫描应用程序存储库的开放式源代码组件以查找易受攻击的库和源文件。 有关更多信息,请参阅 配置 Mend Unified Agent 扫描

这些脚本在管道感知的所有应用程序存储库上运行。 CC 管道使用 pipelinectl save_repo 接口来注册在库存条目中找到的存储库,然后使用 list_reposload_repo 命令对存储库进行迭代并将其发送到扫描程序。

有关用户脚本阶段的预期输出的更多信息,请参阅 定制脚本

工件扫描和签名

工件扫描阶段通过可定制的步骤为 Docker 映像提供缺省行为:

  • Container Registry Vulnerability Advisor 扫描

CC 管道使用 pipelinectl save_artifact 界面来注册在库存条目中找到的工件,然后使用 list_artifactsload_artifact 命令对这些工件进行迭代。

要开始使用此阶段,请使用 pipelinectl 界面为管道提供工件。 您无需更新构建脚本和 .pipeline-config.yaml 配置。

要使用其他扫描进程或在 icr.io中处理除 Docker 映像以外的工件,可以使用项目中的 .pipeline-config.yaml 配置来定制这些阶段。

在构建时收集合规性数据

CC 管道尝试处理来自检查和扫描的结果,将结果分解为每个发现的 CVE,漏洞或警报的单个问题。 由 CC 管道发现的问题使用 continuous-compliance-check 标签进行标记,该标签标识在生产环境中发现的问题。

管道收集所有检查和扫描的 证据,并将其存储在证据锁定程序中。 证据收集器还保存管道日志文件,管道数据本身,包含 Tekton 定义。 根据扫描创建的问题,并检查结果是否也附加到证据。