DevSecOps による継続的インテグレーション・パイプラインのセットアップ
このチュートリアルでは、Tekton継続的インテグレーション(CI)パイプラインをセットアップし、コンプライアンスに準拠したツールチェーンを作成することができます。
開始前に
-
Kubernetesクラスタの作成 をIBM Cloud® Kubernetes Serviceに配置してアプリケーションをデプロイします。
-
オペレーティングシステムにIBM Cloud CLI をインストールして、IBM Cloudリソースとやり取りできるようにします。
-
アプリケーションのdockerアーティファクトに署名するために、適切なエンコーディングでアーティファクト署名キー を作成します。
-
ツールチェーン・シークレットを作成する ことで、さまざまな統合やセキュアにアクセスできます。
-
IBM Cloud® Object Storage をコンプライアンス・エビデンス・ロッカーとして設定し、パイプライン実行のエビデンスを永続的に保存します。
-
対応する統合に割り当てられているIBM Cloud® Identity and Access Management(IAM)権限を検証してください。
-
IBM CloudでDevSecOpsを始める のビデオを見る。
CI パイプラインは、GaraSign コード署名サービスを使用して、登録とオンボーディングが必要なビルド成果物に署名します。 GaraSign は内部の IBM ネットワークを使用し、TaaS チームは内部の IBM ネットワークにアクセスできる Tekton プライベート ワーカーを提供しています。 TaaS Tektonの個人ワーカーを使用するには、登録とオンボードが必要です。
CI ツールチェーンのセットアップの開始
Continuous Deliveryサービスは、ツールチェーンのセットアップをガイドし、論理的な順序でプロセスを作成するテンプレートを提供します。 進行標識に、構成を実行するための各手順が示されます。 CIツールチェーンのテンプレートにアクセスするための手順に従ってください。
- IBM Cloud コンソールにアクセスします。
- メニュー
をクリックし、DevOps を選択します。
- 「ツールチェーン」ページで、**「ツールチェーンの作成」**をクリックします。
- Infrastructure as Code をチェックしてください。
- CI - DevSecOps のプラクティスでコードとして安全なインフラストラクチャを開発するタイルをクリックします。
CIツールチェーンの設定
ようこそのページには、ドキュメントや関連資料へのポインタとともに、ツールチェーンの目的が要約されています。
-
**「Start」**をクリックします。
-
IBM Cloudに、同じリージョンとリソースグループのツールチェーン内のツールチェーン名を入力します。
-
ドロップダウンリストから地域を選択します。
-
ドロップダウンリストからリソースグループを選択します。
-
「続行」 をクリックします。
現在の手順の構成が完了し、有効である場合にのみ、次の手順に進むことができます。 戻る をクリックすると、ガイド付きインストーラの前のステップをいつでも見ることができます。 一連の手順で入力した構成値はすべてツールチェーン・インストーラーに保存されています。
いくつかのステップには、詳細設定に切り替えるトグルボタンがあります。 これらのステップは、デフォルトで最小限のコンフィギュレーションを提示する。 しかし、より細かい制御を必要とする上級ユーザーは、Switch to advanced configuration トグルをクリックして、基盤となる統合のオプションを表示することができます。
CIツールの統合を設定する
デフォルトの設定を確認し、CIツールとの統合を設定するために必要なユーザー定義の設定を行う。 セットアップ中に複数のリポジトリを設定します。 サンプルのリポジトリをクローンすることも、自分のリポジトリを使うこともできますが、ツールチェーンは既存のGit Repos and Issue Trackingリポジトリへのリンクのみをサポートしています。
アプリケーション
ツールチェーン設定のデフォルト情報を確認します。
- テンプレートで提供されるデフォルトの設定を受け入れることができます。
- 続けるをクリックする
インベントリー
インベントリー・リポジトリーは、CI ツールチェーンでビルドされた成果物の詳細を記録するものです。
- テンプレートで提供されるデフォルトの設定を受け入れることができます。
- 「続行」 をクリックします。
問題
issueリポジトリには、CIパイプラインの実行中に見つかったissueが記録される。
- テンプレートで提供されるデフォルトの設定を受け入れることができます。
- 続けるをクリックする
秘密
このツールチェインに含まれるいくつかのツール、そしておそらくカスタマイズ可能なスクリプトには、特権リソースにアクセスするためのシークレットが必要です。 IBM Cloud API キーもそのようなシークレットの例の 1 つです。 これらの秘密は、IBM Key Protect for IBM Cloud, IBM Cloud® Secrets Manager, HashiCorp Vault などの秘密管理ツールに安全に保管してください。 秘密管理ツール をツールチェーンに統合することで、Tektonパイプラインの秘密を簡単に参照できるようになります。
- このチュートリアルでは、シークレットの保管庫としてIBM Cloud® Secrets Managerを使用します。 地域、リソースグループ、およびサービス名フィールドは、利用可能な選択肢に基づいて自動的に入力されます。 ドロップダウンインジケータをクリックすると、他の選択肢が表示されます。
- Secrets Manager インスタンス名を入力します。
- ドロップダウンリストから認証タイプを選択します。
- 「続行」 をクリックします。
エビデンス・ストレージ
エビデンス リポジトリには、DevSecOps CI パイプラインによって生成されるすべてのエビデンスと成果物が格納されます。
- IBM Cloud Object Storageバケットスライダを切り替えて、次のページで設定できるIBM Cloud Object Storageバケットにすべての証拠を保存します。
- デフォルト設定を受け入れる。
- 「続行」 をクリックします。
クラウド Object Storage バケット
IBM Cloud Object Storage インスタンス と バケツ がなければ、コンプライアンス・エビデンス・ロッカーとして機能しません。
- Cloud Object Storageインスタンス、バケット名、CloudObject Storageエンドポイントフィールドは自動的に入力されます。
- サービスID APIキーを入力します。
- 好ましい:既存の鍵は、鍵アイコンをクリックしてシークレット保管庫からインポートできます。
- 既存のキーをコピー&ペーストすることもできる。
- 「続行」 をクリックします。
エンドポイント・フィールドは任意である。 ツールチェインのセットアップ中またはパイプラインの実行中に、エンドポイントを選択または指定することを推奨します。
デプロイ
アプリケーションをデプロイするインベントリー・ターゲットとKubernetesクラスターを設定します:
-
デフォルトのアプリ名は
hello-compliance-app
です。 -
IBM Cloud API Key を入力します。 APIキーは、IBM Cloud CLIツールといくつかのタスクでやりとりするために使用されます。
- 好ましい:既存の鍵は、鍵アイコンをクリックしてシークレット保管庫からインポートできます。
- 既存のキーをコピー&ペーストすることもできる。
- New + をクリックすると、ここから新しいキーを作成できます。
新しく生成されたAPIキーは、すぐに秘密の保管庫に保存することができる。
-
APIキーが有効で十分なアクセス権がある場合、Container Registry, Container Registry 名前空間, デブ・クラスター地域, リソースグループ, クラスタ名, クラスタ名前空間 が自動的に入力されます。 これらのフィールドは、あなたの設定に合わせて変更することができます。
-
「続行」 をクリックします。
アーティファクトへのサイン
アーティファクトはツールチェーンによって構築され、インベントリーに記録される。 パイプラインは、Skopeoをデフォルトのツールとして使用し、アーティファクト署名機能を提供します。 既存の GPG 鍵を使用することも、GPG 鍵ペアを新規作成することもできます。
- GnuPG秘密鍵を入力する。 あるいは、NEW をクリックして新しいGPGキーを作成することもできます。 詳しくは、GPGキーを生成する を参照してください。
- 「続行」 をクリックします。
DevOps Insights
IBM Cloud DevOps Insights はツールチェーンに含まれている。 すべてのデプロイメントと環境から、すべてのビルドのパイプラインテスト結果を表示します。
- デフォルトの設定を受け入れる。
- 「続行」 をクリックします。
オプションのツール
Slack
Slack に、プルリクエストやCIパイプラインのイベントに関する通知を受け取るように設定します。 ツールチェーン作成後にSlackツールを追加することもできる。
- あなたの Slackウェブフックを入力してください。 詳しくは Slackウェブフック をご覧ください。
- メッセージを投稿するには、スラックチャンネルを入力してください。
- スラックチーム名を入力します。 例えば、チームURLが
https://team.slack.com
の場合、チーム名はteam
となります。 - 自動Slack通知の通知を受け取りたいイベントを選択します。
- 「続行」 をクリックします。
共通 DevOps Insights ツールチェイン
DevOps Insightsは、任意で、作成されたツールチェーンに含めることができ、各コンプライアンス・チェックの証拠が公表された後に含めることができる。 ツールチェーンは、既存の DevOps Insights インスタンスを使用して、デプロイメント記録を insights にパブリッシュできます。 DevOps Insights統合は、統合IDを指定することで、他のツールチェーンからリンクすることができます。
- 現在のツールチェーンを受け入れます。
- 「続行」 をクリックします。
ツールチェーン 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 署名証明書が必要です。 詳しくは、1パイプラインCIパイプラインでGaraSignを使う を参照してください。
Delivery Pipeline プライベート ワーカー ツール統合は、デリバリー パイプライン ワークロードを分離して実行できる 1 つ以上のプライベート ワーカーと接続します。
SonarQube
ツールチェーンの静的コード解析ツールとして SonarQube を設定します。 SonarQube は、ソース・コードの全体的な正常性と品質の概要を提供し、新しいコード内で見つかった問題を強調表示します。 静的コード・アナライザーは、ヌル・ポインタの非参照、ロジック・エラー、複数のプログラミング言語のリソース・リークなど、厄介なバグを検出する。
- デフォルト設定を受け入れる。
- 「続行」 をクリックします。
CI ツールチェーンの作成
- 「要約」ページで、 作成をクリックします。
- ツールチェーンの作成を待つ。 これには、数分かかることがあります。
CI ツールチェーンの探索
これで、画面キャプチャのように2つのパイプラインを持つCDツールチェインが作成された。 ci-pipeline
タイルをクリックして、プロモーションパイプラインを開き、実行します。

