SnykとHarnessでCI/CDパイプラインの脆弱性を検出・修正
Pas Apicella
Martin Ansong
2021年12月10日
0 分で読めますDevOpsが10年以上前に登場した当初の主な目的は、開発チームと運用チームの間にある溝を埋めることでした。そのために、アプリケーションの設計、構築、テスト、デプロイの各プロセスに自動化が導入されました。
しかし、開発チームがより速く、より頻繁にリリースを続ける一方で、セキュリティチームは追いつくのが難しくなっています。多くの場合、セキュリティチームがデリバリーパイプラインのボトルネックになっています。だからこそ、DevOpsプロセスの早い段階からセキュリティを取り入れ、DevSecOps文化を実践することがますます重要になっています。
開発者を中心に据えたSnykのセキュリティプラットフォームを、Harnessの統合デリバリーパイプラインのワークフローに組み込むことで、すべてのリリースにセキュリティとコンプライアンスのテストを含められます。これにより、脆弱な依存関係やコードを含むアプリケーションが本番環境にリリースされるのを防げます。SnykやHarnessのような最新のツールを使えば、CI/CDパイプラインを通じて脆弱性を検出、修正、対処し、ソフトウェアを迅速にリリースする能力を損なうことなく、ビジネスリスクを軽減できます。
Snykを始める
Snykは、コード、依存関係、コンテナ、Infrastructure as Codeに潜むセキュリティ脆弱性をチームが簡単に検出、優先順位付け、修正できる開発者向けセキュリティプラットフォームです。開発ツールやワークフロー、自動化パイプラインに直接統合できます。
業界をリードするアプリケーションとセキュリティのインテリジェンスを基盤とするSnykは、あらゆる開発者のツールキットにセキュリティの専門知識をもたらします。
Snykは無料アカウントに登録するだけで、すぐに使い始められます。
Harnessを始める
Harnessは、CI、CD、Feature Flags、Cloud Cost Managementなど、DevOpsプロセスをAIでシンプルにする業界初のソフトウェアデリバリープラットフォームです。
Harnessを使えば、再利用可能なテンプレートで複雑なデプロイを数分で構築でき、時間と手間を省けます。パイプラインも数分で構築できます。
Harnessはharness.ioにアクセスして無料トライアルアカウントを作成するだけで、すぐに使い始められます。
ビルドとデプロイのプロセスで脆弱性が通過するのを防ぐ
SnykとHarnessの相乗効果を最もよく理解するには、実際に手順を確認し、ご自身で設定して実行するのがおすすめです。この例では、HarnessのワークフローにSnykのテストを自動的に追加し、ビルドとデプロイのプロセスで脆弱性が通過するのを防ぐ方法を紹介します。
次のGitHubリポジトリを使用します: https://github.com/mansong1/springbootemployee-api
一緒に進めるには、次のものが必要です。
このチュートリアルを始める前に、Harnessで次の手順を完了しておくと、より理解しやすくなります。
上記の手順を完了、または内容を確認すると、HarnessのCIワークフローの設定方法を学べます。
HarnessでSnykテストを実行する7つの手順
手順1: Snyk APIトークンのシークレットを作成する
Snyk CLIテストを実行するには、Snyk APIトークンが必要です。エンタープライズのお客様は、サービスアカウントを設定し、Snyk Appからトークンを作成できます。無料プランを含むエンタープライズ以外のSnykアカウントでは、メインのユーザートークンを使用できます。
次に、こちらの手順に従ってHarnessにシークレットを作成し、Snyk APIトークンを保存します。
手順2: 新しいパイプラインを作成する
1. まず、Harnessで+Projectをクリックして新しいプロジェクトを作成します

2. プロジェクトを作成したら、Continuous Integrationモジュールに移動して新しいパイプラインを作成します。

手順3: コードベースを追加する
パイプラインで最初のCIステージの場合は、CI Stageの設定でClone Codebaseを有効にします。既存のパイプラインにCIステージがある場合は、Codebaseをクリックします。Edit Codebase Configurationを参照してください。
手順4: ビルドファームのインフラを定義する
CIステージのインフラ設定で、Codebase用のビルドファームを定義します。Kubernetes Cluster Build Infrastructure Setupを参照してください。
手順5: Snykテストの実行を設定する
CI ExecutionでAdd Stepをクリックし、次にRunをクリックします。

