Tektonの継続的インテグレーションパイプラインの設定 DevSecOps

このチュートリアルでは、Tekton継続的インテグレーション(CI)パイプラインをセットアップし、コンプライアンスに準拠したツールチェーンを作成することができます。

開始前に

(*) Kubernetes cluster: セットアップ時のみ必要 - Toolchain作成後に変更可能。 特に別のデプロイメントターゲット( CodeEngine など)を使用する場合は、専用のクラスタを作成する必要はありません。 どのクラスタにもアクセスできる IBM Cloud API キーを入力できます。

CIパイプラインは、登録とオンボーディングを必要とするビルド成果物に署名するために、 GaraSign コード署名サービスを使用する。 GaraSign は内部ネットワーク( )を使用する。 IBM このネットワークへのアクセスは、ネットワークにアクセスできる IBM 共有ワーカー内で利用できる。 IBM 9.X、内部ネットワークにアクセスできるシェアードワーカーを利用できる。

  • 次のビデオをご覧ください:

CI ツールチェーンのセットアップの開始

Continuous Deliveryサービスは、ツールチェーンのセットアップをガイドし、論理的な順序でプロセスを作成するテンプレートを提供します。 進行標識に、構成を実行するための各手順が示されます。 CIツールチェーンのテンプレートにアクセスするための手順に従ってください。

  1. IBM Cloudコンソールで、メニューアイコン Menu icon>Platform Automation>Toolchains をクリックします。
  2. 「ツールチェーン」ページで、**「ツールチェーンの作成」**をクリックします。
  3. Infrastructure as Code 」について確認してください。
  4. CI - DevSecOps のプラクティスでコードとして安全なインフラストラクチャを開発するタイルをクリックします。

CIツールチェーンの設定

ようこそのページには、ドキュメントや関連資料へのポインタとともに、ツールチェーンの目的が要約されています。

  1. **「Start」**をクリックします。

  2. IBM Cloudに、同じリージョンとリソースグループのツールチェーン内のツールチェーン名を入力します。

  3. ドロップダウンリストから地域を選択してください

  4. ドロップダウンリストからリソースグループを選択してください

  5. 「続行」 をクリックします。

    現在の手順の構成が完了し、有効である場合にのみ、次の手順に進むことができます。 ガイド付きインストーラーでは、いつでも「 戻る 」をクリックして、前の手順を確認することができます。 一連の手順で入力した構成値はすべてツールチェーン・インストーラーに保存されています。

    いくつかのステップには、詳細設定に切り替えるトグルボタンがあります。 これらの手順では、デフォルトで最小限の設定が表示されます。 ただし、より詳細な設定が必要な上級ユーザーは、「 詳細設定に切り替える 」のトグルをクリックして、基盤となる連携機能のオプションを表示することができます。

CIツールの連携を設定する

デフォルトの設定を確認し、CIツールとの統合を設定するために必要なユーザー定義の設定を行う。 セットアップ中に複数のリポジトリを設定します。 サンプルのリポジトリをクローンすることも、自分のリポジトリを使うこともできますが、ツールチェーンは既存のGit Repos and Issue Trackingリポジトリへのリンクのみをサポートしています。

アプリケーション

ツールチェーン設定のデフォルト情報を確認します。

  1. テンプレートで提供されるデフォルトの設定を受け入れることができます。
  2. 続行 」をクリック

インベントリー

インベントリー・リポジトリーは、CI ツールチェーンでビルドされた成果物の詳細を記録するものです。

  1. テンプレートで提供されるデフォルトの設定を受け入れることができます。
  2. 「続行」 をクリックします。

問題

issueリポジトリには、CIパイプラインの実行中に見つかったissueが記録される。

  1. テンプレートで提供されるデフォルトの設定を受け入れることができます。
  2. 続行 」をクリック

秘密

このツールチェインに含まれるいくつかのツール、そしておそらくカスタマイズ可能なスクリプトには、特権リソースにアクセスするためのシークレットが必要です。 IBM Cloud API キーもそのようなシークレットの例の 1 つです。 これらの秘密は、次のような秘密管理ツールに安全に保管してください。 IBM Key Protect for IBM Cloud, IBM Cloud® Secrets Manager または HashiCorp Vault. 秘密管理ツール をツールチェーンに統合することで、Tektonパイプラインの秘密を簡単に参照できるようになります。

  1. このチュートリアルでは、シークレットの保管庫としてIBM Cloud® Secrets Managerを使用します。 地域リソースグループ、およびサービス名フィールドは、利用可能な選択肢に基づいて自動的に入力されます。 ドロップダウンインジケータをクリックすると、他の選択肢が表示されます。
  2. Secrets Manager インスタンス名を入力します。
  3. ドロップダウンリストから「 承認タイプ 」を選択してください。
  4. 「続行」 をクリックします。

