IBM Cloud Docs
DevSecOps中的资产创建和证据收集

DevSecOps中的资产创建和证据收集

在DevSecOps流程领域,资产创建和证据收集可确保安全与软件开发生命周期的每个阶段无缝集成。 这种方法体现了“左倾”的概念,其中安全不是事后的思考,而是发展过程中的固有部分。 DevSecOps,及其DevSecOps持续集成和Continuous Delivery (CI/CD),使团队能够在最早阶段发现漏洞,从而促进合规软件的发布。

资产创建和证据收集在 Onepipeline 生态系统中起着关键作用。 为了与安全标准保持一致,必须遵循本全面指南中概述的准则。 通过这样做,您可以确保您的软件开发过程不仅高效,而且从头到脚都是安全的。

在 DevSecOps 中定义资产

在 DevSecOps, 资产是需要经过严格测试和扫描的基本实体。 这些资产包含各种表单,例如存储库中对 Docker 映像的现有 Git 落实。 资产是证据收集过程的焦点,表示对其执行扫描或测试的对象。 值得注意的是,DevSecOps's灵活性超越了传统的代码和图像,包括管道运行或 COS(Cloud Object Storage)桶等抽象实体,只要能收集到它们的证据。

资产类型多种多样。

资产类型
资产类型。

为了实现最佳清晰度,必须明确识别资产。 下面是一些示例:

  • 落实资产: 包含存储库和落实散列: https://repo.url/org/repo#
  • 映像资产: 包含 Docker 映像及其摘要: docker://registry.URL/name@sha256:
  • 管道运行资产: 表示管道和运行标识:

pipelinerun://<PIPELINE_ID>/<RUN_ID>

  • 其他资产: 需要标准 URL。 例如,具有文件名的落实资产:

https://repo.url/org/repo# / 工件资产: /工件。

建议不要使用可变标签 (如标签,分支或其他引用),因为这些标签可能会被重新处理或移动,从而导致潜在的复杂情况。

标准化通用资产的库存

要保持一致且有效的库存管理,在使用 save_artifactcocoa inventory add 命令时验证特定字段至关重要。 遵守以下准则将确保根据所提供的信息采取适当行动:

  1. 类型: 用于指示工件类型的保留关键字: o commit for commit assets o image assets o generic for pipeline-run assets 对于任何其他类型的工件,您可以选择适当指示其固有类型 (例如,) 的字符串类型。部署文件,tar 文件

  2. 名称: 在整个管道运行期间维护静态工件名称。 避免在名称中包含诸如落实散列之类的动态元素,以确保自动关闭问题的正确性。 示例: o us.icr.io/my-registry/ my-app:20230828074614-master-commit-1@sha256:sha256-1 o my-app-202304211845444721_IKS_deployment

  3. 出处: 提供标准域 URL 以建立工件的来源。 示例: o us.icr.io/my-registry/my-app:20230828074614-master-commit-1@sha256:sha256-1 o https://raw.github.ibm.com/org/my-app/commit-1/deployment_iks.yml

  4. 摘要: 遵循定义的正则表达式模式: 以 "sha256" 开头,后跟冒号 (:),然后是实际的 SHA256 散列 (sha256: ) ). 示例: o sha256:sha256-1

  5. 签名: 如果对工件进行了签名,请包含相关签名信息。 遵循这些标准化准则加强了库存管理流程,确保准确跟踪和检索资产。

存储资产信息的步骤

  1. 使用 save_repo 命令:

    使用以下格式在版本库中保存提交的资产信息。

    示例:

    save_repo app-repo \
    url=https://github.ibm.com/org/my-app \
    path=my-app \
    commit=commit1 \
    branch=master \
    buildnumber=1
    
  2. 使用 Save_artifact 命令,通过使用 save_artifact 命令来存储图像和部署等各种资产类型的信息

示例:

图像资产使用 save_artifact 命令:

save_artifact app-image \
name=us.icr.io/my-registry/my-app:20230828074614-master-commit-1@sha256:sha2561 \
type=image \
digest=sha256:sha2561 \
tags=mytag1 \
source=https://github.ibm.com/org/my-app/commit-1 \
signature=sign-1 \
provenance=us.icr.io/my-registry/my-app:20230828074614-master-commit-1@sha256:sha2561

