Infrastructure as CodeのためのCDツールチェインのセットアップ

このチュートリアルは、3部構成のチュートリアルシリーズの第3部です。ここでは、 IBM Cloud® Continuous Delivery によって提供されるサービスとして利用可能な完全なリファレンス実装を使用し、 IBM Cloud® DevSecOps のベストプラクティスを学びます。 このチュートリアルシリーズのパート3では、 DevSecOps において、セキュリティおよびコンプライアンス関連のベストプラクティスを適用した継続的デプロイメント(CD)用のツールチェーンテンプレートを使用します。

開始前に

このチュートリアルシリーズのパート3を始める前に、以下の前提条件を満たしていることを確認してください:

  1. パート 1: 前提条件の設定を 完了します。
  2. Part 2: Infrastructure as Code(Terraform)用のCIツールチェインをセットアップする。
  3. IBM Cloud で DevSecOps を使い始める - パート 2 ビデオを見る。

CD - 「 DevSecOps 」のベストプラクティスを活用したセキュアなアプリのデプロイ

DevSecOps のCDツールチェーンには、継続的デプロイメント用のパイプラインが1つしか含まれていません。 これには、以下のベスト・プラクティスが実装されています。

  • 変更管理を自動化して、開発者、承認者、監査員がコンプライアンスの観点からデプロイメントを追跡できるようにする
  • CIパイプラインで収集された証拠から、証拠の概要を作成します。
  • Git Repos and Issue Tracking ベースの変更管理リポジトリに変更リクエストを作成し、そのリクエストにデプロイメントの証拠を追加します。
  • インベントリリポジトリを使用して、ビルドされたアーティファクトをステージングや本番環境などのデプロイ環境に展開します。
  • CRを確認し、すべてのチェックに合格した場合は自動的に承認されます。
  • CRが承認された場合、または緊急時には、ツールチェーンがインベントリから本番環境へイメージを展開します。

CD ツールチェーンのガイド付きセットアップの概要

このチュートリアルに記載する手法はどれも、ガイド付きセットアップの操作についての説明です。 ツールチェーンの設定プロセスが順を追って案内され、ツールチェーンの作成に必要な推奨設定オプションが表示されます。

進行標識に、構成を実行するための各手順が示されます。 進行状況インジケーターを使って、前のステップに戻ることができます。 ページのメイン領域には、現在の手順についての構成オプションが表示されます。

DevSecOps Continuous Deployment toolchain welcome page
図1. DevSecOps 継続的デプロイメント・ツールチェーン歓迎ページ

次の手順に進むには、**「続行」**をクリックします。 現在の手順の構成が完了し、有効である場合にのみ、次の手順に進むことができます。 **「戻る」**をクリックすると、前の手順に移動できます。

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

DevSecOps 詳細設定トグル
図2. DevSecOps 詳細設定トグル

すべての手順が正常に完了したら、「 概要 」ステップの「 作成 」をクリックしてツールチェーンを作成します。

ガイド付きインストーラーでは、いつでも前の手順に戻ることができます。 一連の手順で入力した構成値はすべてツールチェーン・インストーラーに保存されています。

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

以下のいずれかの方法を使用して、CD ツールチェーンの構成を開始します。

  • [ ツールチェーンの作成 ] をクリックします。

    ツールチェーンの作成

  • IBM Cloud コンソールから、 Menu メニューアイコンを クリックし、以下を選択します。 DevOps. 「 ツールチェーン 」ページで、「 ツールチェーンを作成 」をクリックします。 「 ツールチェーンの作成 」ページで、「 DevSecOps のベストプラクティスに基づくCD-Develop 」をクリックします。

CDツールチェーンの名前とリージョンを設定する

ツールチェーン設定のデフォルト情報を確認します。 ツールチェーンの名前は、そのツールチェーンを IBM Cloud 内で識別するためのものです。 IBM Cloud の同じリージョン、同じリソース・グループのツールチェーンにおいてツールチェーン名が固有になるようにしてください。

ドロップダウンで関連するCIツールチェーンを選択し、このCDツールチェーンのセットアップを支援するためにCI設定の一部をコピーします。

DevSecOps 関連するCIツールチェーン
図3. DevSecOps 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 リポジトリへのリンクのみをサポートしています。

インベントリー

リポジトリ URL : URL。これは、前の手順で示したように、CIツールチェーンで設定されているインベントリリポジトリです。

問題

リポジトリ URL : URL。これは、前の手順でキャプチャしたように、CIツールチェーンで設定されているイシューリポジトリです。

パイプライン構成

パイプライン構成リポジトリーには、デプロイメント、テスト、およびその他のカスタム・タスクに必要な 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 など、xml-ph-0000@deepl.internalが推奨するシークレット管理ツールに安全に保管してください。 シークレット管理ツールはツールチェーンに統合できるので、Tektonパイプラインでシークレットを簡単に参照できる。

このチュートリアルでは、 IBM Cloud® Secrets Manager を秘密の保管庫として使用します。

エビデンス・ストレージ

エビデンスロッカーは、パイプラインが実行するすべてのタスクのエビデンスを保存する。 この証拠は、パイプラインの走行中にパイプラインによって収集される。

継続的インテグレーション(CI)ツールチェーン用に設定された Cloud Object Storage (COS)バケットを選択します。 継続的インテグレーション(CI)、 Continuous Delivery (CD)、継続的コンプライアンス(CC)の各ツールチェーンで、同じCOSバケットが使用されていることを確認してください。

