Snykの脆弱性データをNew Relicのオブザーバビリティプラットフォームに送信する方法
Harry Kimpel
2022年10月21日
0 分で読めますアプリケーションの健全性を保つうえで、セキュリティデータとオブザーバビリティデータは密接に関係しています。この2つのデータソースを一元的に確認できれば、運用を大幅に効率化できます。Snykプラットフォームが提供するさまざまな方法を活用すれば、Snykが検出したアプリケーションのセキュリティ脆弱性をすべて、New Relicのオブザーバビリティプラットフォームに直接送信できます。詳しく見ていきましょう。
前提条件
始めるにあたり、必要なリンクを以下にまとめました。
Snykによる脆弱性スキャン
Snykは、独自コードの静的アプリケーションセキュリティテスト(SAST)、オープンソース依存関係のソフトウェア構成分析(SCA)、コンテナスキャン、クラウドインフラストラクチャのスキャンに対応しています。
スキャン結果は、ユースケースに応じて最適な場所とタイミングで活用できるのが理想です。CLIやIDEとのインテグレーションを使えば、スキャン結果をターミナルやIDE内に直接表示できます(コードエディターに赤い波線が表示されます)。リポジトリスキャンや、お好みのCI/CD環境内でのスキャン結果を、ポータルやUIで可視化することもできます。
さまざまなCI/CDツール向けのネイティブソリューションも活用できます。たとえば、スキャン結果をGitHubやGitLab Security Centerに送信したり、Azure DevOpsのレポートに表示したり、ほかのさまざまな方法でインテグレーションしたりできます。

オブザーバビリティの重要性
New Relicはオブザーバビリティ分野の優れたツールです。メトリクス、イベント、ログ、トレース(MELT)など、さまざまな種類のモニタリングデータを統合・関連付け、幅広い環境に対応するネイティブ機能を備えた単一のプラットフォームで管理できます。
New Relicを使えば、APMやKubernetesクラスターの監視を通じて、アプリケーションで何が起きているかを正確に把握できます。実行中のPodや、各コンテナの健全性も確認できます。このようなユースケースでは、デプロイの一部にセキュリティ上の問題や潜在的な脆弱性がないかも把握したいところです。
本記事では、このようなユースケースを取り上げます。
SnykとNew Relicのインテグレーション
まずはユースケースと対象環境を検討し、要件に最適なインテグレーションの種類を選びましょう。
選択肢は次のとおりです。
Snyk webhookを使ったNew Relic Security API
Snyk webhookを使ったNew Relic Events API
Snyk exporterを使ったNew Relic Metrics API
たとえば、アーキテクチャと環境全体がKubernetes上で稼働し、Prometheusのメトリクスを活用している場合は、Metrics APIが適しています。一方、Kubernetesが技術環境の一部にしか使われておらず、ほかの環境も対象にしたい場合は、webhookが適しているかもしれません。
注: インテグレーション1と2は、C#で記述されたAzure Functionsをベースにしています。これらはクイックスタートのサンプルとして、処理の流れやペイロードの形式を示すためのものです。もちろん、AWS Lambdaなどのサーバーレス環境を含む、任意のプログラミング言語やランタイム環境に合わせて変更することもできます。
方法1: Snyk webhookを使ったNew Relic Security API
これは、あらゆる種類のセキュリティ関連情報をNew Relicプラットフォームに送信するための最新の方法です。この方法の利点は、New Relicが取り込んだデータの種類を「理解」し、その情報に合わせたUIを提供できることです。また、New Relicが取り込めるほかの種類のデータと、標準化された方法で情報を関連付けられます。
関連付けの例を以下に示します。
APMで監視しているアプリケーション、そのアプリケーションが存在するリポジトリ、そしてSnykがアプリケーションセキュリティの観点から特定した関連する問題
Kubernetesクラスター内で稼働しているコンテナについて、New Relicが実行時の動作をすべて把握し、Snykがコンテナのセキュリティに関する詳細情報を提供するケース
Azure Functionsアプリを作成する
まず、通常の手順に従ってAzure Functionsアプリを作成し、構成します(詳しくはMicrosoftのドキュメントをご覧ください)。実際のAzure Functionsコードのサンプルは、このリポジトリにあります。
Azure Functionsの環境変数を設定する
Azure Functionsアプリの構成を開き(詳しくはMicrosoftのドキュメントをご覧ください)、次のアプリケーション設定を追加します。
NEW_RELIC_SECURITY_URL: New Relic Security APIのURL。例: https://security-api.newrelic.com/security/v1
NEW_RELIC_LICENSE_KEY: New Relicのライセンスキー
SnykアカウントでAzure DevOps Reposを使用している場合は、次のアプリケーション設定も追加してください。
AZURE_DEVOPS_ORG: Azure DevOps組織の名前
トラブルシューティング用に、別のNew Relicイベントに記録するオプションのパラメーターもあります。活用する場合は、次の2つのアプリケーション設定も追加してください。
NEW_RELIC_INSIGHTS_URL: New RelicアカウントのイベントAPIのURL。例: https://insights-collector.newrelic.com/v1/accounts/{NR-ACCOUNT-ID}/events

