Java エージェントとセキュリティ

ここでは、New Relic Javaエージェントを利用する際のセキュリティの考慮すべき内容について説明します。

目次

概要

Javaエージェントは、Webトランザクションを監視し、それらの情報を収集し、New Relic UI にその情報を伝達します。エージェントは、JSR 163 準拠の「javaagent」としてパッケージ化され、JVM 起動処理に変更を加えることによって、JVMでアクティベートされます。一度、アクティベートされると、エージェントは、クラスのロードストリームに自分自身を挿入します。そして、バイトコード計測(bci)を使用して「監視したい対象」クラスメソッドを計測します

これにより、エージェントは、重要な場所にWebアプリケーションを計測するためのソフトウェアプローブを挿入しますす。これらの場所というのは、サーブレット、Struts のアクション、Spring の コントローラーのようなリクエストハンドラーを含みます。同様に、データベースや Web サービスへのリモートシステムコールも含みます。

また、エージェントは、JVM と JMX からデータをポーリングできます。エージェントは、毎分そのデータを New Relic の UI へポストします。そのため、UIでは、そのデータの所有者がログインして、自分の Web サイトの実行状態を確認できます。

環境

New Relic の Java エージェントがNew Relic の Web サービスに接続すると、ホスト環境についての情報を収集し、送信します。この情報は、主に当社のサポートチームが使用しています。エージェントが収集するデータは以下のとおりです。

  • OS の種類とバージョン
  • Java のバージョン
  • 全システムプロパティ
  • newrelic.yml ファイル内容

データタイプ

Java エージェントは、様々な種類のデータを収集します。

集計メトリクス

これは、「正規化された」URLリクエストが行われた回数と平均レスポンスタイムを追跡するカウンタです。
たとえば、Spring コントローラーのURLにおける当社のソフトウェアプローブが、1分間に1000回呼び出されたとします。その場合は、集約メトリックは、呼び出し回数1000と全1000呼び出しのレスポンスタイムの合計時間を記録します。集合メトリックの追跡に使うメモリ量は、コールの数に関係なく、固定されています。集約メトリクスは、New Relic UI の時系列グラフを表示します。また、New Relic は、データベーステーブルのメトリックも作成します。

トランザクショントレース

これは、単一のWebリクエストのスナップショットです。スローリクエストのみ収集されます。分あたりで最も遅いトランザクショントレースは、New Relic の UI に送信されます。トランザクショントレースは、リクエストの詳細情報を含んでおり、HTTP パラメーターや難読化したデータベースクエリも必要に応じて含みます。

エラーのスナップショット

これは、アプリケーションが Webブラウザに伝えているキャッチされない例外の記録です。オプションとして、リクエストのHTTPパラメーターや未処理の例外も含みます。例外の一部は、管理アプリケーションからのスタックトレースです。

リクエストパラメーターのキャプチャ

トランザクショントレースとエラーのスナップショットの両方をオプションとして HTTPパラメーター記録できます。HTTP パラメーターはクレジットカードなどの機密情報を含んでいることがあります。エージェントには、HTTPパラメーターを収集する設定オプションがあります。しかし、特定の名前付きパラメータを除きます。

Webアプリケーションは、エージェント内のAPIを呼び出すことで、トランザクショントレースとエラーのスナップショットに任意のデータを挿入できます。たとえば、New Relic でも自前のサイトに対して、ユーザーが設定したタイムウィンドウを記録するのにこの機能を使っています。

スレッドプロファイラー

スレッドプロファイラーは、Javaスレッドのサンプルを抽出し、スタックトレースをレポートします。この機能は、newrelic.yml 構成ファイルでオフにできます。スレッドプロファイルに紐づくのは、ソースコードのクラスやメソッドの情報のみです。ユーザーデータは存在しません。

アプリケーションへの影響

エージェントは、Webアプリケーションへの影響を最小限になるように設計されました。独自クラスと衝突しないように、すべてのクラスがnewrelic パッケージの名前空間にあります。

エージェントは、ソフトウェアプローブを挿入するために、ASM bci エンジンを使用します。これにより、アプリケーションの開始時間に対しての影響が10%未満と測定されてています。実行速度の減少は、5%以下です。なぜなら、リクエストの処理とリモートシステムへの呼び出しだけを計測しているためです。メモリへの影響は、約5%です。

セキュリティ

データが、エージェントからNew Relic UI への1分後に HTTP や HTTPS を通じて通知されます。メッセージフォーマットは、JSON です。データが正しく受信された場合もしくは、エラーが発生した場合、Webサイトはそれを知らせるエージェントに JSON レスポンスを返します。それはDMZと私たちのサイトとの間で、標準のHTTPプロキシサーバーを使用できます。また、すべての通信を(監査用)ログファイルにダンプするモードをエージェントに備えています。

アカウントのデータは、ユーザーが所有する(もしくは参照する権限を与えられてる)アカウントのデータのみ見ることができます。New Relic は、お客様のデータに関して一定の権利を有します。詳しくは、New Relic のWebサイト上で利用規約を参照してください。

New Relic のデフォルトのエージェント設定は、ハイレベルのセキュリティを提供します。但し、デフォルトのエージェント設定をより許容範囲を広くなるように変更し、New Relic に非機密データを送信した場合、それを保証する必要があるかもしれません。詳しくは、ハイセキュリティをご覧ください。

さらに詳しい情報

追加のドキュメントリソースは次のとおりです。