デフォルトでは、AppDynamics Java エージェントは、コントローラに組織が特権情報として分類する可能性のあるトランザクションデータを送信します。このようなデータは診断およびトラブルシューティングに役立ちますが、セキュリティを考慮すると、コントローラのビューから特定の情報をフィルタ処理する必要があります。次のものを使用できます。

  • 環境変数、システムプロパティ、および JMX データを除外するための機密データフィルタ。
  • スナップショット詳細の URL から機密情報を除外するための機密 URL フィルタ。 
  • アプリケーションがログメッセージまたは例外詳細メッセージに入れる可能性がある機密データを除外するための機密メッセージフィルタ。

デフォルトの機密データフィルタ

機密データフィルタを有効にすると、コントローラは一致する環境変数またはシステムプロパティの値に対してアスタリスクを表示します。デフォルトでは、Java エージェントは app-agent-config.xml で 2 つの機密データフィルタを有効にします。

  • 大文字と小文字を区別しないサブストリング「password」を含む環境変数またはシステムプロパティ。
  • 大文字と小文字を区別しないサブストリング 「key」を含む環境変数またはシステムプロパティ。
<sensitive-data-filters>
        <sensitive-data-filter applies-to="environment-variables,system-properties" match-type="CONTAINS" match-pattern="password"/>
 
        <sensitive-data-filter applies-to="environment-variables,system-properties" match-type="CONTAINS" match-pattern="key"/>
</sensitive-data-filters>

機密データフィルタを追加する

  1. バージョン管理された app-agent-config.xml ファイル <agent_home>/<version_number>/conf/app-agent-config.xml を編集します。
  2. 次のいずれかの属性を使用して、機密データフィルタ要素を機密データフィルタ要素の子として追加します。
    • 次のものをフィルタ処理するには、applies-to 属性にカンマ区切りのリストを指定します。

      environment-variables

      system-properties

      jmx-mbeans 

    • 次のように match-type 属性を設定します。

      EQUALS

      CONTAINS

      STARTSWITH

      ENDSWITH

    • match-pattern 属性と照合する文字列を指定します。文字列の一致では、大文字と小文字が区別されません。パターンは、値ではなく、環境変数とシステムプロパティ名と照合します。

  3. JVMを再起動。

次の例では、Java エージェントは文字列「DB_」で始まるシステムプロパティと環境変数をチェックします。コントローラには、一致する環境変数とシステムプロパティの値がアスタリスクとして表示されます。たとえば、環境変数「DB_USER」はアスタリスクに置き換えられます。

<sensitive-data-filter applies-to="environment-variables,system-properties" match-type="STARTSWITH" match-pattern="DB_"/>

機密URLフィルタを追加する

機密URLフィルタを使用して、トランザクションスナップショット詳細のURLから機密情報を難読化するようにエージェントを構成できます。

  1. バージョン管理された app-agent-config.xml ファイル <agent_home>/<version_number>/conf/app-agent-config.xml を編集します。
  2. 機密URLフィルタ要素を、機密URLフィルタ要素の子として追加します。

    <sensitive-url-filter delimiter=""    segment="" match-filter=“EQUALS|INLIST|STARTSWITH|ENDSWITH|CONTAINS|REGEX|NOT_EMPTY"    match-pattern="pattern"    param-pattern=""/>
    CODE
    • delimiter:URL セグメントのエンドポイントとして使用する文字を指定してください。エージェントは各区切り文字インスタンスでURLを接続してセグメントを作成します。HTTPの場合は、スラッシュ文字「/」を使用してください。スラッシュの場合、エージェントはプロトコル直後のスラッシュでは分割しません。たとえば、"https://myapp.example.com/" は 1 つのセグメントを構成します。デフォルトでは、区切り文字は「/」です。

    • segment:エージェントがフィルタ処理するセグメントを指定するには、カンマ区切りのリストを指定します。セグメント番号は 1 から始まります。 
    • match-patternmatch-filter でフィルタ処理する文字列を指定します。

    • param-pattern:フィルタ処理するクエリパラメータに一致する正規表現を指定します。

たとえば、次の構成は URL を「/」文字で分割し、URL の 2 番目のセグメントと 3 番目のセグメントの param-pattern をマスクします。この場合、セグメンテーションと難読化は「myapp」を含む URL にのみ適用されます。

<sensitive-url-filters>
<sensitive-url-filter delimiter="/"  segment="2"  match-filter="CONTAINS”  match-pattern="myapp"  param-pattern="[a-z]+_name"/>
</sensitive-url-filters>
CODE

https://myapp.example.com/sensitive/data?first_name=abc&last_name=xyz への exit コールは、"https://myapp.example.com/"、"sensitive"、および "data?first_name=abc&last_name=xyz" という 3 つのセグメントに分かれています。コントローラには、スナップショットの詳細に URL と param-pattern のマスクされた値が https://myapp.example.com/*****/data?first_name=***&last_name=***  のように表示されます

クエリパラメータに値を使用しない場合、コントローラはURL内のクエリパラメータをマスクしません。

機密メッセージフィルタを追加する

機密メッセージフィルタを使用して、エージェントがログメッセージから収集したテキストメッセージ、または例外からの詳細メッセージに含まれる機密情報を難読化するようにエージェントを構成できます。 

  1. バージョン管理された app-agent-config.xml ファイル <agent_home>/<version_number>/conf/app-agent-config.xml を編集します。

  2. 機密メッセージフィルタ要素を、機密メッセージフィルタ要素の子として追加します。

<sensitive-message-filter message-type="throwable,logger-message,all" match-type="EQUALS|CONTAINS|STARTSWITH|ENDSWITH|REGEX" match-pattern="CASESENSITIVE_PATTERN" redaction-regex="SENSITIVE_INFO_REGEX_GROUP"/>
CODE
  • message-type は throwable、logger-message、または all を指定します。
  • match-type は編集のためのメッセージの opt-in に使用されるべきマッチのタイプを指定します。

  • match-pattern はマッチしたときにメッセージを編集用にオプトインするパターンを指定します。

  • redaction-regexopted-in メッセージから編集されるべきデータを識別する正規表現を指定します。

たとえば、アプリケーションが秘密の数値を含むSQLクエリを記録した場合、次の構成では記録されたメッセージからすべての数値データが削除されます。

<sensitive-message-filter message-type="logger-message" match-type="CONTAINS" match-pattern="SELECT" redaction-regex="[0-9]+"/>
CODE

次の結果になります:

"SELECT name from customer WHERE customer.id = 773"

次のものとしてとして収集されています

"SELECT name from customer WHERE customer.id = *****"