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

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

データフィルタ形式

データフィルタは、スナップショットまたは分析で URL を設定するときに使用されます。 

{
  "appliesTo": "...",
  "matchPattern": "..."
}
CODE
  • matchPattern(必須):フィルタリングをトリガーする機密データを定義する正規表現。
  • appliesTo(必須):パターンを適用するデータの種類を定義するタグ。使用できる値は、env-varshttp-cookieshttp-session-keyhttp-headershttp-params、および user-data です。 
    • env-vars タグは、password または key を含むデフォルトの 2 つのデータフィルタによって定義されます。ただし、これらのフィルタは、環境変数の有効なカスタムフィルタで上書きできます。 
    • Http タグと user-data タグは、Transaction Snapshots または Analytics Reports のデータを処理する場合にのみ考慮されます。

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

機密データフィルタを有効にすると、コントローラは一致する環境変数またはシステムプロパティの値に対してアスタリスクを表示します。デフォルトでは、Java エージェントは設定を addAppAgentSensitiveDataFilters() メソッドに渡すことにより、2 つの機密データフィルタを有効にします。

{
  "messageFilters": [
    { "messageType": "throwable",
      "matchPattern": "test" },
    { "messageType": "throwable",
      "matchPattern": "ip",
      "redactionRegex": "(\\d+\\.)+\\d+" }
  ],
  "dataFilters": [
    { "appliesTo": "http-headers",
      "matchPattern": "test" }
  ],
  "urlFilters": [
    { "delimiter": "/",
      "segment": "1,2",
      "matchPattern": "test1",
      "paramPattern": "test2" }
  ]
}

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

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

  1. 機密URLフィルタ要素を、機密URLフィルタ要素の子として追加します。

    {
      "delimiter": "...",
      "segment": "..." ,
      "matchPattern": "...",
      "paramPattern": "..."
    }
    CODE
  • delimiter
  • segment:エージェントがフィルタ処理するセグメントを指定するには、カンマ区切りのリストを指定します。セグメント番号は 1 から始まります。 
  • match-patternmatch-filter でフィルタ処理する文字列を指定します。
  • param-pattern:フィルタ処理するクエリパラメータに一致する正規表現を指定します。
  • URL セグメントのエンドポイントとして使用する文字を指定します。エージェントは各区切り文字インスタンスでURLを接続してセグメントを作成します。HTTPの場合は、スラッシュ文字「/」を使用してください。  

    インデックスは 1 から始まり、プロトコル名(http://https://...)は特殊なケースとして扱われないため、プロトコル:"http://myapp.example.com/sensitive/data?first_name=abc&last_name=xyz" を含む URL のセグメントは次のようになります。

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

{
  "delimiter": "/",
  "segment": "4" ,
  "matchPattern": "myapp",
  "paramPattern": "[a-z]+_name"
}
CODE

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

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

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

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

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

{   
  "messageType": "",        // type of message for which the filter applies
  "matchPattern": "",       // regex filter to search in data
  "redactionRegex": ""      // regex filter of how masking is applies(optional), by default masks entire data
}
CODE
  • messageTypethrowable を指定します

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

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

たとえば、アプリケーションの例外メッセージに秘密の数値が含まれている場合、次の設定はその参照をマスクします。

{ 
   "messageType": "throwable", 
   "matchPattern": "test", 
   "redactionRegex": "\\d+" 
}
CODE

例外メッセージ「`Unable to update the user profile (ID: 4215908), corrupted or incoherent data given`」は「`Unable to update the user profile (ID: ****), corrupted or incoherent data given.`」として収集されます。