持续合规性管道
持续合规性管道 (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 来选择退出运行此阶段。 但是,使用此功能时请务必谨慎,尤其是对于旨在收集证据的阶段。 跳过此类阶段可能会导致缺少构建的基本证据。
任务或阶段 | 简短描述 | .pipeline-config.yaml 中允许的定制 |
缺省引用实现 | 证据收集 | 跳过允许 |
---|---|---|---|---|---|
start |
设置管道环境。 | 否 | 是 | 管道 | 否 |
setup |
设置构建和测试环境。 | 是 | 否 | 否 | 否 |
detect-secrets |
对应用程序代码运行检测密钥扫描。 | 是 | 是 | 管道 | 否 |
static-scan |
对应用程序代码运行静态扫描代码。 | 是 | 是 | 管道 | 是 |
dynamic-scan |
在应用程序上运行动态扫描。 | 是 | 是 | 管道 | 是 |
compliance-checks |
对应用程序存储库运行 Code Risk Analyzer 扫描和其他合规性检查。 | 是 | 是 | 管道 | 是 |
scan-artifact |
扫描已构建的工件。 | 是 | 是 | 管道 | 是 |
finish |
收集,创建日志文件,工件和证据并将其上载到证据锁定程序。 | 是 | 是 | 管道 | 是 |
有关如何使用 .pipeline-config.yaml
文件定制阶段的更多信息,请参阅 定制脚本 和 管道参数 列表。
阶段和证据
下表提供了各种类型的证据与收集这些证据的管道中的特定阶段之间的关系。
任务或阶段 | 证据类型 |
---|---|
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。
处理工件和存储库的库存
开始阶段将克隆库存并处理生产环境中的最新条目。 您可以通过提供以下管道参数来指定此环境:
名称 | 类型 | 描述 | 必需或可选 |
---|---|---|---|
environment-tag |
文本 | 表示库存中最新目标环境的标记。 示例: prod_latest 或 us-south_prod_latest |
必需 |
environment-branch |
文本 | 表示库存中的目标环境的分支名称。 示例: prod |
不推荐-改为首选 environment-tag |
region-prefix |
文本 | 区域名称作为目标环境的 latest 标记的前缀。 示例: us-south |
不推荐-改为首选 environment-tag |
库存条目包含已部署的工件和存储库源。 管道处理并收集库存条目,并使用以下 pipelinectl
命令为管道运行注册库存条目:
启动阶段还会克隆找到的存储库,每个存储库和每个落实对。 例如,在文件夹中克隆了具有落实 sha1
的 repo1
,但管道在单独的文件夹中克隆了具有落实 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
此命令返回 cc
,cd
,ci
或 pr
,具体取决于正在运行的管道。 通过这种方式,您可以在管道之间复用设置脚本 (如果需要)。
检测私钥扫描
静态代码扫描
静态代码扫描阶段在指定的应用程序存储库代码库上运行静态代码分析器工具。
CC 管道提供在扫描程序的库存中找到的存储库。
您可以使用以下任何方法向管道添加静态代码:
- 通过将 SonarQube 工具添加到工具链,提供已运行的 SonarQube 实例名称,URL 和凭证。
static-scan
任务在指定的存储库上运行扫描。 - 将代码添加到
.pipeline-config.yaml
文件中的static-scan
定制阶段以用于定制实现。
动态扫描
Dynamic scan 阶段运行动态应用程序安全测试工具,以在已部署的应用程序中查找漏洞。
- 将您自己的动态扫描代码添加到
.pipeline-config.yaml
文件中的动态扫描定制阶段以用于定制实现。
要了解有关使用 OWASP-ZAP 配置动态扫描的更多信息,请参阅 为 CC 管道配置 ZAP 扫描。
扫描并检查一致性检查
扫描或检查 | 描述 |
---|---|
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_repos
和 load_repo
命令对存储库进行迭代并将其发送到扫描程序。
有关用户脚本阶段的预期输出的更多信息,请参阅 定制脚本。
工件扫描和签名
工件扫描阶段通过可定制的步骤为 Docker 映像提供缺省行为:
- Container Registry Vulnerability Advisor 扫描
CC 管道使用 pipelinectl save_artifact
界面来注册在库存条目中找到的工件,然后使用 list_artifacts
和 load_artifact
命令对这些工件进行迭代。
要开始使用此阶段,请使用 pipelinectl
界面为管道提供工件。 您无需更新构建脚本和 .pipeline-config.yaml
配置。
要使用其他扫描进程或在 icr.io中处理除 Docker 映像以外的工件,可以使用项目中的 .pipeline-config.yaml
配置来定制这些阶段。
在构建时收集合规性数据
CC 管道尝试处理来自检查和扫描的结果,将结果分解为每个发现的 CVE,漏洞或警报的单个问题。 由 CC 管道发现的问题使用 continuous-compliance-check
标签进行标记,该标签标识在生产环境中发现的问题。
管道收集所有检查和扫描的 证据,并将其存储在证据锁定程序中。 证据收集器还保存管道日志文件,管道数据本身,包含 Tekton 定义。 根据扫描创建的问题,并检查结果是否也附加到证据。