PR-CIパイプラインの実行
ci-pr pipeline
を開始するには、アプリケーションリポジトリにマージリクエストを作成する必要があります。
-
CI toolchainのページから、
pr pipeline
タイルをクリックします。 デフォルトでは、compliance-app-<timestamp>
という名前で作成されます。 -
masterブランチからブランチを作成する。
-
アプリケーションのコードを更新するか、readmeファイルを追加し、変更を保存する。
-
マージリクエストを送信します。
-
CI toolchainページで、pr-pipeline タイルをクリックします。
ci-pr pipeline
がマージリクエストの作成によってトリガーされることを確認してください。 -
ci-pr pipeline
の実行が完了するまで待つ。 アプリケーションリポジトリにある対応するマージリクエストは、PRパイプラインのすべてのステージが正常に終了するまで、Pending
の状態にあります。 -
PRパイプラインの実行が成功したら、パイプラインをクリックして、完了した多数のステップを確認し、ページを表示します。 マージリクエストを編集して再送信するには、ステップ3からステップ7までに従ってください。
図2。 DevSecOps PRパイプラインが成功
パイプラインにおけるタスクの流れの簡素化
タスクの DevSecOps PR パイプライン・フローでは、ユーティリティ・タスクは省略されています。 例えば、GitHub,クレデンシャルのフェッチなどのステータスチェックの更新などです。 DevSecOpsの世界では、シフト・レフトは、欠陥やセキュリティ脆弱性などの問題を予防し、発見するための実践です。 シフト・レフトは、図に示すように、ソフトウェアのデリバリー・プロセスの早い段階でコンプライアンス・チェックも行う。

