collect-证据脚本
该 collect-evidence 脚本帮助采用者、用户和贡献者将合规性数据发送到 DevSecOps变更管理数据流 中。
该脚本执行以下任务:
- 尝试将任何附件作为结果处理,并根据这些结果创建突发事件问题。 支持有限数量的工具输出格式。
- 如果发现问题,那么脚本会评估其宽限期 (到期日期) 和免除状态。
- 在证据锁定程序中创建证据资产。
- 创建 证据 本身,并附加问题和提供的附件。
对于状态 success 或 failure,如果在 collect-evidence 中未传递任何附件,那么会将该特定任务和阶段的管道日志捕获为附件。
collect-evidence 脚本由管道提供。 无需安装。 该脚本有以下依赖项
- bash
libstdc++共享库libgcc共享库
确保依赖关系安装在使用此工具来报告证据的基本映像中。
CLI 命令架构
collect-evidence 功能通过两个界面提供:
- Shell Script Wrapper (
collect-evidence):提供向后兼容性的传统 bash 脚本接口 - 直接 CLI 命令 (
cocoa locker evidence collect):可访问全部功能的本地 CLI 界面
版本切换
collect-evidence shell 脚本支持两个实现版本,可通过 collect-evidence-version 环境属性进行切换:
| 版本 | 实现 | 状态 | 描述 |
|---|---|---|---|
v1 |
旧版 | 可用 | 基于 bash 的原始实现,完全向后兼容 |
v2 |
基于 CLI | 缺省值 | 封装 cocoa locker evidence collect CLI 命令的现代实现 |
用途
脚本 collect-evidence 需要以下参数:
--tool-type提供证据数据的工具的标识。 例如: "owasp-zap-ui","cra"--evidence-type证据类型的 ID。 例如:com.ibm.image_vulnerability_scan,com.ibm.unit_tests--asset-keyPipelinectl 资产中的键。 对于以下命令load_artifact <key>或者load_repo <key>--asset-type来自 pipelinectl 的资产类型,可以是下列其中一种类型:repo,artifact--status证据状态,可以是以下状态之一:success,pending,failure--assets指定多个“资产-键”和“资产-类型”对。 例如,可以使用--assets asset-key1:asset-type1 --assets asset-key2:asset-type2。 如果使用此选项,请勿单独指定 asset-key 和 asset-type。
以下参数为可选参数:
--attachment要作为结果处理并附加到证据的文件。 可以为多个文件多次指定该参数。 对于图像签名,请确保使用--attachment参数附加签名文件。 签名文件必须包括签名详细信息,如密钥 ID、算法和签名摘要。 常见格式包括 JSON 或 TXT。--meta要添加到证据的任意元数据。 该参数接受“键 = 值”对,并且可以多次指定。 您可以包含与图像签名过程相关的元数据,如签名环境或签名过程中使用的任何特定配置。--additional-comment在管道失败时添加到问题的注释。
使用以下命令获取帮助:
collect-evidence --help
返回值
collect-evidence 在 STDOUT ( success,failure 或 pending 之一) 上输出求值的证据状态字符串。 此评估值取决于已处理的结果附件,发现的突发事件问题以及这些问题的可能补救,例如设置了到期日期或豁免标签。 有关更多信息,请参阅 事件问题。
# example on how to read the output into a variable in bash
read -r status < <(collect-evidence "${evidence_params[@]}")
echo $status # success
切换到 v2 (基于 CLI 的实施)
要使用基于 CLI 的新实现,请在管道中设置环境属性:
collect-evidence-version=v2
直接使用 CLI 命令
cocoa locker evidence collect \
--tool-type "sonarqube" \
--evidence-type "com.ibm.static_scan" \
--assets "app-repo:repo" \
--status "success" \
--attachment ./sonarqube-result.json \
--pipeline-run-id "${PIPELINE_RUN_ID}" \
--pipeline-namespace "ci" \
--incident-org "my-org" \
--incident-repo "compliance-issues"
cocoa locker evidence collect \
--tool-type "detect-secrets" \
--evidence-type "com.ibm.detect_secrets" \
--assets "app-repo:repo" \
--status "success" \
--pipeline-run-id "${PIPELINE_RUN_ID}" \
--pipeline-namespace "ci" \
--incident-org "my-org" \
--incident-repo "compliance-issues"
cocoa locker evidence collect \
--tool-type "va" \
--evidence-type "com.ibm.cloud.image_vulnerability_scan" \
--assets "image-0:artifact" \
--status "success" \
--pipeline-run-id "${PIPELINE_RUN_ID}" \
--attachment image-0_va-report.json \
--pipeline-namespace "ci" \
--incident-org "my-org" \
--incident-repo "compliance-issues"
有关完整的 CLI 命令参考和所有可用参数,请参阅 可可锁证据收集。
用法示例
collect-evidence \
--tool-type "sonarqube" \
--evidence-type "com.ibm.static_scan" \
--asset-type "repo" \
--asset-key "app-repo" \
--status "success" \
--attachment ./sonarqube-result-1.json \
--attachment ./sonarqube-result-2.json \
--meta environment=staging
collect-evidence \
--tool-type "ciso-code-signing" \
--evidence-type "com.ibm.cloud.image_signing" \
--asset-type "artifact" \
--asset-key "signed-image" \
--status "success" \
--attachment ./signature.json \ # The signature details in JSON format
--attachment "./${artifact}.fingerprint" \ # The fingerprint is a hash value generated from the artifact, ensuring integrity and authenticity.
--meta environment=production
您可以直接使用 cocoa locker evidence collect 命令:
cocoa locker evidence collect \
--tool-type "sonarqube" \
--evidence-type "com.ibm.static_scan" \
--assets "app-repo:repo" \
--status "success" \
--attachment ./sonarqube-result.json \
--pipeline-run-id "${PIPELINE_RUN_ID}" \
--pipeline-namespace "ci" \
--incident-org "my-org" \
--incident-repo "compliance-issues"
受支持的工具格式
当前实现当前支持以下工具 (作为 --tool-type 参数提供):
| 工具名称 | 描述 |
|---|---|
cra |
IBM 代码风险分析器 |
va |
Vulnerability Advisor 对于 IBM Cloud Container Registry |
gosec |
GoLang 安全扫描仪 |
xray |
JFrog Xray - 漏洞扫描与容器安全 |
owasp-zap |
OWASP Zed 攻击代理(ZAP) |
owasp-zap-ui |
OWASP Zed 攻击代理用户界面(ZAP UI) |
sonarqube |
SonarQube 扫描 |
peer-review |
同行评审扫描 |
twistlock |
TwistLock |
mend |
修补扫描 |
checkov |
Checkov 扫描 |
cra-tf |
Terraform 代码风险分析器 |
tfsec |
Terraform 安全扫描仪 |
fips-scanner |
FIPS(联邦信息处理标准)扫描仪 |
detect-secrets |
检测秘密 |
ciso-code-signing |
CISO 代码签名工具 |
sysdig |
系统扫描 |
cyclonedx |
CycloneDX 格式。 问题管理的工具检测将根据 CycloneDX 元数据 在此 进行 |
CycloneDX元数据为 问题管理工具检测
如果使用不受支持的工具类型调用 collect-evidence 脚本,那么该脚本不会尝试处理附件。 此外,将跳过问题处理,并且不会停止证据收集。
如果脚本从受支持的工具提供附件,但无法处理附件,那么将跳过问题处理,并且不会停止证据收集。
证据类型
您可以使用 --evidence-type 参数来设置证据类型。 您可以设置任何类型,但 IBM Cloud® Compliance Manager 支持以下证据类型:
com.ibm.unit_testscom.ibm.detect_secretscom.ibm.branch_protectioncom.ibm.static_scancom.ibm.code_vulnerability_scancom.ibm.code_bom_checkcom.ibm.code_cis_checkcom.ibm.cloud.image_vulnerability_scancom.ibm.cloud.image_signingcom.ibm.dynamic_scancom.ibm.cloud.image_signingcom.ibm.acceptance_testscom.ibm.prod_change_requestcom.ibm.close_change_reques
收集证据类型和绘制工具图
| 证据类型 ID | 默认支持工具 | 源 | 所有权 | 推荐资产 | 问题 |
|---|---|---|---|---|---|
com.ibm.branch_protection |
cocoa-branch-protection |
CI | 平台 | repo | 非事件问题 |
com.ibm.unit_tests |
jest |
PR/CI | 用户 | repo | 非事件问题 |
com.ibm.detect_secrets |
detect-secrets |
PR/CI/CC | 平台 | repo | 事件/非事件问题 |
com.ibm.code_vulnerability_scan |
cra-tf, cra, mend 作为代码的基础设施: tfsec, checkov |
CI | 平台 | repo | 事件/非事件问题 |
com.ibm.code_bom_check |
cra-bom, sbom-utility |
PR/CI/CC | 平台 | repo | 事件/非事件问题 |
com.ibm.code_cis_check |
cra-cis |
PR/CI/CC | 平台 | repo | 非事件问题 |
com.ibm.peer_review |
peer-review |
CI | 平台 | repo | 非事件问题 |
com.ibm.static_scan |
sonarqube, gosec 作为代码的基础设施: terraform-fmt, terraform-validate、tflint |
CI/CC | 平台 | repo | 事件/非事件问题 |
com.ibm.cloud.image_signing |
artifact-signing |
CI | 平台 | repo | 非事件问题 |
com.ibm.acceptance_tests |
jest |
CI | 用户 | 工件 | 非事件问题 |
com.ibm.dynamic_scan |
owasp-zap, owasp-zap-ui |
CI | 平台 | 工件 | 事件/非事件问题 |
com.ibm.cloud.image_vulnerability_scan |
va, sysdig, xray |
CI/CC | 平台 | 工件 | 事件/非事件问题 |
com.ibm.prod_change_request |
gitlab |
CD | 平台 | 工件 | 非事件问题 |
com.ibm.close_change_request |
gitlab |
CD | 平台 | 工件 | 非事件问题 |
com.ibm.cloud.slsa |
tekton-chains |
CI | 平台 | 工件 | 非事件问题 |
com.ibm.cloud.verify_signature |
ciso-code-signing |
CD | 平台 | 工件 | 非事件问题 |
com.ibm.pipeline_logs |
不适用 | CI/CD/CC | 平台 | 不适用 | 不适用 |
com.ibm.pipeline_run_data |
不适用 | CI/CD/CC | 平台 | 不适用 | 不适用 |
com.ibm.network_compliance |
CI | 平台 | repo | 事件/非事件问题 |
当扫描失败或无法解析附件时,工具会自动创建一个非事故问题来跟踪故障。
资产需求
使用此工具收集的证据是 V2 证据收集工作和相关证据锁定程序更新的一部分。
此新方法专注于基于资产的证据,这意味着通过对这些工件或存储库运行的扫描和测试将证据连接到工件和存储库,并生成证据结果。 例如:
- 具有特定落实的存储库将变为已扫描的落实资产,从而为落实资产创建证据。
- 使用相同的存储库和落实来构建映像。 该图像将成为与源资产,存储库和落实相关的资产。
- 将扫描图像并创建证据。 所有扫描结果都通过证据,其资产以及相关资产进行连接。
要使所有这些功能协同工作,随参数 --asset-type 和 --asset-key 提供的资产必须符合一些要求:
使用 save_repo 命令添加了 repo 个资产
检查 命令参考 以获取准确的用法信息。
必填字段:
url资源库 URL。commit落实 SHA。
使用 save_artifact 命令添加了 artifact 个资产
检查 命令参考 以获取准确的用法信息。
必填字段:
name工件名称。 例如,图像包括注册表、命名空间和图像(例如:us.icr.io/team-images/service)。digest工件摘要(例如:sha256:a2292ed2b82c7a51d7d180c3187dbb0f7cc9ab385a68484c4f117e994acd6192)。
需要对非图像的save_工件进行更改: 收集证据现在支持所有资产类型。 要收集证据以处理任何资产类型
save_artifact 应使用 type 明确保存资产,例如,压缩文件
save_artifact artifact-1 type=zip .... 在收集证据脚本中,
asset-type 应为人工制品,而类型则从人工制品中查询。 为了使此过程正常工作,可可储物柜资产添加已修改为添加任何类型的资产。 保存后,可按如下所示调用收集证据脚本:
collect-evidence --tool-type toolType --evidence-type artifact --asset-key artifact-1 ...
请参考我们的示例应用程序,获取 deployment 该类型的示例实现。https://us-south.git.cloud.ibm.com/open-toolchain/hello-compliance-app
通过这些更改,收集证据脚本将处理所有类型的工件,包括图像和非图像工件。
收集中的多个资产-证据
通过使用收集证据,您可以为多个资产配置同时收集证据。 您可以使用 --assets 标志来启动证据收集,该标志指定多个“资产-键”和“资产-类型”对。 例如,input --assets asset-key1:asset-type1 --assets asset-key2:asset-type2。 如果选择此选项,请不要分别指示资产键和资产类型。
请记住有关多资产集合的以下关键点:
status,attachment,tool-type,evidence-type和upload-logs在所有资产中都是常量。- 缺省情况下,当您指定多个资产时,证据处理将遵循旧流程。 如果指定单个资产,那么将通过特定于工具或附件的流进行证据处理。
- 发生故障时,将针对每个资产创建问题。 成功重新运行证据收集后,将关闭这些问题。 闭包与您指定的资产相关。
- 将生成单一证据文件,该文件具有包含所有组合资产的标识。