Runステップは、コンテナイメージ上で1つ以上のコマンドを実行します。
Snykは、Snyk CLIを含み、さまざまなプログラミング言語に対応するツールを備えたコンテナイメージを複数提供しています。この例では、サンプルアプリケーションで使用されているMaven版を使います。
Runステップの設定については、Run Step Settingsを参照し、Snyk APIトークンを追加してください。

この環境変数は、設定のCommandセクションで参照できます。

手順6: パイプラインを実行する
これでパイプラインを実行できます。
1. Save and Publishをクリックします。
2. Runをクリックします。Pipeline Inputsの設定が表示されます。
3. CI CodebaseでGit Branchをクリックします。
4. Git Branchに、Codebaseがあるブランチ名(masterなど)を入力します。

5. Run Pipelineをクリックします。
手順7: パイプラインの実行結果を確認する
ワークフローを実行すると、プロジェクトに脆弱な依存関係が含まれているため、SnykのTestステップは失敗します。また、Console Viewの切り替えをクリックして、レポート全体を確認できます。
注: テストをより細かく制御するには、severity-thresholdフラグに、対応するオプション(low|medium|high|critical)のいずれかを指定して、snyk testコマンドに渡します。このフラグを使うと、指定したレベル以上の脆弱性のみが報告されます

パイプライン全体はYAMLでも確認できます。Buildsで:
More Optionsをクリックします。
Edit Pipelineを選択します。
YAMLをクリックします。

以下に、パイプライン全体をYAMLで示します。パイプラインの内容を編集して、再度実行できます。
CI/CDワークフロー
アプリケーションの依存関係をスキャンするだけでなく、使用するコンテナの選択によっても脆弱性が持ち込まれることがあります。さらに、クラウドリソースの設定ミスは、クラウドデータやサービスへのアクセスに悪用される、最も一般的なクラウド脆弱性の原因となります。
この例では、アプリケーションをビルドしてKubernetesにデプロイし、その後Snykで監視します。
Harnessでコンテナをビルドしてプッシュするには、こちらの手順に従ってください。Snyk Containerのスキャンステップの追加方法は、上記のSnyk Testステップと同様です。
コンテナをKubernetesクラスターにデプロイする方法は、Harnessのドキュメントを参照してください。CDパイプラインでは、デプロイの前にKubernetesマニフェストに対してSnykテストを実行します。snyk iac testステップは、Shell Scriptステップを使って追加します。

Snyk IaCステップで実行するスクリプトは次のとおりです。
CI/CDワークフロー全体は次のようになります。


前述のとおり、このパイプラインはYAMLで確認できます。GitHubリポジトリにあります。
SnykはKubernetesと連携し、実行中のワークロードをインポートしてテストすることで、関連するイメージや設定の脆弱性を特定できます。インポート後もSnykはワークロードを継続的に監視し、新しいイメージがデプロイされたり、ワークロードの設定が変更されたりするたびに、新たなセキュリティ上の問題を検出します。
HarnessのCDワークフローでデプロイが成功すると、SnykのUIには次のように表示されます。


今すぐ試す
テクノロジープラットフォームを選ぶ際は、開発者のニーズをソリューションの中心に据えているものを選ぶことが重要です。また、問題を報告するだけでなく、修正に重点を置いている必要があります。開発者を第一に考えるプラットフォームは、パイプライン全体にセキュリティを統合できるため、開発、セキュリティ、運用など、さまざまな関係者が全体像を把握できます。これにより、DevSecOpsの共通意識が根付き、より安全なソフトウェアを利用者に届けられます。
このチュートリアルをご覧いただき、ありがとうございました。ぜひ今日からSnykとHarnessをお試しください。
ソースコードの段階からインフラを保護
Snykはワークフロー内のIaCセキュリティとコンプライアンスを自動化し、構成ドリフトや不足しているリソースを検出します。
著者について
Martin AnsongはHarnessのCommercial Sales部門のSolutions Engineerとして、お客様のソフトウェアライフサイクルにおけるビルドとデリバリーの迅速化を支援しています。
Pas ApicellaはSnykのAPJ担当Principal Solution Engineerとして、Snykプラットフォームを通じてお客様のクラウドネイティブアプリケーションのセキュリティ確保とDevSecOps文化の実現を支援するとともに、ビジネスニーズへの対応にも取り組んでいます。