エビデンス・ストレージ

エビデンス リポジトリには、DevSecOps CI パイプラインによって生成されるすべてのエビデンスと成果物が格納されます。

  1. IBM Cloud Object Storageバケットスライダを切り替えて、次のページで設定できるIBM Cloud Object Storageバケットにすべての証拠を保存します。
  2. デフォルト設定を受け入れる。
  3. 「続行」 をクリックします。

クラウド Object Storage バケット

IBM Cloud Object Storage インスタンスと、コンプライアンス証拠ロッカーとして機能する バケットが 必要です。

  1. Cloud Object Storageインスタンスバケット名CloudObject Storageエンドポイントフィールドは自動的に入力されます。
  2. サービスID APIキーを入力します。
    • 好ましい:既存の鍵は、鍵アイコンをクリックしてシークレット保管庫からインポートできます。
    • 既存のキーはコピーして貼り付けることができます。
  3. 「続行」 をクリックします。

「エンドポイント」フィールドは任意です。 ツールチェインのセットアップ中またはパイプラインの実行中に、エンドポイントを選択または指定することを推奨します。

デプロイ

アプリケーションがデプロイされているインベントリターゲットおよび Kubernetes クラスタを設定します:

  1. デフォルトのアプリ名はhello-compliance-app 」です。

  2. IBM Cloud APIキー を入力してください。 APIキーは、いくつかのタスクにおいて IBM Cloud CLIツールと連携するために使用されます。

    • 好ましい:既存の鍵は、鍵アイコンをクリックしてシークレット保管庫からインポートできます。
    • 既存のキーはコピーして貼り付けることができます。
    • ここから「 新規作成(+) 」をクリックすると、新しいキーを作成できます。

    新しく生成されたAPIキーは、すぐに秘密の保管庫に保存することができる。

  3. APIキーが有効で十分なアクセス権がある場合、Container Registry, Container Registry 名前空間, デブ・クラスター地域, リソースグループ, クラスタ名, クラスタ名前空間 が自動的に入力されます。 これらのフィールドは、設定に合わせて自由に変更できます。

  4. 「続行」 をクリックします。

成果物の署名

アーティファクトはツールチェーンによって構築され、インベントリーに記録される。 パイプラインは、Skopeoをデフォルトのツールとして使用し、アーティファクト署名機能を提供します。 既存の GPG 鍵を使用することも、GPG 鍵ペアを新規作成することもできます。

  1. GnuPG秘密鍵を入力する。 あるいは、NEW をクリックして新しいGPGキーを作成することもできます。 詳しくは、GPGキーを生成する を参照してください。
  2. 「続行」 をクリックします。

DevOps Insights

IBM Cloud DevOps Insights はツールチェーンに含まれている。 すべてのデプロイメントと環境から、すべてのビルドのパイプラインテスト結果を表示します。

  1. デフォルトの設定を受け入れる。
  2. 「続行」 をクリックします。

オプションのツール

Slack

Slack に、プルリクエストやCIパイプラインのイベントに関する通知を受け取るように設定します。 ツールチェーン作成後にSlackツールを追加することもできる。

  1. Slack Webhook を入力してください。 詳しくは Slackウェブフック をご覧ください。
  2. メッセージを投稿するには、スラックチャンネルを入力してください。
  3. スラックチーム名を入力します。 たとえば、チームのURLが URL https://team.slack.com の場合、チーム名は team となります。
  4. 自動Slack通知の通知を受け取りたいイベントを選択します。
  5. 「続行」 をクリックします。

共通 DevOps Insights ツールチェイン

DevOps Insights 作成されたツールチェーンに任意で含めることができ、各コンプライアンスチェックの完了後に証拠が公開されます。 このツールチェーンは、既存の DevOps Insights インスタンスを使用して、デプロイメントの記録をInsightsに公開することができます。 統合IDを指定することで、別のツールチェーンから DevOps Insights の統合を連携させることができます。

  1. 現在のツールチェーンを受け入れます。
  2. 「続行」 をクリックします。

