PostgreSQL の EXPLAIN PLAN のセキュリティ

Java、Python、Ruby エージェントのみ: 以下は、PostgreSQL データベースを使っており、かつ EXPLAIN PLAN が有効になっているエージェントに関する情報です。ここで述べる問題は、他の New Relic エージェントには適用されません。

この機能へのアクセスできるかは、サブスクリプションレベルによって異なります。

背景

2014年3月5日以前は、PostgreSQL データベースでスロークエリが検出された時、SQL 記録方法が obfuscated [難読化](デフォルト)に設定されていても、SQL パラメータは生成された実行計画ごしに、New Relic に送信されていました。第三者にデータが晒されることはありません。しかしながら、場合によっては、PostgreSQL クエリのパラメータに、顧客の機密データが含まれている場合もありました。

2014年3月5日から、EXPLAIN PLAN を有効にして SQL 記録を obfuscated [難読化](デフォルト)に設定すると、PostgreSQL の EXPLAIN PLAN のパラメータもエージェントによってマスクされるようになりました。この変更を自動的に有効にするには、Java、Python、Ruby エージェントの最新バージョンをダウンロードしてインストールしてください。

解決策: エージェントのアップデート

PostgreSQL クエリの機密パラメーターを New Relic に送信しないようにするには、エージェントの最新バージョンをダウンロードしてインストールします。

  • Java: (Java SE 5 用) バージョン 2.21.5 以上、(Java SE 6 または 7 用) バージョン 3.5.0 以上
  • Python: バージョン 2.16.0.12 以上
  • Ruby: バージョン 3.7.3 以上

手動で設定を変更する (一時的)

最新の Java、Python、Ruby エージェントにすぐにアップグレードできない場合は、設定ファイルを手動で変更して、PostgreSQL データベースを使用するアプリケーションの EXPLAIN PLAN を無効にします。そうすることで、エージェントは SQL パラメータを含め EXPLAIN PLAN を送信しなくなります。

これは単なる一時しのぎな対策にすぎません。できるだけ早くエージェントをアップグレードしてください。explain_enabled を変更すると、機密情報となり得るデータがパラメータを介して公開される可能性があります。エージェントをアップグレードするまで、必要なアップグレードに関して UI 上に警告バナーは表示されません。
エージェント PostgreSQL とスロー SQL クエリを手動で無効化する
Java Java の newrelic.yml 設定ファイルの transaction_tracer stanza で以下を設定します。

    explain_enabled: false
先頭にスペースを4つ入れてから、explain_enabled と書き始めてください。
Python Python の newrelic.ini 設定ファイルで、以下を設定します。

transaction_tracer.explain_enabled = false
Ruby Ruby newrelic.yml 設定ファイルに以下を設定します。

transaction_tracer.explain_enabled: false

サーバーサイドの設定

上記の代わりに、サーバー側の設定を使って変更を行うこともできます。 (サーバー側の設定は、エージェントの設定ファイルよりも優先されます)

  1. New Relic APM のメニューバーから、Applications > (選択したアプリ) > Settings > Application を選択します。
  2. Show advanced settings [高度な設定を表示]を選択します。
  3. Transaction tracing セクションの Enable SQL query plan? チェックボックスのチェックを外します。
  4. Save application settings [アプリケーションの設定を保存]を押します。

詳しくは、トランザクショントレースの設定をご覧ください。

PostgreSQL トレースの削除

スロークエリトレースやその他のサンプルデータは収集して7日後に自動的に削除されます。例外:誰か閲覧したトランザクションは、アカウントが有効な間、そのトランザクションを1年間保持します。PostgreSQL (やその他のスロークエリの) トレースに機密データが表示されるか心配な場合は、手動で削除することができます。

トランザクショントレース単体を削除する

EXPLAIN PLAN を含む個々のトランザクション・トレースを削除する手順は以下の通りです。

  1. New Relic APM のメニューバーから、Applications > (選択したアプリ) > Monitoring > Transactions > (選択したトランザクショントレース)へアクセス。

    または: New Relic APM のメニューバーから、Applications > (選択したアプリ) > Monitoring > Overview > (選択したトランザクション) > (選択したトランザクショントレース) へアクセス。

  2. 選択したトランザクショントレースで、Delete this trace [このトレースを削除]を押し、続けて表示されるポップアップの指示に従う。
アプリの全トレースを削除する
オーナーまたは管理者

EXPLAIN PLAN を含め、データベースクエリを含む選択しているアプリのトレースを完全に削除する手順は以下の通りです。

  1. New Relic APM のメニューバーから、Applications > (選択したアプリ) > Monitoring > Transactionsへアクセス。
  2. Delete all traces [全トレースを削除]を押し、続けて表示されるポップアップの指示に従う。
アカウントトレースを削除したい場合は、support.newrelic.com に相談してください。