Cloud Object Storage バケットをエビデンスロッカーとして使用し、パイプライン実行中に収集されたすべてのエビデンスとアーティファクトを保管するのがベストプラクティスです。

証拠保管の詳細については、 証拠保管を 参照のこと。

エビデンス

リポジトリ URL :前の手順でキャプチャしたように、CIツールチェーンで設定されているエビデンスロッカーリポジトリのURL( 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 リポジトリーを使用して、変更要求を管理します。 詳しくは、 変更管理の自動化 を参照してください。

オプションのツール

Slack

PR/CI Pipelineのイベントに関する通知を受け取るように Slack Toolを 設定します:

  • SlackのWebhook
  • 好ましい:既存の Webhook は、 鍵アイコンをクリックすることで、シークレット ヴォールトからインポートできます。
  • 既存のWebhookをコピー&ペーストします。
  • Slackチャンネル:既存のSlackにメッセージを投稿する。
  • Slack チーム名: チーム URL の*. slack.com* の前のフレーズ。 たとえば、チーム「 URL 」のURLが https://team.slack.com である場合、チーム名は「 team」 となります。
  • 自動化されたSlack通知:通知を受け取りたいイベントを選択し、カスタマイズできます。

ツールチェーン作成後にSlack Toolを追加できます。

ツールチェーンを作成したら、CDパイプライン内の slack-notifications 環境プロパティを使用して、通知の送信をオン/オフに切り替えてください(0 = オフ、1 = オン)

CD ツールチェーンの作成

[概要 ] ページで [作成] をクリックし、ツールチェーンが作成されるまで待ちます。

パイプラインの作成後、個々のツールチェーンの統合を設定してください。

DevSecOps CD Toolchain Created
図4. DevSecOps CDツールチェーン作成

CD ツールチェーンの探索

CD Toolchainが作成されたので、 cd-pipeline カードをクリックしてPromotion Pipelineを開き、実行する。

プロモーション・パイプラインの実行

プロモーション・パイプラインを実行する前に、 CIパイプライン が正常に実行されたことを確認してください。

プロモーション・パイプラインは、インベントリー・ターゲット環境のブランチ (例: staging や prod) をターゲットとして、インベントリー・ソース環境のブランチ (例: master) のインベントリーの内容についてのプル要求を作成します。

  • cd-pipelineダッシュボードで、 パイプラインの実行をクリックし、 手動プロモーショントリガーを選択します。 Run をクリックしてパイプラインを起動する。
  • プロモーションパイプラインの実行が完了するまで待ち、実行ログを確認します。
  • プロモーション・パイプラインが正常に完了すると、「 promote 」タスクのログに、Inventoryリポジトリ内のプルリクエストへのリンクが表示されます。 プルリクエストの名前は、 promote <Inventory Source Environment> to <Inventory Target Environment> という形式になっています。
  1. ログに記載されているリンクから、ブラウザでプルリクエストを開いてください。 以下の各セクションの詳細を記入してください:

    • 優先度 :(必須)「重要」、「高」、「中」、「低」、「計画中」のいずれか。
    • 変更依頼の担当者 :(必須) 担当者のメールアドレス。
    • 追加説明 :アプリケーションの変更点に関する説明。
    • 目的 :アプリケーションに加えられた変更の目的。
    • 影響の説明 :アプリケーションの動作または環境の変更による影響。
    • バックアウト計画: デプロイメントが失敗した場合にバックアウトするためのステップ。
  2. プルリクエストの各項目を入力し、「 保存 」をクリックしてください。

  3. CI でのコンプライアンスチェックが失敗し、 デプロイを続行 したい場合は、PR に EMERGENCY ラベルを追加する

  4. Git Repos and Issue Trackingからのプル要求をマージします。

プルリクエストの詳細は、CDパイプラインの実行中に、CDパイプラインによって「変更リクエスト管理」リポジトリ内に変更リクエストを作成するために使用されます。

CDパイプラインの設定

Terraform 変数

このチュートリアルでは、本番環境で作成するキープロテクトのインスタンス名を指定します。

そのためには、cd-pipelineで Environment Propertiesを選択し、 Addをクリックする。

CDパイプラインの構成
図5. CDパイプラインの構成

タイプ 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 パイプライン構成ブランチ
図6. CDパイプライン設定ブランチ

CD パイプラインの実行

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

  • 推奨:CDパイプラインを手動で起動してください。
  • オプション:インベントリ・リポジトリでの Merge アクションが実行されるたびに自動的に実行されます。 Git Repos and Issue Tracking のトリガーは、CDパイプラインを自動的に実行するように設定されていますが、デフォルトでは無効になっています。

CDパイプラインはいつでも手動でトリガーすることもできますが、最後にデプロイに成功してから変更がない場合、デプロイするものがないため、CDパイプラインは早期にアボートします。 force-redeploy 変数 を追加して使用し、コードを変更せずに CD を再実行することができます。

CD パイプラインの正常実行は次のようになります。

DevSecOps CDパイプライン成功
図7. DevSecOps CDパイプラインの成功

CDパイプラインが正常に実行されると、リソースリストに KeyProtect インスタンスサービスが表示されます。

KeyProtect サービス・インスタンスの作成
図8. KeyProtect サービスインスタンスの作成