Skip to main content

Snykの脆弱性データをNew Relicのオブザーバビリティプラットフォームに送信する方法

著者

Harry Kimpel

feature snyk new relic dash

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のレポートに表示したり、ほかのさまざまな方法でインテグレーションしたりできます。

Azure DevOpsのSnyk Codeレポート。重大度の高い問題が27件、中程度が20件、低い問題が157件表示され、クロスサイトスクリプティングの脆弱性も含まれています

オブザーバビリティの重要性

New Relicはオブザーバビリティ分野の優れたツールです。メトリクス、イベント、ログ、トレース(MELT)など、さまざまな種類のモニタリングデータを統合・関連付け、幅広い環境に対応するネイティブ機能を備えた単一のプラットフォームで管理できます。

New Relicを使えば、APMやKubernetesクラスターの監視を通じて、アプリケーションで何が起きているかを正確に把握できます。実行中のPodや、各コンテナの健全性も確認できます。このようなユースケースでは、デプロイの一部にセキュリティ上の問題や潜在的な脆弱性がないかも把握したいところです。

本記事では、このようなユースケースを取り上げます。

SnykとNew Relicのインテグレーション

まずはユースケースと対象環境を検討し、要件に最適なインテグレーションの種類を選びましょう。

選択肢は次のとおりです。

  1. Snyk webhookを使ったNew Relic Security API

  2. Snyk webhookを使ったNew Relic Events API

  3. 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のドキュメントをご覧ください)、次のアプリケーション設定を追加します。

SnykアカウントでAzure DevOps Reposを使用している場合は、次のアプリケーション設定も追加してください。

  • AZURE_DEVOPS_ORG: Azure DevOps組織の名前

トラブルシューティング用に、別のNew Relicイベントに記録するオプションのパラメーターもあります。活用する場合は、次の2つのアプリケーション設定も追加してください。

「relic」で絞り込まれたNew Relicのアプリケーション設定が表示されたAzure Function Appの構成画面。ライセンスキーとセキュリティキーは非表示。

Azure FunctionsのURLを取得する

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

「Get Function Url」ボタンが強調表示された、New Relic関数を示すMicrosoft Azureポータル

Snyk webhookを作成する

提供されているAPIを使えば、Snyk webhookを簡単に作成できます。必要なのは、Snykの組織ID、Snyk認証トークン、送信先のwebhook URLだけです。リクエストの例を以下に示します。お好みのツールを使って送信してください。

POST https://snyk.io/api/v1/org/{SNYK-ORG-ID}/webhooks HTTP/2
Host: snyk.io
Authorization: token {SNYK-TOKEN}
Content-Type: application/json

{
    "url": "https://{URL}",
    "secret": "my-secret-string"
}

実行すると、次のようなレスポンスが返されます。

{
  "id": "{SNYK-WEBHOOK-ID}",
  "url": "https://{URL}",
}

Snyk Ping APIを使ってwebhookを事前に呼び出し、インテグレーションをテストすることもできます。

POST https://snyk.io/api/v1/org/{SNYK-ORG-ID}/webhooks/{SNYK-WEBHOOK-ID}/ping HTTP/2
Host: snyk.io
Authorization: token {SNYK-TOKEN}
Content-Type: application/json

Snykに合わせたUIとクイックスタートダッシュボード

Azure FunctionとSnyk webhookを作成すると、再テスト頻度が設定されたSnykプロジェクト、または手動でスキャンしてSnykが新たな問題を検出したプロジェクトのデータが届くようになります。

Vulnerabilityイベントタイプを確認して、New Relicにデータが流れていることを検証できます。

脆弱性数のクエリと、顕著な急増を示す時系列チャートを表示したNew Relicのメトリクス&イベントダッシュボード

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

「Vulnerability management」アプリがお気に入りに登録され、24個のアプリが一覧表示されたNew Relic Appsページ
脆弱性の概要、未解決の脆弱性のグラフ、インテグレーション、修正指標を表示するNew Relic Securityダッシュボード。

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

重大度別の問題数、ドーナツチャート、時系列グラフを表示するNew Relicの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アプリの構成を開き、次のアプリケーション設定を追加します。

「relic」で絞り込まれたNew Relicのアプリケーション設定が表示されたAzure Function Appの構成画面。

ダッシュボードのサンプル

Eventsセクションでデータをクエリし、New Relicに実際に取り込まれていることを確認できます。

New Relic Query Builderに、Snykプロジェクトの脆弱性件数を取得するNRQLクエリと、深刻度別の結果テーブルが表示されています。

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

プロジェクトとリポジトリごとの問題数、プロジェクトの起点と優先度スコア、プロジェクトと問題の生データテーブルを表示するSnykダッシュボード。

方法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トークンが含まれます)。次のコマンドでデプロイしてください。

kubectl apply -f examples/secrets.yaml

kubectl apply -f examples/deployment.yaml

New Relic Kubernetesインテグレーションをデプロイする

New RelicのUIにあるガイド付きインストールを使うと、Kubernetesインテグレーション用のカスタムインストールとデプロイスクリプトを設定できます。すべてのPrometheusエンドポイントをスクレイピングするオプションを必ず選択してください。

Prometheusエンドポイントの収集、ログデータの収集、取り込みデータの削減を設定するオプションが表示された、New RelicのKubernetesインテグレーション設定ダイアログ。

メトリクスを可視化する

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

New Relicのメトリクスダッシュボード。snyk_vulnerabilities_totalメトリクスを30分間表示し、折れ線グラフは9でピークに達しています。

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

ダッシュボードを確認する

クイックスタートの準備ができたら、New Relicのダッシュボードセクションを開き、インポートしたSnykダッシュボードでSnyk exporterからのすべてのメトリクスを確認できます。

脆弱性の傾向、重大度別の合計、問題の種類、アップグレード可能およびパッチ適用可能な検出結果、スキャンの生データを表示するセキュリティダッシュボード。

セキュリティを観測する

これで、同じコインの表裏をひとつにまとめられました。慣用句としては少し違うかもしれませんが、ログ、メトリクス、イベント、トレース、そして脆弱性データまで、すべてをひとつの画面で確認できるようになったことが大切です。ぜひご活用ください。

CTFを始めよう

オンデマンドのバーチャル入門ワークショップで、CTFチャレンジの解き方を学びましょう。

関連リンク・参考資料