次の方法で共有


個人識別情報(PII)セキュリティ ロックダウン

SecurityLockdown サンプルでは、Windows Communication Foundation (WCF) サービスのいくつかのセキュリティ関連機能を次のように制御する方法を示します。

  • サービスの構成ファイル内の機密情報を暗号化する。

  • 入れ子になったサービス サブディレクトリが設定をオーバーライドできないように、構成ファイル内の要素をロックする。

  • トレース ログとメッセージ ログでの個人を特定できる情報 (PII) のログ記録の制御。

議論

これらの各機能は、個別に、またはまとめて使用して、サービスのセキュリティの側面を制御できます。 これは、WCF サービスをセキュリティで保護するための明確なガイドではありません。

.NET Framework 構成ファイルには、データベースに接続するための接続文字列などの機密情報を含めることができます。 Web ホスト型の共有シナリオでは、構成ファイルに含まれるデータがカジュアル表示に対して耐性を持つよう、サービスの構成ファイルでこの情報を暗号化することが望ましい場合があります。 .NET Framework 2.0 以降では、Windows Data Protection アプリケーション プログラミング インターフェイス (DPAPI) または RSA 暗号化プロバイダーを使用して、構成ファイルの一部を暗号化できます。 DPAPI または RSA を使用する aspnet_regiis.exe は、構成ファイルの一部を暗号化できます。

Web でホストされるシナリオでは、他のサービスのサブディレクトリにサービスを配置できます。 構成値を決定するための既定のセマンティックでは、入れ子になったディレクトリ内の構成ファイルが親ディレクトリの構成値をオーバーライドできます。 状況によっては、さまざまな理由で望ましくない場合があります。 WCF サービス構成では、構成値のロックがサポートされているため、入れ子になった構成では、オーバーライドされた構成値を使用して入れ子になったサービスが実行されるときに例外が生成されます。

このサンプルでは、ユーザー名やパスワードなど、トレース ログとメッセージ ログ内の既知の個人を特定できる情報 (PII) のログ記録を制御する方法を示します。 既定では、既知の PII のログ記録は無効になっていますが、特定の状況では、アプリケーションのデバッグで PII のログ記録が重要になる場合があります。 このサンプルは、入門に基づいています。 さらに、このサンプルではトレースとメッセージ ログを使用します。 詳細については、 トレースとメッセージ ログ のサンプルを参照してください。

構成ファイル要素の暗号化

共有 Web ホスティング環境のセキュリティ上の理由から、機密情報を含む可能性があるデータベース接続文字列など、特定の構成要素を暗号化することが望ましい場合があります。 構成要素は、.NET Framework フォルダーにある aspnet_regiis.exe ツールを使用して暗号化できます。たとえば、\Microsoft.NET\Framework\v4.0.20728 %WINDIR%。

サンプルの Web.config の appSettings セクションの値を暗号化するには

  1. Start->Run... を使用してコマンド プロンプトを開きます。 cmdを入力し、[OK] をクリックします。

  2. 次のコマンドを発行して、現在の .NET Framework ディレクトリに移動します: cd %WINDIR%\Microsoft.NET\Framework\v4.0.20728

  3. aspnet_regiis -pe "appSettings" -app "/servicemodelsamples" -prov "DataProtectionConfigurationProvider" コマンドを発行して、Web.config フォルダー内の appSettings 構成設定を暗号化します。

構成ファイルのセクションの暗号化の詳細については、ASP.NET 構成の DPAPI の使い方 (セキュリティで保護された ASP.NET アプリケーションの構築: 認証、承認、およびセキュリティで保護された通信) と、ASP.NET 構成の RSA の使い方 (「方法: RSA を使用して ASP.NET 2.0 の構成セクションを暗号化する」) を参照してください。

構成ファイル要素のロック

Web でホストされるシナリオでは、サービスのサブディレクトリにサービスを配置できます。 このような状況では、サブディレクトリ内のサービスの構成値は、Machine.config の値を調べて、親ディレクトリ内の Web.config ファイルと連続してマージして、ディレクトリ ツリーを下に移動し、最後にサービスを含むディレクトリ内の Web.config ファイルをマージすることによって計算されます。 ほとんどの構成要素の既定の動作は、サブディレクトリ内の構成ファイルが親ディレクトリに設定されている値をオーバーライドできるようにすることです。 特定の状況では、サブディレクトリ内の構成ファイルが親ディレクトリ構成で設定された値をオーバーライドしないようにすることが望ましい場合があります。

