トレースのセキュリティに関する懸念事項と役立つヒント
このトピックでは、機密情報が公開されないように保護する方法と、WebHost を使用するときの便利なヒントについて説明します。
WebHost でのカスタム トレース リスナーの使用
独自のトレース リスナーを作成する場合は、Web ホスト型サービスの場合にトレースが失われる可能性があることに注意する必要があります。 WebHost がリサイクルされると、ライブプロセスがシャットダウンされ、その代わりにコピーが引き継ぎます。 ただし、2 つのプロセスは、リスナーの種類に依存する一定期間、同じリソースに引き続きアクセスできる必要があります。 この場合、XmlWriterTraceListener
は、2 番目のプロセスの新しいトレース ファイルを作成します。一方、Windows イベント トレースは同じセッション内の複数のプロセスを管理し、同じファイルへのアクセスを提供します。 独自のリスナーが同様の機能を提供しない場合、2 つのプロセスによってファイルがロックされるとトレースが失われる可能性があります。
また、カスタム トレース リスナーは、ネットワーク上のトレースとメッセージ (たとえば、リモート データベース) を送信できることにも注意してください。 アプリケーション 配置ツールとして、適切なアクセス制御を使用してカスタム リスナーを構成する必要があります。 また、リモートの場所で公開できる個人情報にもセキュリティ制御を適用する必要があります。
機密情報のログ記録
メッセージがスコープ内にある場合、トレースにはメッセージ ヘッダーが含まれます。 トレースが有効な場合、クエリ文字列などのアプリケーション固有のヘッダー内の個人情報。とクレジット カード番号などの本文情報がログに表示されます。 アプリケーション 配置者は、構成ファイルとトレース ファイルにアクセス制御を適用する役割を担います。 この種の情報を表示しない場合は、トレースを無効にするか、トレース ログを共有する場合はデータの一部を除外する必要があります。
次のヒントは、トレース ファイルの内容が意図せずに公開されないようにするのに役立ちます。
WebHost とセルフホストの両方のシナリオで、ログ ファイルがアクセス制御リスト (ACL) によって保護されていることを確認します。
Web 要求を使用して簡単に提供できないファイル拡張子を選択します。 たとえば、.xml ファイル拡張子は安全な選択ではありません。 IIS 管理ガイドを確認して、提供できる拡張機能の一覧を確認できます。
ログ ファイルの場所の絶対パスを指定します。これは、Web ブラウザーを使用して外部パーティからアクセスされないように、WebHost vroot パブリック ディレクトリの外部に配置する必要があります。
既定では、キーとユーザー名やパスワードなどの個人を特定できる情報 (PII) は、トレースとログに記録されたメッセージには記録されません。 ただし、コンピューター管理者は、Machine.config ファイルの machineSettings
要素の enableLoggingKnownPII
属性を使用して、コンピューター上で実行されているアプリケーションが既知の個人を特定できる情報 (PII) を次のようにログに記録することを許可できます。
<configuration>
<system.ServiceModel>
<machineSettings enableLoggingKnownPii="Boolean"/>
</system.ServiceModel>
</configuration>
その後、アプリケーション 配置者は、App.config または Web.config ファイルの logKnownPii
属性を使用して、PII ログを有効にすることができます。
<system.diagnostics>
<sources>
<source name="System.ServiceModel.MessageLogging"
logKnownPii="true">
<listeners>
<add name="messages"
type="System.Diagnostics.XmlWriterTraceListener"
initializeData="c:\logs\messages.svclog" />
</listeners>
</source>
</sources>
</system.diagnostics>
両方の設定が true
されている場合にのみ、PII ログが有効になります。 2 つのスイッチを組み合わせることで、各アプリケーションの既知の PII を柔軟にログに記録できます。
構成ファイルで 2 つ以上のカスタム ソースを指定した場合、最初のソースの属性のみが読み取られる点に注意してください。 その他は無視されます。 つまり、次の App.configでは、2 番目のソースに対して PII ログが明示的に有効になっている場合でも、両方のソースに対して PII がログに記録されません。
<system.diagnostics>
<sources>
<source name="System.ServiceModel.MessageLogging"
logKnownPii="false">
<listeners>
<add name="messages"
type="System.Diagnostics.XmlWriterTraceListener"
initializeData="c:\logs\messages.svclog" />
</listeners>
</source>
<source name="System.ServiceModel"
logKnownPii="true">
<listeners>
<add name="xml" />
</listeners>
</source>
</sources>
</system.diagnostics>
Machine.config ファイルの外部に <machineSettings enableLoggingKnownPii="Boolean"/>
要素が存在する場合、システムは ConfigurationErrorsExceptionをスローします。
変更は、アプリケーションの起動時または再起動時にのみ有効です。 両方の属性が true
に設定されている場合、イベントは起動時にログに記録されます。 logKnownPii
が true
に設定されているが、enableLoggingKnownPii
が false
場合、イベントもログに記録されます。
PII ログの詳細については、PII セキュリティ ロックダウン サンプル 参照してください。
この 2 つのスイッチを使用する場合は、マシン管理者とアプリケーション 配置者は細心の注意を払う必要があります。 PII ログが有効になっている場合、セキュリティ キーと PII がログに記録されます。 無効にした場合でも、機密性の高いアプリケーション固有のデータはメッセージ ヘッダーと本文に記録されます。 プライバシーに関する詳細な説明と PII の公開からの保護については、「ユーザー プライバシー 参照してください。
さらに、メッセージ送信者の IP アドレスは、接続指向トランスポートの接続ごとに 1 回、それ以外の場合はメッセージごとに 1 回ログに記録されます。 これは、送信者の同意なしに行われます。 ただし、このログ記録は、ライブ デバッグを除き、運用環境の既定または推奨されるトレース レベルではない情報または詳細トレース レベルでのみ発生します。