collect-エビデンス・スクリプト
この collect-evidence スクリプトは、採用者、ユーザー、および貢献者がコンプライアンスデータを DevSecOps変更管理データフロー に送信するのを支援します。
このスクリプトでは、以下のタスクが実行されます。
- 添付ファイルを結果として処理しようとし、それらの結果からインシデントの問題を作成します。 サポートされるツール出力フォーマットの数は限られています。
- 問題が見つかった場合、スクリプトは猶予期間 (期限) と免除状態を評価します。
- エビデンス・ロッカーにエビデンス資産を作成します。
- エビデンス 自体を作成し、問題と提供された添付ファイルを添付します。
状況が success または failure の場合、 collect-evidence 内に添付ファイルが渡されないと、その特定のタスクとステージのパイプライン・ログが添付ファイルとして取り込まれます。
collect-evidence スクリプトは、パイプラインによって提供されます。 インストールする必要はありません。 このスクリプトには、以下の依存関係があります:
- bash
libstdc++共用ライブラリーlibgcc共用ライブラリー
このツールを使用してエビデンスを報告するベース・イメージに依存関係がインストールされていることを確認してください。
CLIコマンド・アーキテクチャ
collect-evidence の機能は2つのインターフェイスから利用できる:
- シェルスクリプトラッパー (
collect-evidence):後方互換性を提供する伝統的な bash スクリプトインターフェース - ダイレクト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-keypipelinectl 資産内のキー。 以下のコマンドについて説明します。load_artifact <key>またはload_repo <key>--asset-typepipelinectl の資産タイプ。以下のいずれかのタイプにすることができます。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ベースの実装を使用するには、パイプラインで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_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 | ユーザー | 成果物 (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 を個別に指定しないでください。
マルチアセット・コレクションに関する以下のキーポイントに留意してください。
status、attachment、tool-type、evidence-type、およびupload-logsは、すべての資産にわたって一定です。- デフォルトでは、複数の資産を指定すると、エビデンス処理はレガシー・フローに従います。 単一の資産を指定すると、そのツールまたは添付ファイルに固有のフローを介してエビデンス処理が行われます。
- 障害が発生した場合は、資産ごとに問題が作成されます。 これらの問題は、証拠収集が正常に再実行されるとクローズされます。 クロージャーは、指定した資産と相関関係にあります。
- 結合されたすべての資産を含む ID を含む単一のエビデンス・ファイルが生成されます。