.NET Framework では、構成ファイルの要素をロックすることで、それらのロックされた要素をオーバーライドしようとする構成が実行時例外をスローするようになっています。

構成要素は、構成ファイル内のノードの lockItem 属性を指定することによってロックできます。たとえば、入れ子になった構成ファイル内の電卓サービスが動作を変更できないように、構成ファイル内の CalculatorServiceBehavior ノードをロックするには、次の構成を使用できます。

<configuration>
   <system.serviceModel>
      <behaviors>
          <serviceBehaviors>
             <behavior name="CalculatorServiceBehavior" lockItem="true">
               <serviceMetadata httpGetEnabled="True"/>
               <serviceDebug includeExceptionDetailInFaults="False" />
             </behavior>
          </serviceBehaviors>
       </behaviors>
    </system.serviceModel>
</configuration>

構成要素のロックは、より具体的な場合があります。 要素のリストは、サブ要素のコレクション内の要素のセットをロックする lockElements の値として指定できます。 属性のリストは、要素内の属性のセットをロックするために、 lockAttributes の値として指定できます。 ノードの lockAllElementsExcept 属性または lockAllAttributesExcept 属性を指定することで、指定したリストを除き、要素または属性のコレクション全体をロックできます。

PII ログの構成

PII のログ記録は、コンピューター管理者が PII のログ記録を許可または拒否できるようにする Machine.config コンピューター全体の設定と、アプリケーション管理者が Web.config または App.config ファイル内の各ソースの PII のログ記録を切り替えるアプリケーション設定の 2 つのスイッチによって制御されます。

コンピューター全体の設定は、Machine.configの enableLoggingKnownPii 要素で truefalse または machineSettings に設定することによって制御されます。たとえば、次の例では、アプリケーションで PII のログ記録を有効にすることができます。

<configuration>
    <system.serviceModel>
        <machineSettings enableLoggingKnownPii="true" />
    </system.serviceModel>
</configuration>

Machine.config ファイルの既定の場所は、%WINDIR%\Microsoft.NET\Framework\v2.0.50727\CONFIG です。

enableLoggingKnownPii属性が Machine.configに存在しない場合、PII のログ記録は許可されません。

アプリケーションの PII のログ記録を有効にするには、ソース要素の logKnownPii 属性を Web.config または App.config ファイルで true または false に設定します。 たとえば、次の例では、メッセージ ログとトレース ログの両方に対して PII のログ記録を有効にします。

<configuration>
    <system.diagnostics>
        <sources>
            <source name="System.ServiceModel.MessageLogging" logKnownPii="true">
                <listeners>
                ...
                </listeners>
            </source>
            <source name="System.ServiceModel" switchValue="Verbose, ActivityTracing">
            <listeners>
        ...
            </listeners>
            </source>
        </sources>
    </system.diagnostics>
</configuration>

logKnownPii属性が指定されていない場合、PII はログに記録されません。

PII は、両方の enableLoggingKnownPiitrue に設定され、 logKnownPiitrue に設定されている場合にのみログに記録されます。

System.Diagnostics では、構成ファイルにリストされている最初の属性を除くすべてのソースのすべての属性が無視されます。 logKnownPii属性を構成ファイルの 2 番目のソースに追加しても効果はありません。

Von Bedeutung

このサンプルを実行するには、Machine.configを手動で変更する必要があります。Machine.config を正しくない値または構文で変更すると、すべての .NET Framework アプリケーションが実行できなくなる可能性があるため、注意が必要です。

DPAPI と RSA を使用して構成ファイル要素を暗号化することもできます。 詳細については、次のリンクを参照してください。

サンプルを設定、ビルド、実行するには

  1. Windows Communication Foundation サンプル One-Time セットアップ手順を実行していることを確認します。

  2. Machine.config を編集して、 enableLoggingKnownPii 属性を trueに設定し、必要に応じて親ノードを追加します。

  3. ソリューションの C# または Visual Basic .NET エディションをビルドするには、「Windows Communication Foundation サンプルのビルド」の手順に従います。

  4. シングル コンピューター構成またはクロスコンピューター構成でサンプルを実行するには、「 Windows Communication Foundation サンプルの実行」の手順に従います。

サンプルをクリーンアップするには

  1. Machine.config を編集して、 enableLoggingKnownPii 属性を falseに設定します。

こちらも参照ください