Azure FunctionsのURLを取得する
該当するAzure Functionを選択し、Get Function Urlをクリックします。Snyk webhookを作成する次の手順で、このURLが必要になります。

Snyk webhookを作成する
提供されているAPIを使えば、Snyk webhookを簡単に作成できます。必要なのは、Snykの組織ID、Snyk認証トークン、送信先のwebhook URLだけです。リクエストの例を以下に示します。お好みのツールを使って送信してください。
実行すると、次のようなレスポンスが返されます。
Snyk Ping APIを使ってwebhookを事前に呼び出し、インテグレーションをテストすることもできます。
Snykに合わせたUIとクイックスタートダッシュボード
Azure FunctionとSnyk webhookを作成すると、再テスト頻度が設定されたSnykプロジェクト、または手動でスキャンしてSnykが新たな問題を検出したプロジェクトのデータが届くようになります。
Vulnerabilityイベントタイプを確認して、New Relicにデータが流れていることを検証できます。

さらにNew Relicは、Vulnerability managementというNew Relicアプリを提供しています。最適化されたUIで、送信されたすべての問題を可視化できます。


また、Snykチームが作成したクイックスタートテンプレートには、カスタムダッシュボードのサンプルが含まれています。優先順位付けとノイズ削減を重視した、Snyk推奨の形式でデータを表示できます。

方法2: Snyk webhookを使ったNew Relic Events API
このインテグレーションでは、New Relic Events APIを使い、あらゆる種類のデータをイベントとしてNew Relicプラットフォームに取り込む汎用的な方法を利用します。
New Relic Security APIを使う方法との違いは、ペイロードの形式をあらかじめ整える必要がないことです。New Relicは、前提条件やEvent APIの上限、制限対象の属性などに関する制約はあるものの、ほぼあらゆるペイロードを受け入れます。
Azure Functionのコードサンプルはこちらのリポジトリにあります。Microsoft Azure上でAzure Functionsアプリを作成・設定するには、New Relic Security APIの手順に従ってください。さらに、Snyk webhookを作成する手順も実行してください。
Azure Functionsの環境変数を設定する
Azure Functionsアプリの構成を開き、次のアプリケーション設定を追加します。
NEW_RELIC_INSIGHTS_URL: New RelicアカウントのイベントAPIのURL。例: https://insights-collector.newrelic.com/v1/accounts/{NR-ACCOUNT-ID}/events
NEW_RELIC_LICENSE_KEY: New Relicのライセンスキー

ダッシュボードのサンプル
Eventsセクションでデータをクエリし、New Relicに実際に取り込まれていることを確認できます。

New Relicでは、データをわかりやすいダッシュボードで可視化することもできます。

方法3: Snyk exporterを使ったNew Relic Metrics API
Snyk exporterは、Snyk HTTP APIをスクレイピングしてスキャンデータをPrometheusメトリクスとしてエクスポートするオープンソースツールです。このPrometheus exporterは、Kubernetesクラスターに簡単にデプロイできます。本記事ではこの構成を取り上げます。exporterは、Kubernetesの外部でスタンドアロンとして実行することもできます。
本記事ではKubernetesのユースケースを取り上げます。主な理由は、New RelicのDockerおよびKubernetes向けPrometheus OpenMetricsインテグレーションを活用し、PrometheusのエンドポイントをスクレイピングしてNew Relicにデータを送信することで、重要なメトリクスを1つのプラットフォームに保存・可視化したいからです。
次の手順でデプロイします。
Snyk exporterをデプロイする
Snyk exporterには、調整して利用できるデプロイ用YAMLが含まれています(secrets.yamlにはSnykアカウントのAPIトークンが含まれます)。次のコマンドでデプロイしてください。
New Relic Kubernetesインテグレーションをデプロイする
New RelicのUIにあるガイド付きインストールを使うと、Kubernetesインテグレーション用のカスタムインストールとデプロイスクリプトを設定できます。すべてのPrometheusエンドポイントをスクレイピングするオプションを必ず選択してください。

メトリクスを可視化する
New Relic Kubernetesインテグレーションをデプロイすると、Snyk exporterからメトリクスが送られてくるようになります。

メトリクスを可視化するために、独自のダッシュボードを作る必要はありません。Snykのplaygroundリポジトリにある既成のダッシュボードを、New Relicアカウントにインポートして利用できます。
ダッシュボードを確認する
クイックスタートの準備ができたら、New Relicのダッシュボードセクションを開き、インポートしたSnykダッシュボードでSnyk exporterからのすべてのメトリクスを確認できます。

セキュリティを観測する
これで、同じコインの表裏をひとつにまとめられました。慣用句としては少し違うかもしれませんが、ログ、メトリクス、イベント、トレース、そして脆弱性データまで、すべてをひとつの画面で確認できるようになったことが大切です。ぜひご活用ください。
CTFを始めよう
オンデマンドのバーチャル入門ワークショップで、CTFチャレンジの解き方を学びましょう。
