安全なアプリをデプロイするための DevSecOps インフラストラクチャーと CI ツールチェーンのセットアップ
このチュートリアルでは、Terraform ベースのクイック・スタート・テンプレートを使用して、CI および CD ツールチェーン用のインフラストラクチャーのセットアップとプロビジョニングを自動化します。 このテンプレートでは、コンプライアンスとセキュリティーの DevSecOps ベスト・プラクティスが採用されています。 このテンプレートは IBM Cloud® Schematics ワークスペースを使用します。これにより、Kubernetes または Red Hat® OpenShift® のいずれかにアプリを安全にデプロイするために必要なインフラストラクチャーの作成が自動化されます。このテンプレートは、DevSecOps IBM Cloud® Continuous Delivery ツールチェーン・パイプライン構造を使用します。 このツールチェーンは、インベントリー統合、変更管理、エビデンス収集、デプロイメントの継続的デリバリーのために事前構成されています。
IBM Cloud Schematics は、IBM Cloud 環境に必要なリソースを高水準スクリプト言語でモデル化して Infrastructure as Code (IaC) を実現できるように、Terraform-as-a-Service を提供するものです。 Terraformは、 HashiCorp によって開発されたオープンソースソフトウェアです。 Terraform は、予測可能で一貫性のあるリソース・プロビジョニングを可能にして、複雑な多層クラウド環境を迅速に構築します。
このチュートリアルでは、Schematics ワークスペースの作成、Terraform 実行プランの適用、および環境プロパティー値の更新という 3 つの簡単なステップを実行します。 プランを適用すると、Schematics ワークスペースによってセキュア・インフラストラクチャーのセットアップが行われます。 このインフラストラクチャーはチームと共有可能で、次のように機能する。 DevSecOpsソフトウェアの開発と運用のライフサイクルにセキュリティー・プラクティスを統合する方法論。 この組み合わせの目的は、開発速度とセキュリティーのバランスに優先順位を付けることにあります。 CIとCDのツールチェーンテンプレートに対応しています。
インフラストラクチャーの自動セットアップにより、DevSecOps CI と CD テンプレートからのデフォルト値を使用して自動的にプロビジョンされるリソースが作成されます。 これらのデフォルト値は Schematics ワークスペースの **「変数」**セクションで確認できます。 以下のリソースが作成されます。
- IBM Cloud® Kubernetes Service 内、または Red Hat OpenShift on IBM Cloud 内のクラスター。
- 標準的な IBM Cloud Object Storage インスタンスおよびバケット。
- IBM Cloud® Secrets Manager. 許可される Secrets Manager インスタンスは 1 つだけです。 既に Secrets Manager サービスがある場合は、
sm_service_nameステップ 2 で必ず のデフォルト値をオーバーライドしてください。 - GPG イメージ署名鍵。
- 完全に機能する DevSecOps CI ツールチェーン。このツールチェーンにより、コンプライアンスとセキュリティーに関する DevSecOps ベスト・プラクティスを使用して、サンプルの Node.js アプリケーションをビルド、テスト、デプロイします。
開始前に
- このチュートリアルを完了するには、あなたがオーナーであるか、または 管理者権限 を持っている 従量制またはサブスクリプション IBM Cloud アカウント を使用してください。 IBM Cloud アカウントを既に所有していて、それをアップグレードする必要がある場合は、 アカウントのアップグレードを参照してください。
- ツールチェーンまたはインフラストラクチャーの要素が作成された後に、それらの要素と対話する場合は、IBM Cloud CLI をインストールします。
- GitLab パーソナル・アクセストークンを取得する。 パーソナル・アクセス・トークンの名前を入力します。 CI ツールチェーンと同じリージョンにトークンを作成します。 このトークンは後ほど必要になり、再度アクセスすることができないため、必ずコピーして保存しておいてください。
- IBM Cloud APIキーを作成する。 この API キーの値は後ほど必要になり、再度アクセスすることができないため、必ずコピーして保存するか、ダウンロードしておいてください。
Schematics ワークスペースの作成
-
クラスターのデプロイメント・ターゲットについての以下のいずれかのオプションをクリックします。 このアクションにより、「IBM Cloud にデプロイ」ページが表示され、そこで Schematics ワークスペースを作成できます。 そのページで入力が必要なフィールドに入力してから、**「次へ」**をクリックします。
選択するオプションに基づいて、このリポジトリーの中の対応する Terraform テンプレートが新規 Schematics ワークスペースに自動的にインポートされます。
-
情報を確認してから、**「作成」**をクリックします。 Schematics ワークスペースが作成されて、Schematics ワークスペースの「設定」ページが表示されます。
Terraform 実行プランの適用
-
Schematics の「設定」ページの**「変数」**セクションで、各変数の値を入力します。 必須フィールドにはデフォルト値がありません。 デフォルト値はオーバーライドできます。
sm_service_nameの値を上書きした場合、Terraformの実行プランは新しいリソースを作成する代わりに既存のリソースを使用します。 -
gitlab_token変数には、先程取得したパーソナル・アクセス・トークンを入力します。 -
ibmcloud_api_key変数には、先程取得した IBM Cloud API キーを入力します。 -
registry_namespace変数には、コンテナー・レジストリーの名前空間の値を入力します。 ネームスペースを作成するには、 Container Registry 名前空間 を参照してください。 -
kube_version、コマンドラインでibmcloud ks versions。 -
オプション。 既に Secrets Manager インスタンスがある場合は、
sm_service_name変数にその名前を入力します。 それ以外の場合は、この変数を変更しないでください。 -
オプション。 クラスタのサイズや場所を調整したい場合は、以下の変数をオーバーライドできます:
datacenterdefault_pool_size,machine_type,hardware,public_vlan_num, またはprivate_vlan_num(デフォルト値は dal12/us-south データセンター用です)。 -
オプション。 **「プランの生成」**をクリックします。 このアクションを実行すると、Terraform 実行プランが作成され、構文エラーがないか構成が検査されます。 Schematics の「ジョブ」ページでは、ログ・ファイルを確認して、エラーを有無を調べたり、Terraform テンプレートの正しい状態を実現するために、作成、修正、または削除が必要な IBM Cloud リソースがないかを確認したりすることができます。
-
変数の値をすべて入力し、変更内容に問題がなければ、**「プランの適用」**をクリックしてインフラストラクチャー・コードを実行します。
このステップでは、Kubernetes または OpenShift の新規クラスターが作成されるため、完了までに多少の時間がかかります (通常は 20 分から 30 分程度ですが、それ以上かかることもあります)。
-
Schematics の「ジョブ」ページでジョブ名を展開すると、ログを表示できます。
-
プランを適用した後、生成された IBM Cloud DevSecOps CI ツールチェーンの URL を表示します。 URL は、ログ・ファイルの末尾近くの、
View the toolchain at:で始まる行にあります。
プランを適用するのが 2 回目の場合は、以前に作成した Kubernetes または OpenShift のクラスターと、そこにデプロイされているアプリケーションが削除され、新規クラスターが作成されます。 ただし、デフォルトのクラスタ名を上書きした場合は、そのクラスタが使用される。
アプリのデプロイ
パイプラインを実行するには、以下の手順に従ってください。
- 新しく作成した DevSecOps CI toolchainにアクセスする。
- をクリックしてください。 Git
compliance-appで始まるタイルをクリックする。 - pr-パイプラインを起動するには、
README.mdファイル内のテキストを更新し、mainブランチに対して PR を開始します。 - Target Branch フィールドで、ブランチ名を
mainから別のものに変更します。 例えば、mybranchなどです。 - これらの変更で新しいマージリクエストを開始する」チェックボックスが選択されていることを確認してください。
- 変更をコミットするをクリックします。
- オプション。 新規マージリクエストのページで、説明を追加します。
- Create merge requestをクリックします。
ci-toolchainのpr-pipelineがトリガーされる。 以下のステップを完了し、パイプラインが稼動していることを確認する:
-
CIツールチェインに戻り、以下のタイルをクリックする。 Delivery Pipeline
pr-pipelineタイルをクリックする。 pr-pipelineのダッシュボード・ページでは、pr-pipelineが稼動していることが確認できます。 -
進捗状況を見るには、
pr-pipelineのリンクをクリックしてください。
図1 pr-pipelineダッシュボード
注:
-
脆弱性が見つかった場合、code-pr-finishステップは失敗する。
-
脆弱性を見つけるには、
code-unit-tests>run-stage、ログを表示する。(スクリーンショット) -
脆弱性を解決すると、pr-パイプラインが起動する。
-
アプリのレポ・タイルに戻る。
-
ナビペインで、 Merge requestsをクリックします。
-
PRを選択する。
-
オプション。 承認ボタンをクリックしてください(承認しない場合、Ci-Pipelineの実行の最後にエラーが表示されます)。
-
"ソースブランチを削除 "を選択する
-
Mergeをクリックする。
このPRをマージすると、自動的にci-pipelineが起動する。 検証するには、ツールチェインのci-pipelineタイルに戻り、パイプラインが実行されていることを確認する。 パイプラインのリンクをクリックし、進捗状況を確認する。
このステップでは、新しく作成されたクラスターにアプリをデプロイする。 アプリケーション URL は、ci-パイプラインの deploy-dev > run-stage ステップにあるログファイルの一番下にあります。
次のステップ
次のチュートリアルの「CI ツールチェーンの探索」セクションに進み、CI-PR および CI パイプラインを実行します。 その後、そのチュートリアルの残りのステップに進んで安全なアプリをデプロイします。
いつでも、メニュー アイコン をクリックして リソース・リスト を選択することにより、このチュートリアルで作成したすべてのリソースを表示できます。 表示できるのは Schematics ワークスペース、クラスター、IBM Cloud Object Storage インスタンス、Secrets
Manager サービス、継続的デリバリー・サービス、およびツールチェーンです。