collect-エビデンス・スクリプト

この collect-evidence スクリプトは、採用者、ユーザー、および貢献者がコンプライアンスデータを DevSecOps変更管理データフロー に送信するのを支援します。

このスクリプトでは、以下のタスクが実行されます。

  • 添付ファイルを結果として処理しようとし、それらの結果からインシデントの問題を作成します。 サポートされるツール出力フォーマットの数は限られています。
  • 問題が見つかった場合、スクリプトは猶予期間 (期限) と免除状態を評価します。
  • エビデンス・ロッカーにエビデンス資産を作成します。
  • エビデンス 自体を作成し、問題と提供された添付ファイルを添付します。

状況が success または failure の場合、 collect-evidence 内に添付ファイルが渡されないと、その特定のタスクとステージのパイプライン・ログが添付ファイルとして取り込まれます。

collect-evidence スクリプトは、パイプラインによって提供されます。 インストールする必要はありません。 このスクリプトには、以下の依存関係があります:

  • bash
  • libstdc++ 共用ライブラリー
  • libgcc 共用ライブラリー

このツールを使用してエビデンスを報告するベース・イメージに依存関係がインストールされていることを確認してください。

CLIコマンド・アーキテクチャ

collect-evidence の機能は2つのインターフェイスから利用できる:

  1. シェルスクリプトラッパー (collect-evidence):後方互換性を提供する伝統的な bash スクリプトインターフェース
  2. ダイレクトCLIコマンド (cocoa locker evidence collect):全機能にアクセスできるネイティブCLIインターフェイス

バージョン・トグル

collect-evidence シェルスクリプトは2つの実装バージョンをサポートしており、 collect-evidence-version 環境プロパティを使って切り替えることができる:

バージョン 実装 ステータス 説明
v1 レガシー 使用可能 完全な後方互換性を持つオリジナルのbashベースの実装
v2 CLIベース デフォルト cocoa locker evidence collect CLIコマンドをラップする最新の実装

使用法

スクリプト collect-evidence には、以下のパラメーターが必要です。

  • --tool-type エビデンス・データを提供するツールの ID。 以下に例を示します。 「owasp-zap-ui」、「cra」
  • --evidence-type 証拠タイプのID。 以下に例を示します。 com.ibm.image_vulnerability_scan, com.ibm.unit_tests
  • --asset-key pipelinectl 資産内のキー。 以下のコマンドについて説明します。 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 ( successfailure、または 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ベースの実装を使用するには、パイプラインでenvironmentプロパティを設定します:

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コマンドの完全な参照と使用可能なすべてのパラメータについては、 cocoa locker evidence collectを 参照してください。

使用例

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 コード・リスク・アナライザー
cra-cis IBM コード・リスク・アナライザー CIS
va Vulnerability Advisor ~のために IBM Cloud Container Registry
gosec GoLang セキュリティ・スキャナー
xray JFrog Xray - 脆弱性スキャンとコンテナセキュリティ
owasp-zap OWASP Zed Attack Proxy (ZAP)
owasp-zap-ui OWASP Zed 攻撃プロキシ UI (ZAP UI)
sonarqube SonarQube スキャン
peer-review ピアレビュー・スキャン
twistlock TwistLock
cims コンテナイメージ・マルチスキャナー(CIMS)
mend メンド・スキャン
mend-sast SASTスキャンの修正
checkov チェコフ・スキャン
cra-tf Terraform用コードリスクアナライザー
tfsec Terraform セキュリティスキャナー
fips-scanner FIPS(連邦情報処理標準)スキャナー
detect-secrets シークレットの検出
ciso-code-signing CISOコード署名ツール
sysdig シスディグ・スキャン
cyclonedx CycloneDX という形式をとっている。 課題管理のためのツール検出は CycloneDX メタデータに基づいて行われます
grype Grype Scan

CycloneDX metadataでは、課題管理にツール検出機能を利用しています。

サポートされていないツール・タイプを指定して collect-evidence スクリプトを呼び出した場合、スクリプトは添付ファイルの処理を試行しません。 さらに、問題の処理はスキップされ、エビデンス収集は停止されません。

スクリプトがサポートされているツールから添付ファイルを提供しているが、添付ファイルを処理できない場合、問題の処理はスキップされ、エビデンス・コレクションは停止されません。

エビデンス・タイプ

--evidence-type パラメーターを使用して、エビデンス・タイプを設定できます。 任意のタイプを設定できますが、 IBM Cloud® Compliance Manager は以下のエビデンス・タイプをサポートします。

  • com.ibm.unit_tests
  • com.ibm.detect_secrets
  • com.ibm.branch_protection
  • com.ibm.static_scan
  • com.ibm.code_vulnerability_scan
  • com.ibm.code_bom_check
  • com.ibm.code_cis_check
  • com.ibm.cloud.image_vulnerability_scan
  • com.ibm.cloud.image_signing
  • com.ibm.dynamic_scan
  • com.ibm.cloud.image_signing
  • com.ibm.acceptance_tests
  • com.ibm.prod_change_request
  • com.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 ユーザー 成果物 (artifact) インシデント以外の問題
com.ibm.dynamic_scan owasp-zap, owasp-zap-ui CI プラットフォーム 成果物 (artifact) インシデント/ノンインシデント問題
com.ibm.cloud.image_vulnerability_scan va, sysdig, xray CI/CC プラットフォーム 成果物 (artifact) インシデント/ノンインシデント問題
com.ibm.prod_change_request gitlab CD プラットフォーム 成果物 (artifact) インシデント以外の問題
com.ibm.close_change_request gitlab CD プラットフォーム 成果物 (artifact) インシデント以外の問題
com.ibm.cloud.slsa tekton-chains CI プラットフォーム 成果物 (artifact) インシデント以外の問題
com.ibm.cloud.verify_signature ciso-code-signing CD プラットフォーム 成果物 (artifact) インシデント以外の問題
com.ibm.pipeline_logs NA CI/CD/CC プラットフォーム NA NA
com.ibm.pipeline_run_data NA CI/CD/CC プラットフォーム NA NA
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_artifact で必要な変更: 証拠収集ですべてのアセット・タイプがサポートされるようになりました。 任意の資産タイプで作業するための証拠収集用 save_artifact 例えば、 type を使用して、アセットを明示的に保存する必要があります。zip 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

これらの変更により、collect-Evidence スクリプトは、イメージ成果物と非イメージ成果物の両方を含む、すべてのタイプの成果物を処理します。

収集中の複数の資産-エビデンス

証拠収集を使用することで、複数の資産に対する証拠の同時収集を構成できます。 複数の資産キーと資産タイプのペアを指定する --assets フラグを使用して、証拠収集を開始します。 例えば、input --assets asset-key1:asset-type1 --assets asset-key2:asset-type2 です。 このオプションを選択する場合は、asset-key と asset-type を個別に指定しないでください。

マルチアセット・コレクションに関する以下のキーポイントに留意してください。

  • statusattachmenttool-typeevidence-type、および upload-logs は、すべての資産にわたって一定です。
  • デフォルトでは、複数の資産を指定すると、エビデンス処理はレガシー・フローに従います。 単一の資産を指定すると、そのツールまたは添付ファイルに固有のフローを介してエビデンス処理が行われます。
  • 障害が発生した場合は、資産ごとに問題が作成されます。 これらの問題は、証拠収集が正常に再実行されるとクローズされます。 クロージャーは、指定した資産と相関関係にあります。
  • 結合されたすべての資産を含む ID を含む単一のエビデンス・ファイルが生成されます。