トランザクショントレースのセキュリティ設定

性質上、トランザクショントレースはユーザーがサイトを利用した際の特定のアクションについての情報をキャプチャします。この情報はパフォーマンス問題の追跡に不可欠です。同時に、この収集プロセスはセキュリティの問題も含みます。セキュリティに関して New Relic APM のトランザクショントレース機能をカスタマイズするには、以下の設定を行います。

目次

データベースクエリと HTTP リクエスト属性

キャプチャしたクエリにはキャプチャしたくない(する必要のない)機密情報を含んでいる可能性があります。Record SQL? [SQLを記録する?]の設定は、デフォルトでは「Obfuscated」[難読化する]です。難読化は文字列リテラルと数値シーケンスを取り除き、変わりに ? 文字に置き換えます。以下はその例です。

select * from table where ssn='0115551212'

難読化後

select * from table where ssn=?

また、トレースの文脈をより詳しく知るためにトランザクショントレース内に HTTP リクエスト属性をキャプチャします。

HTTP リクエスト属性

デフォルトでは、トランザクショントレースとエラーのスナップショットの両方とも HTTP リクエスト属性を記録しません。なぜなら、HTTP リクエスト属性には機密情報を含むことがあるためです。

トランザクショントレースやエラーのスナップショットで HTTP 属性の収集を有効にするには、New Relic APM のメニューバーから、Applications > (選択したアプリ) > Settings > Application > Request attributes を選択し、 Capture attributes? (属性をキャプチャする?)をオンにします。さらに詳しい情報については、カスタム属性の収集をご覧ください。

Ruby: newrelic.yml ファイル内にある以下のオプションも使えます。

    # Tells transaction tracer and error collector (when enabled) whether or not to capture HTTP params.
    # When true, the RoR filter_parameters mechanism is used so that sensitive parameters are not recorded
    capture_params: true

ここに示したように、Ruby用エージェントは、ログファイルにおいて機密情報を含む属性またはパラメータを非表示にするために使用する Rails の filter_parameters の仕組みを尊重しています。Rails の以前のバージョンでは、 filter_parameters の仕組みはfilter_parameter_logging メソッドと呼ばれていました。

リクエスト属性

トランザクショントレースの Custom attributes [カスタム属性]セクションにカスタムデータを追加したい場合は、New Relic APM のメニューバーから、Applications > (選択したアプリ) > Settings > Application > Request attributes を選択し、Capture attributes? [属性をキャプチャする?]をオンにしてください。詳しくはカスタム属性の収集をご覧ください。

エージェント API を使うことで、コントロールできます。以下は Ruby の例です。

::NewRelic::Agent.add_custom_parameters(options = {})

Ruby では、オプションの値は key/value ペアのハッシュです。一般的に他のエージェント API では、属性を name/value ペアとして個別に記録します。key と value はシリアライズされます。そして、それらは New Relic が String、FixedNum、Float のようなクラスに変換できる値でなければなりません。

詳しくは、お使いのエージェントの API ドキュメントを参照ください。

難読化 (Ruby)

デフォルトの難読化処理ではあなたの要件を満たし切れない場合、Ruby 用エージェント API を使って、クエリ文から機密データを削除するためのカスタム難読化を行えます。難読化対象を減らしたい場合にも利用できます。以下の Ruby 用エージェント API を使います。

::NewRelic::Agent.set_sql_obfuscator(type, &block)

type は以下の値を取ります。

  • :before (デフォルト難読化ブロックを実行する前にあなたの難読化ブロックを実行する)
  • :after (デフォルト難読化ブロックを実行後にあなたの難読化ブロックを実行する)
  • :replace (デフォルトの難読化をあなたの難読化ブロックに置き換える)

難読化ブロックは一つの文字列のクエリを属性として取ります。難読化ブロックは、1つの属性を返します。

クエリ収集ブロック (Ruby)

Ruby用のエージェン API を使用して、ブロック内のすべてのクエリの収集を無効にする方法は以下です。

::NewRelic::Agent.disable_sql_recording do
  ...
  end

関連情報

関連情報は次のとおりです。