Tekton継続的インテグレーションパイプラインの設定 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)権限を検証してください。
-
次のビデオをご覧ください:
CIパイプラインは、登録とオンボーディングを必要とするビルド成果物に署名するために、 GaraSign コード署名サービスを使用する。 GaraSign は内部ネットワーク( )を使用する。 IBM このネットワークへのアクセスは、ネットワークにアクセスできる IBM 共有ワーカー内で利用できる。 IBM 9.X、内部ネットワークにアクセスできるシェアードワーカーを利用できる。 この目的のために IBM 共有ワーカーを使用するには、 Continuous Delivery 標準プランが 必要であることに注意してください。
CI ツールチェーンのセットアップの開始
Continuous Deliveryサービスは、ツールチェーンのセットアップをガイドし、論理的な順序でプロセスを作成するテンプレートを提供します。 進行標識に、構成を実行するための各手順が示されます。 CIツールチェーンのテンプレートにアクセスするための手順に従ってください。
- IBM Cloudコンソールで、メニューアイコン
>Platform Automation>Toolchains をクリックします。
- 「ツールチェーン」ページで、**「ツールチェーンの作成」**をクリックします。
- インフラストラクチャーをコードとしてチェックする。
- CI - DevSecOps のプラクティスでコードとして安全なインフラストラクチャを開発するタイルをクリックします。
CIツールチェーンの設定
ようこそのページには、ドキュメントや関連資料へのポインタとともに、ツールチェーンの目的が要約されています。
-
**「Start」**をクリックします。
-
IBM Cloudに、同じリージョンとリソースグループのツールチェーン内のツールチェーン名を入力します。
-
ドロップダウンリストから地域を選択します。
-
ドロップダウンリストからリソースグループを選択します。
-
「続行」 をクリックします。
現在の手順の構成が完了し、有効である場合にのみ、次の手順に進むことができます。 ガイド付きインストーラの前のステップを表示するには、いつでも「 戻る 」をクリックできます。 一連の手順で入力した構成値はすべてツールチェーン・インストーラーに保存されています。
いくつかのステップには、詳細設定に切り替えるトグルボタンがあります。 これらのステップは、デフォルトで最小限のコンフィギュレーションを提示する。 しかし、より細かなコントロールが必要な上級ユーザーは、 Switch to advanced configuration toggleをクリックすることで、基礎となる統合のオプションを表示することができます。
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 に公開することができる。 統合IDを指定することで、他のツールチェーンから DevOps Insights。
- 現在のツールチェーンを受け入れます。
- 「続行」 をクリックします。
ツールチェーン 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. IDのみを含め、 URL は含めない。
また、 DevOps Insights インタラクションのターゲット環境を設定することもできる。 このパラメータはオプションで、インベントリのターゲット環境の代わりに使用されます。
DevOps Insights
DevOps Insightsのインスタンスを作成し、ツールチェインに使用することができます。 設定が不要な場合、CIパイプラインは自動的にツールチェーンに含まれるinsightインスタンスを使用します。
Delivery Pipeline プライベート・ワーカー
ツールチェーンによってビルドされ、インベントリに記録されたアーティファクトは、イメージを本番環境にデプロイする前に、 GaraSign,、Garantirによって提供されるコード署名サービスによって署名されなければならない。 GaraSign アーティファクト署名を有効にするには、 TaaS プライベートワーカーと IBM CISO 署名証明書が必要です。
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までに従ってください。
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)」 をクリックします。