継続的コンプライアンス・パイプライン

継続的コンプライアンス・パイプライン (CC パイプライン) は、デプロイされた成果物とそのソース・リポジトリーを定期的にスキャンします。

CC パイプラインは、 environment-tag 値を使用して、確認する最新のデプロイ済み状態を判別することにより、 inventory リポジトリーからのエントリーを処理します。 アーティファクトとソース・リポジトリーをスキャンして検査を実行した後、パイプラインによって新しいインシデント問題が作成されるか、インシデント・リポジトリー内の既存のインシデント問題が更新されます。 最後に、これらの問題とその結果を用いて、パイプラインは証拠を収集し、発見された人工物のコンプライアンス・ステータスを更新するために証拠を要約する。

ステージとタスク

次の表は、CCパイプラインで実行されるタスクの一覧です。 さらに、この表には、以下の各ステージの概要も示されています。

  • タスクまたはステージ: これは、 .pipeline-config.yaml 構成ファイル内で定義されているステージの名前を参照します。

  • 簡略説明: ステージの実行中に実行されたアクションについて簡潔に説明します。

  • 許容されるカスタマイズ: これは、 .pipeline-config.yaml ファイルにカスタム・スクリプトを挿入することによって、ステージのデフォルトの動作を変更または置換する柔軟性がユーザーにあるかどうかを示します。

  • デフォルトのリファレンス実装: これは、DevSecOpsパイプラインには、ステージの定義済みまたはデフォルトの実装が付属しています。 特に、特定のステージでは unit-tests または setup、DevSecOpsパイプラインは、すぐに使用できる実装を提供しません。 代わりに、ユーザーは、アプリケーションの要件に合わせて調整されたカスタム・スクリプトまたはコードを提供する必要があります。

  • エビデンス・コレクション: ステージが標準エビデンスの収集を実行するかどうかを示します。 いつDevSecOpsパイプラインステージのリファレンス実装を提供すると、証拠収集がすぐに実行されます。 ただし、 「ユーザー」 がこれらの事前定義ステージを変更または置換することを選択した場合は、カスタム実装に適切なエビデンス・コレクションが含まれていることを確認する必要があります。 ユーザーは、DevSecOpsパイプラインはすぐに使用できる実装を提供しないため、証拠収集を実行する必要があります。 この列は、エビデンス収集の実行を担当するエンティティー (ユーザー/パイプライン) を示します。

  • スキップ可能 (バージョン> = v10に適用可能): これは、 .pipeline-config.yaml でスキップ・プロパティーを true に設定することによって、ユーザーがこのステージの実行をオプトアウトできるかどうかを示します。 ただし、この機能を使用する場合、特に証拠を収集するために設計されたステージでは注意が必要です。 このようなステージをスキップすると、ビルドに不可欠な証拠が欠落する可能性があります。

継続的コンプライアンスパイプラインの段階とタスク
タスクまたはステージ 簡略説明 .pipeline-config.yaml で許容されるカスタマイズ デフォルトの参照実装 証拠収集 許容されるスキップ
start パイプライン環境をセットアップします。 いいえ はい パイプライン いいえ
setup ビルドおよびテスト環境をセットアップします。 はい いいえ いいえ いいえ
detect-secrets アプリケーション・コードに対して検出シークレット・スキャンを実行します。 はい はい パイプライン いいえ
static-scan アプリケーション・コードに対して静的スキャン・コードを実行します。 はい はい パイプライン はい
dynamic-scan アプリケーションで動的スキャンを実行します。 はい はい パイプライン はい
compliance-checks アプリ・リポジトリーに対して Code Risk Analyzer スキャンおよびその他のコンプライアンス・チェックを実行します。 はい はい パイプライン はい
scan-artifact ビルドされた成果物をスキャンします。 はい はい パイプライン はい
finish ログ・ファイル、成果物、およびエビデンスを収集して作成し、エビデンス・ロッカーにアップロードします。 はい はい パイプライン はい