对非图像资产使用 save_artifact 命令:

save_artifact artifact-1 \
name=my-app_IKS_deployment \
type=deployment \
signature=sign2 \
deployment_type=IKS \
provenance=https://raw.github.ibm.com/org/my-app/commit-1/deployment_iks.yml

根据资产信息创建库存条目的步骤

使用 可可库存添加:

论据信息
自变量 描述 必需/可选 在代码/备注中使用
工件 工件名称。 [string] [必需] 此字段用于问题管理中的主题
版本 给定应用程序的版本 [string] [必需] 工件的版本
存储库 URL 应用程序的存储库 [string] [必需] 构建此资产的存储库的 URL
管道运行标识 管道运行的标识 [string] [必需] 用于限定 CD 和 CC 中的证据范围
Commit-sha 应用程序版本的精确落实 [string] [必需] 在其中构建此资产的存储库 URL 的落实
名称 应用程序名称 [string] [必需] 资产的文件名或基本库存条目
构建号 版本号 [string] [必需] 创建的资产的构建号,用于洞察更新
类型 文物类型:其中之一
容器映像、虚拟、映像、文件、软件包 [string] [必需] 资产类型,必须与收集证据调用前使用 save_artifact 命令保存的类型相同。
app-工件 获取资产的其他信息 [字符串] [可选]
sha256 工件的 sha256 散列 [string] [必需] 用于定义锁定程序中资产的路径
起源 存储工件的标准 URL [string] [必需]
特征符 工件特征符 [string] [必需] 将用于验证资产的签名,需要更多说明
环境 应添加条目的环境的名称 [字符串] [可选] 将添加条目的库存分支 (缺省为主项)

示例:

  1. 为图像资产添加可可库存:

    cocoa inventory add \
    --artifact=us.icr.io/my-registry/my-app:20230828074614-master-commit-1@sha256:sha2561 \
    --name=my-app \
    --app-artifacts='{ "app": "my-app", "tags": "20230828074614-master-commit1" }' \
    --signature=sign1 \
    --provenance=us.icr.io/my-registry/my-app:20230828074614-master-commit-1@sha256:sha2561\
    --sha256=sha256:sha2561 \
    --type=image \
    --repository-url=https://github.ibm.com/org/my-app \
    --commit-sha=commit1 \
    --version=commit1 \
    --build-number=1 \
    --pipeline-run-id=pipeline-run-1\
    --org=Org\
    --repo=my-inventory-20230421184544472 \
    --git-provider=github \
    --git-token-path=./inventory-token \
    --git-api-url=https://github.ibm.com/api/v3
    
  2. 为非图像资产添加可可库存:

    cocoa inventory add \
    --artifact=my-app_IKS_deployment \
    --name=my-app_IKS_deployment \
    --app-artifacts='{ "app": "my-app", "tags": "20230828074614-master-commit1" }' \
    --signature=sign2 \
    --provenance=https://raw.github.ibm.com/org/my-app/commit-1/deployment_iks.yml \
    --sha256=sha256:sha2562 \
    --type=deployment \
    --repository-url=https://github.ibm.com/org/my-app \
    --commit-sha=commit1 \
    --version=commit1 \
    --build-number=1 \
    --pipeline-run-id=pipeline-run-1\
    --org=Org\
    --repo=my-inventory-20230421184544472 \
    --git-provider=github \
    --git-token-path=./inventory-token \
    --git-api-url=https://github.ibm.com/api/v3
    

在 DevSecOps 中定义证据

证据是证明已执行或即将执行特定类型和工具的扫描检查或测试的条目。 证据包含指向问题,资产,作用域和附件的指针,但包含最少的数据。

使用资产信息收集证据的步骤

使用 collect-evidence 对先前资产信息进行证据收集

示例:

  1. 工件资产的证据收集:
      	collect-evidence \
            --tool-type "jest" \
            --status "success" \
            --evidence-type "com.ibm.unit_tests" \
            --asset-type "artifact" \
            --asset-key "artifact-1"
    
  2. 存储库资产的证据收集:
    collect-evidence \
        --tool-type "jest" \
        --status "success" \
        --evidence-type "com.ibm.unit_tests" \
        --asset-type "repo" \
        --asset-key "repo-1"
    

在 CD 管道中,部署应该引用出处字段而不是工件来下载工件