ツールチェーン ID はツールチェーンの URL からコピーできます。 ツールチェーンの URL は、次のパターンに従います: https://cloud.ibm.com/devops/toolchains/<toolchain-ID-comes-here>?env_id=ibm:yp:us-south。 URL が https://cloud.ibm.com/devops/toolchains/aaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee?env_id=ibm:yp:us-south の場合、ツールチェーンの ID は aaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee となります。 完全な URL ではなく、IDのみを含める。

また、 DevOps Insights のやり取りに対して、ターゲット環境を設定することもできます。 このパラメータはオプションで、インベントリのターゲット環境の代わりに使用されます。

DevOps Insights

DevOps Insightsのインスタンスを作成し、ツールチェインに使用することができます。 設定が不要な場合、CIパイプラインは自動的にツールチェーンに含まれるinsightインスタンスを使用します。

Delivery Pipeline プライベート・ワーカー

ツールチェーンによってビルドされ、インベントリに記録されたアーティファクトは、イメージを本番環境にデプロイする前に、 GaraSign,、Garantirによって提供されるコード署名サービスによって署名されなければならない。 GaraSign アーティファクト署名を有効にするには、 TaaS プライベートワーカーと IBM CISO 署名証明書が必要です。

Delivery Pipeline プライベート ワーカー ツール統合は、デリバリー パイプライン ワークロードを分離して実行できる 1 つ以上のプライベート ワーカーと接続します。

SonarQube

ツールチェーンの静的コード解析ツールとして SonarQube を設定します。 SonarQube は、ソース・コードの全体的な正常性と品質の概要を提供し、新しいコード内で見つかった問題を強調表示します。 静的コード解析ツールは、複数のプログラミング言語において、ヌルポインタ参照や論理エラー、リソースリークといった見つけにくいバグを検出します。

  1. デフォルトの設定を受け入れます。
  2. 「続行」 をクリックします。

CI ツールチェーンの作成

  1. 「要約」ページで、 作成をクリックします。
  2. ツールチェーンの作成を待つ。 これには、数分かかることがあります。

CI ツールチェーンの探索

これで、画面キャプチャのように2つのパイプラインを持つCDツールチェインが作成された。 ci-pipeline タイルをクリックして、プロモーションパイプラインを開き、実行します。

DevSecOps継続的インテグレーションツールチェーン
DevSecOps継続的インテグレーションツールチェーン

PR-CIパイプラインの実行

ci-pr pipeline を開始するには、アプリケーションのリポジトリでマージリクエストを作成する必要があります。

  1. CI toolchainのページから、pr pipeline タイルをクリックします。 デフォルトでは、compliance-app-<timestamp> という名前で作成されます。

  2. masterブランチからブランチを作成する。

  3. アプリケーションのコードを更新するか、readmeファイルを追加し、変更を保存する。

  4. マージリクエストを送信する。

  5. 「CI ツールチェーン」ページで、「 pr-pipeline 」タイルをクリックします。 ci-pr pipeline がマージリクエストの作成によってトリガーされることを確認してください。

  6. ci-pr pipeline の実行が完了するまでお待ちください。 アプリケーションリポジトリにある対応するマージリクエストは、PRパイプラインのすべてのステージが正常に終了するまで、Pending の状態にあります。

  7. PRパイプラインの実行が成功したら、パイプラインをクリックして、完了した多数のステップを確認し、ページを表示します。 マージリクエストを編集して再送信するには、ステップ3からステップ7までに従ってください。

    DevSecOpsPRパイプライン成功
    DevSecOps PRパイプライン成功

パイプラインにおけるタスクの流れの簡素化

タスクの DevSecOps PR パイプライン・フローでは、ユーティリティ・タスクは省略されています。 例えば、GitHub,クレデンシャルのフェッチなどのステータスチェックの更新などです。 DevSecOpsの世界では、シフト・レフトは、欠陥やセキュリティ脆弱性などの問題を予防し、発見するための実践です。 シフト・レフトは、図に示すように、ソフトウェアのデリバリー・プロセスの早い段階でコンプライアンス・チェックも行う。

