Infrastructure as CodeのためのCDツールチェインのセットアップ
このチュートリアルは、3部構成のチュートリアルシリーズの第3部です。ここでは、 IBM Cloud® Continuous Delivery によって提供されるサービスとして利用可能な完全なリファレンス実装を使用し、 IBM Cloud® DevSecOps のベストプラクティスを学びます。 このチュートリアルシリーズのパート3では、 DevSecOps において、セキュリティおよびコンプライアンス関連のベストプラクティスを適用した継続的デプロイメント(CD)用のツールチェーンテンプレートを使用します。
開始前に
このチュートリアルシリーズのパート3を始める前に、以下の前提条件を満たしていることを確認してください:
CD - DevSecOps、セキュアなアプリをデプロイする
DevSecOps CDツールチェーンには、継続的デプロイのためのパイプラインが1つだけ含まれている。 これには、以下のベスト・プラクティスが実装されています。
- 変更管理を自動化して、開発者、承認者、監査員がコンプライアンスの観点からデプロイメントを追跡できるようにする
- CIパイプラインで収集された証拠から証拠要約を作成する。
- Git Repos and Issue Tracking ベースの変更管理リポジトリに変更要求を作成し、展開エビデンスを追加する。
- インベントリ・リポジトリを使用して、ビルドされた成果物をステージングやプロダクションなどのデプロイ環境にプロモートします。
- CRをチェックし、すべてのチェックが通れば自動承認する。
- CRが承認された場合、あるいは緊急の場合、ツールチェーンはインベントリから本番にイメージをデプロイする。
CD ツールチェーンのガイド付きセットアップの概要
このチュートリアルに記載する手法はどれも、ガイド付きセットアップの操作についての説明です。 ツールチェーンのセットアップ・プロセスが案内され、ツールチェーンの作成に必要な推奨コンフィギュレーション・オプションが表示されます。
進行標識に、構成を実行するための各手順が示されます。 プログレスインジケーターを使って、前のステップに移動することができます。 ページのメイン領域には、現在の手順についての構成オプションが表示されます。
次の手順に進むには、**「続行」**をクリックします。 現在の手順の構成が完了し、有効である場合にのみ、次の手順に進むことができます。 **「戻る」**をクリックすると、前の手順に移動できます。
いくつかのステップには、 高度な設定に切り替えるトグルが含まれています。 これらのステップはデフォルトで、必要最小限のコンフィギュレーションを提示している。 しかし、よりきめ細かいコントロールを必要とする上級ユーザーは、 Switch to advanced configuration toggleをクリックして、基礎となる統合のすべてのオプションを表示することができます。
すべてのステップが正常に完了したら、 Summary ステップで Createをクリックしてツールチェーンを作成する。
ガイド付きインストーラーでは、いつでも前の手順に戻ることができます。 一連の手順で入力した構成値はすべてツールチェーン・インストーラーに保存されています。
CD ツールチェーンのセットアップの開始
以下のいずれかの方法を使用して、CD ツールチェーンの構成を開始します。
CDツールチェーン名と地域の設定
ツールチェーン設定のデフォルト情報を確認します。 ツールチェーンの名前は、そのツールチェーンを IBM Cloud 内で識別するためのものです。 IBM Cloud の同じリージョン、同じリソース・グループのツールチェーンにおいてツールチェーン名が固有になるようにしてください。
ドロップダウンで関連するCIツールチェーンを選択し、このCDツールチェーンのセットアップを支援するためにCI設定の一部をコピーします。
警告この操作により、すでに入力した値が上書きされる場合があります。
CDツールの統合をセットアップする
Welcome ステップで既に既存のCIツールチェーンにリンクしている場合、そのツールチェーンで使用されるアプリケーション関連のリポジトリ名がプレフィルドされます。 リポジトリー URL を確認して、次のステップに進みます。
アプリケーション関連のリポジトリー
CDツールチェインをゼロからセットアップする場合は、CIツールチェイン作成時にこれらのリポジトリを設定し、ここで使用またはリンクする。
それぞれの URL を取得するには、 CIパイプラインにアクセスし、それぞれのツールカードを選択する。 ツールカードを右クリックし、「 リンクアドレスをコピー 」を選択します。
- インベントリ :インベントリ・リポジトリには、CIパイプラインとCDパイプラインによってビルドされた成果物の詳細が記録される。 例:
https://<region>.git.cloud.ibm.com/myorg/my-compliance-ci-inventory - 課題 :課題リポジトリには、CIパイプラインの実行中に見つかった課題が記録される。 例えば、
https://<region>.git.cloud.ibm.com/myorg/my-compliance-ci-issuesです。 - エビデンス: ここには、アプリケーションに属するすべての未加工のコンプライアンス・エビデンスが収集されます。 例えば、
https://<region>.git.cloud.ibm.com/myorg/my-compliance-ci-evidenceです。
現在のツールチェーンは、 IBM がホストする既存の Git Repos and Issue Tracking リポジトリへのリンクのみをサポートしています。
インベントリー
Repository URL: 前のステップで取得したCIツールチェーンに設定されているインベントリリポジトリの URL。
問題
リポジトリ URL: URL 前のステップで取得したCIツールチェーンに設定されているissueリポジトリのものです。
パイプライン構成
パイプライン構成リポジトリーには、デプロイメント、テスト、およびその他のカスタム・タスクに必要な YAML ファイルとスクリプトが含まれています。
このチュートリアルでは、パイプラインの設定リポジトリは DevSecOps CI for Infrastructure as Code ( IaC ) で定義されたものと同じです。 Use existing deployment configuration repositoryを選択し、CI Toolchainのパイプライン構成に使用するリポジトリを選択します。
Git レポの詳細については、 Git Repos and Issue Tracking の設定を 参照してください。 カスタマイズ可能なスクリプトの詳細については、 カスタム スクリプトを 参照してください。
秘密
このツールチェインに含まれるいくつかのツール、そしておそらくカスタマイズ可能なスクリプトには、特権リソースにアクセスするためのシークレットが必要です。 IBM Cloud API キーもそのようなシークレットの例の 1 つです。 これらの秘密は、次のような IBM 推奨の秘密管理ツールに安全に保管します。 IBM Key Protect for IBM Cloud, IBM Cloud® Secrets Manager または HashiCorp Vault. シークレット管理ツールはツールチェーンに統合できるので、Tektonパイプラインでシークレットを簡単に参照できる。
このチュートリアルでは、 IBM Cloud® Secrets Manager を秘密の保管庫として使用します。
エビデンス・ストレージ
エビデンスロッカーは、パイプラインが実行するすべてのタスクのエビデンスを保存する。 この証拠は、パイプラインの走行中にパイプラインによって収集される。
継続的インテグレーション(CI)ツールチェーン用に設定された Cloud Object Storage (COS)バケットを選択します。 継続的インテグレーション(CI)、 Continuous Delivery (CD)、継続的コンプライアンス(CC)の各ツールチェーンで、同じCOSバケットが使用されていることを確認してください。
Cloud Object Storage バケットをエビデンスロッカーとして使用し、パイプライン実行中に収集されたすべてのエビデンスとアーティファクトを保管するのがベストプラクティスです。
証拠保管の詳細については、 証拠保管を 参照のこと。
エビデンス
Repository URL: 前のステップでキャプチャしたように、CI Toolchainに設定されているエビデンスロッカーリポジトリの URL。
クラウド Object Storage バケット
この機能を使用するには、Cloud Object Storage のインスタンスとバケットが必要です。 クラウド Object Storage バケットを証拠保管庫として使用して、クラウド Object Storage インスタンスを作成します。 コンプライアンス証拠保管庫として機能するバケットの設定に関する詳細については、 「証拠の保存のためのCloud Object Storage の設定」 を参照してください。
- Cloud Object Storage インスタンス、バケット名、および Cloud Object Storage エンドポイント・フィールドが自動的に入力されます。
- サービスID APIキーを入力
- 好ましい:既存の鍵は、鍵アイコンをクリックしてシークレット保管庫からインポートできます。
- 既存のキーをコピー&ペーストすることもできる。
エンドポイント・フィールドは任意である。 ツールチェーンのセットアップ中またはパイプラインの実行中に、エンドポイントを選択または指定します。
デプロイメント・ターゲット
DevSecOps for Terraformの使用例では、 カスタムデプロイオプションを選択します。
カスタムターゲット
このオプションには、パイプラインのデプロイ スクリプトで使用する IBM Cloud API キーが必要です。 提供されるデプロイスクリプトは、 Schematics を使って Terraform の設定アーティファクトを Schematics ワークスペースにアップロードし、 Schematics CLI plan と apply コマンドを使って Terraform の設定を IBM Cloud に配信します。
IBM Cloud API キー
APIキーは、 IBM Cloud CLIツールといくつかのタスクで相互作用する:
- 推奨鍵アイコンをクリックして、秘密データ保管庫から既存の鍵をインポートします。
- 既存のキーをコピー&ペーストする。
- New +をクリックしてキーを作成します。
新しく生成されたAPIキーをsecrets vaultに保存します。
変更要求管理
IBM Cloudがホストする Git Repos and Issue Tracking リポジトリーを使用して、変更要求を管理します。 詳しくは、 変更管理の自動化 を参照してください。
DevOps インサイト・ツールチェーン
別のツールチェーンから既存の DevOps insights インスタンスをこのパイプラインにリンクして、CI および CD ツールチェーンパイプラインからのすべてのビルド、デプロイ、テストレコードを同じ場所に集める。
CD ツールチェーンは、デプロイメント記録を既存の DevOps insights インスタンスにパブリッシュできます。 この機能を有効にするには、 DevOps insights toolchain ID ドロップダウンで既存の DevOps Insights インスタンスを含むツールチェーンの ID を選択して指定します。
オプションのツール
Slack
PR/CI Pipelineのイベントに関する通知を受け取るように Slack Toolを 設定します:
- Slackウェブフック
- 好ましい:既存の Webhook は、 鍵アイコンをクリックすることで、シークレット ヴォールトからインポートできます。
- 既存のWebhookをコピー&ペーストします。
- Slackチャンネル:既存のSlackにメッセージを投稿する。
- Slack チーム名: チーム URL の*. slack.com* の前のフレーズ。 例えば、あなたのチーム URL が
https://team.slack.comの場合、チーム名は teamとなります。 - 自動化されたSlack通知:通知を受け取りたいイベントを選択し、カスタマイズできます。
ツールチェーン作成後にSlack Toolを追加できます。
ツールチェーンを作成した後、CDパイプラインの slack-notifications 環境プロパティで通知の送信を切り替えます(0 = オフ、1 = オン)
CD ツールチェーンの作成
Summary ページで Createをクリックし、ツールチェーンが作成されるのを待つ。
パイプラインを作成した後、個々のツールチェーン統合を設定する。
CD ツールチェーンの探索
CD Toolchainが作成されたので、 cd-pipeline カードをクリックしてPromotion Pipelineを開き、実行する。
プロモーション・パイプラインの実行
Promotion Pipelineを実行する前に、 CI Pipelineが 正常に実行されたことを確認してください。
プロモーション・パイプラインは、インベントリー・ターゲット環境のブランチ (例: staging や prod) をターゲットとして、インベントリー・ソース環境のブランチ (例: master) のインベントリーの内容についてのプル要求を作成します。
- cd-pipelineダッシュボードで、 パイプラインの実行をクリックし、 手動プロモーショントリガーを選択します。 Run をクリックしてパイプラインを起動する。
- プロモーションパイプラインの実行が完了するまで待ち、実行ログを確認します。
- プロモーションパイプラインが正常に終了すると、
promoteタスクログに、インベントリリポジトリのプルリクエストへのリンクが表示されます。 プルリクエスト名はpromote <Inventory Source Environment> to <Inventory Target Environment>.
-
ログに記載されているリンクから、ブラウザでプルリクエストを開いてください。 以下のセクションに詳細を記入してください:
- 優先度 :(必須)重要、高、中、低、計画のいずれか。
- 変更リクエストの担当者: (必須)担当者のEメールID。
- 追加説明 :アプリケーションの変更に関する説明。
- Purpose :アプリケーションに加えられる変更の目的。
- 影響の説明 :アプリケーションの動作や環境への変更の影響。
- バックアウト計画: デプロイメントが失敗した場合にバックアウトするためのステップ。
-
プルリクエストのフィールドに入力し、 保存をクリックします。
-
CI でのコンプライアンスチェックが失敗し、 デプロイを続行 したい場合は、PR に
EMERGENCYラベルを追加する -
Git Repos and Issue Trackingからのプル要求をマージします。
プルリクエストの詳細は、CDパイプラインの実行中に変更要求管理リポジトリに変更要求を作成するためにCDパイプラインによって使用されます。
CDパイプラインの設定
Terraform 変数
このチュートリアルでは、本番環境で作成するキープロテクトのインスタンス名を指定します。
そのためには、cd-pipelineで Environment Propertiesを選択し、 Addをクリックする。
タイプ Text Value 、名前 TF_VAR_key_protect_instance のプロパティを追加する。
key-protect-production-202210191453 など、本番環境への配信を示す意味のある値を設定します。 この環境プロパティの値は、 key_protect_instance terraform コンフィギュレーション変数の値として注入される。
また、 IBM Cloud Providerプラグインの構成で説明したように、 IBM Cloud で認証する適切な ibmcloud_api_key で Terraform用の IBM Cloud プロバイダを構成する必要があります
タイプ Secure Value 、名前 TF_VAR_ibmcloud_api_key のプロパティを追加する。 IBM Cloud リソースの作成に使用する api キーの値を設定します。
このチュートリアルで使用するサンプルは、 KeyProtect インスタンスを作成するために resource_group ``を期待しています。 デフォルトの resource_group 名は Default。 これがアカウントに適切でない場合は、 variables.tf ファイル内のデフォルトの resource_group 変数を置き換えるか、
TF_VAR_resource_group 環境プロパティを適切なリソースグループ名に設定して使用する resource_group 変数値を指定します。
パイプライン設定ブランチ
パイプライン設定リポジトリのブランチは、デフォルトではCDパイプライン環境プロパティで master。 このチュートリアルでは、ブランチを main に変更してください。
そのためには、cd-pipelineで Environment Propertiesを選択し、 edit。 main
CD パイプラインの実行
以下のいずれかの方法でCDパイプラインを開始する:
- 優先:CDパイプラインを手動でトリガーする。
- オプション:インベントリ・リポジトリで
Mergeアクションを実行するたびに自動的に実行されます。 Git Repos and Issue Tracking トリガーは自動CDパイプラインのトリガーとして設定されているが、デフォルトでは無効になっている。
CDパイプラインはいつでも手動でトリガーすることもできますが、最後にデプロイに成功してから変更がない場合、デプロイするものがないため、CDパイプラインは早期にアボートします。 force-redeploy 変数 を追加して使用し、コードを変更せずに CD を再実行することができます。
CD パイプラインの正常実行は次のようになります。
CDパイプラインが正常に実行されると、リソースリストに KeyProtect インスタンスサービスが表示されます。