.pipeline-config.yaml ファイルを使用してステージをカスタマイズする方法について は、 カスタムスクリプトと パイプラインパラメータリストを 参照してください。

ステージとエビデンス

以下の表は、様々な種類の証拠と、その収集が行われるパイプライン内の特定の段階との関係を示している。

継続的インテグレーションのステージと関連証拠
タスクまたはステージ エビデンス・タイプ
start NA
setup NA
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 スクリプトを使用してカスタマイズ可能なユーザー・ステージ内で証拠を収集する方法について詳しくは、 収集-エビデンス・スクリプト を参照してください。

成果物およびリポジトリーのインベントリーの処理

開始ステージはインベントリーを複製し、実稼働環境で最新のエントリーを処理します。 この環境を指定するには、以下のパイプライン・パラメーターを指定します。

継続的コンプライアンス・パイプラインの成果物とリポジトリ
名前 タイプ 説明 必須またはオプションです
environment-tag テキスト インベントリー内の最新のターゲット環境を表すタグ。 例: prod_latest または us-south_prod_latest 必須
environment-branch テキスト インベントリー内のターゲット環境を表すブランチ名。 例: prod 非推奨-代わりに environment-tag を使用してください
region-prefix テキスト ターゲット環境の latest タグの接頭部としての領域名。 次に例を示します。 us-south 非推奨-代わりに environment-tag を使用してください

インベントリー・エントリーには、デプロイされた成果物とリポジトリー・ソースが含まれます。 パイプラインは、以下の pipelinectl コマンドを使用して、インベントリー項目を処理および収集し、それらをパイプライン実行用に登録します。

開始ステージでは、検出されたリポジトリー、各リポジトリー、および各コミット・ペアも複製されます。 したがって、例えば、コミット sha1 を使用する repo1 はフォルダーに複製されますが、パイプラインは同じ repo1 コミット sha2 を使用する別のフォルダーに複製します。

パイプラインは、以下の例のように、単純な命名表記と増分索引を使用して、パイプライン実行の成果物とリポジトリーを登録します。

  • 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

このコマンドは、実行中のパイプラインに応じて、 cccdci、または pr のいずれかを返します。 これにより、必要に応じてパイプライン間でセットアップ・スクリプトを再利用できます。

シークレット・スキャンの検出

IBM Detect Secrets ツールは、アプリ・コード内でシークレットが可視状態になっている場所を特定します。 スキャン用にリポジトリーをセットアップする方法について詳しくは、 ここ を参照してください。

静的コード・スキャン

静的コード・スキャン・ステージでは、指定されたアプリ・リポジトリー・コードベースで静的コード・アナライザー・ツールを実行します。

CC パイプラインは、スキャナーのインベントリー内にあるリポジトリーを提供します。

パイプラインに静的コードを追加するために、以下のいずれかの方法を使用できます。

  • SonarQube ツールをツールチェーンに追加することによって、既に実行中の SonarQube インスタンス名、URL、および資格情報を指定します。 static-scan タスクは指定されたレポをスキャンします。
  • カスタム実装のために、 .pipeline-config.yaml ファイル内の static-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) 検査 すべての依存関係のペディグリーを取り込む、指定されたリポジトリーの BOM です。 この BOM はさまざまな細分度で収集されます。 例えば、BOM は、ビルドで使用される基本イメージのリスト、基本イメージにあるパッケージのリスト、基本イメージの上にインストールされるアプリ・パッケージのリストを収集します。 BOM は分析結果のグラウンド・トゥルースとして機能します。ポリシー・ゲートを適用するために使用できることもあります。 Code Risk Analyzer ツールを使用します。

これらのスクリプトは、パイプラインが認識するすべてのアプリ・リポジトリーに対して実行されます。 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 定義を含むパイプライン・ログ・ファイル (パイプライン・データ自体) も保存します。 スキャンに従って作成された問題、および結果がエビデンスにも添付されていることを確認します。