- コード/リポジトリ上で実行でき、ビルドする必要のないチェック。 このアーティファクトは、非準拠のコードがリポジトリのmasterブランチにマージされるのを防ぐため、できるだけ早い段階で実行すべきである。 エビデンスはPRパイプラインからは収集されない。 パイプラインの目標は、コンプライアンスチェックを可能な限り左にシフトすることだ。
- すべてのチェックはパイプラインの実行時に行われる。 前のチェックが失敗しても、パイプラインは次のチェックに進む。 実行中に失敗があるかどうかを評価するには、パイプラインの最終ステップをチェックする必要があります。
- 緊急修正をマージしようとしていて、コンプライアンスチェックを回避したい場合。 修正を示すラベルをマージリクエストに追加してください。 CDパイプラインを実行する際には、同じラベルを提供しなければならない。
PR パイプラインの実行
CIパイプラインは、以下のいずれかの方法で開始できる:
- 自動: PR パイプラインが正常に実行された後に、その PR を承認してマスター・ブランチにマージします。
- 手動でCIパイプラインを手動でトリガーするには、デリバリーパイプラインカードを選択し、パイプラインの実行をクリックし、手動トリガーを選択します。
このチュートリアルでは、コードの変更をアプリケーションリポジトリのmasterブランチにマージした後にCIパイプラインが起動しました。
- CI toolchain ページで、ci-pipeline タイルをクリックします。
- パイプライン名に対して実行をクリックします。 パイプラインの実行を観察する。 パイプラインの実行が完了するのを待つ。
- CIパイプラインの実行が成功したら、パイプラインをクリックして完了したステップを探索し、画面キャプチャのようなページを表示する。
CI パイプラインの実行
このドキュメントでは、アプリケーションリポジトリのmasterブランチにコード変更をマージした後にCIパイプラインがトリガーされました。
- CI toolchainページで、ci-pipeline タイルをクリックします。
- pipeline-run が実行されていることを確認します。 pipeline-run が完了するまで待ちます。
CIパイプラインの実行が成功したら、パイプラインタスクをクリックして完了したステップを調べることができます。

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

エビデンスは、CIパイプラインのすべてのコンプライアンスチェックから、ツールチェーンのセットアップ時に提供されたエビデンスロッカーリポジトリに収集される。 CIの証拠は raw/ci/<pipeline-run-id>/*.json
の下に保存される。
エビデンスはツールチェーン内のDevOps Insightsインスタンスに公開される。 ツールチェーンのDevOps Insightsツールカードをクリックすると移動できます。 「品質ダッシュボード」ページで、収集されたエビデンスを確認できます。

パイプラインの実行に失敗があるかどうかを評価するには、パイプラインの最終ステップをチェックする必要があります。
実行中のアプリケーションの表示
CI パイプラインの実行が成功すると、サンプル アプリケーションは Kubernetes クラスタにデプロイされ、dev ネームスペースで実行されます。
アプリケーションのURLは、CIパイプライン実行の deploy-dev
タスクの run stage
ステップのログの最後にあります。 そのURLを使って、アプリケーションが動作していることを確認する。

パイプラインの構成
commit-id
テキストプロパティを追加する。
- **「プロパティーの追加」**をクリックします。
- **「文字プロパティー」**を選択します。
commit-id
を使わずに手動でパイプラインを起動した場合、パイプラインはアプリの master ブランチから最新のコミット ID を取得します。
例

トリガーパラメーターを追加する。
- **「パイプラインの実行」**をクリックします。
- 手動トリガーを選択します。
- 「実行 (Run)」 をクリックします。