DevSecOpsPRタスク
DevSecOps PRタスク

  • コード/リポジトリ上で実行でき、ビルドする必要のないチェック。 このアーティファクトは、非準拠のコードがリポジトリのmasterブランチにマージされるのを防ぐため、できるだけ早い段階で実行すべきである。 エビデンスはPRパイプラインからは収集されない。 パイプラインの目標は、コンプライアンスチェックを可能な限り左にシフトすることだ。
  • すべてのチェックはパイプラインの実行時に行われる。 前のチェックで失敗した場合でも、パイプラインは次のチェックに進みます。 実行に失敗がないかを確認するには、パイプライン評価器が配置されているパイプラインの最終ステップを確認する必要があります。
  • 緊急修正をマージしようとしていて、コンプライアンスチェックを回避したい場合。 修正を示すラベルをマージリクエストに追加してください。 CDパイプラインを実行する際は、同じラベルを指定する必要があります。

PR パイプラインの実行

CIパイプラインは、以下のいずれかの方法で開始できます:

  • 自動: PR パイプラインが正常に実行された後に、その PR を承認してマスター・ブランチにマージします。
  • 手動で:CIパイプラインを手動で実行するには、デリバリーパイプラインのカードを選択し、「 パイプラインを実行 」をクリックして、「 手動トリガー 」を選択します。

このチュートリアルでは、アプリケーションリポジトリのmasterブランチにコードの変更をマージした後、CIパイプラインがトリガーされました。

  1. CI ツールチェーン 」ページで、「 ci-pipeline 」タイルをクリックします。
  2. パイプライン名に対して実行をクリックします。 パイプラインの実行を観察する。 パイプラインの実行が完了するまでお待ちください。
  3. CIパイプラインの実行が成功したら、パイプラインをクリックして完了したステップを探索し、画面キャプチャのようなページを表示する。

CI パイプラインの実行

このドキュメントでは、アプリケーションリポジトリのmasterブランチにコードの変更をマージした後、CIパイプラインがトリガーされました。

  1. 「CI ツールチェーン」ページで、「 ci-pipeline 」タイルをクリックします。
  2. pipeline-run が実行されていることを確認します。 pipeline-run が完了するまで待ちます。

CIパイプラインの実行が正常に完了したら、パイプラインのタスクをクリックして、完了したステップを確認できます。

DevSecOpsCIパイプラインが成功した
DevSecOps CIパイプラインが成功した

パイプラインにおけるタスクの流れの簡素化

タスクの DevSecOps CI パイプライン フローでは、ユーティリティ タスクは省略されています。 例えば、GitHub,クレデンシャルのフェッチなどのステータスチェックの更新などです。 緑色のタスクはエビデンスを出力するものです。

DevSecOps CIタスク
5. 図 DevSecOps CI タスク

CIパイプライン内のすべてのコンプライアンスチェックから収集された証拠は、ツールチェーンの設定時に指定された証拠保管リポジトリに保存されます。 CIからの証拠は、 raw/ci/<pipeline-run-id>/*.json に保存されています。

エビデンスは、ツールチェーン内の DevOps Insights インスタンスに公開されます。 ツールチェーンのDevOps Insightsツールカードをクリックすると移動できます。 「品質ダッシュボード」ページで、収集されたエビデンスを確認できます。

DevSecOpsCIエビデンス
DevSecOps CIエビデンス

パイプラインの実行に失敗がないかを確認するには、パイプライン評価器が配置されているパイプラインの最終ステップを確認する必要があります。

実行中のアプリケーションの表示

CIパイプラインの実行が正常に完了すると、サンプルアプリケーションは Kubernetes クラスターにデプロイされ、devネームスペースで実行されます。

アプリケーション「 URL 」は、CIパイプラインの実行における「 deploy-dev 」タスクの「 run stage 」ステップのログの末尾に記載されています。 URL を使用して、アプリケーションが実行されていることを確認してください。

DevSecOpsCIサンプルアプリ
DevSecOps CIサンプルアプリ

パイプラインの構成

commit-id テキストプロパティを追加する。

  1. **「プロパティーの追加」**をクリックします。
  2. **「文字プロパティー」**を選択します。

commit-id を使わずに手動でパイプラインを起動した場合、パイプラインはアプリの master ブランチから最新のコミット ID を取得します。

''
コミットID

トリガーパラメーターを追加する。

  1. **「パイプラインの実行」**をクリックします。
  2. 手動トリガー 」を選択します。
  3. 「実行 (Run)」 をクリックします。