クラウドネイティブ アプリケーションで機密データを削除する

完了

アプリケーション内のやり直しは、ログ メッセージとテレメトリで最も一般的に行われます。 メトリックのディメンションの編集やミドルウェアのヘッダー データなど、他のシナリオでも使用できます。

.NET ログ フレームワークは、ログ メッセージ内のデータを編集する簡単な方法を提供します。 Microsoft.Extensions.Compliance.Abstractions パッケージは、データを編集するRedactor クラスを含むようにログ記録を強化します。

編集とは

やり直しは、メッセージから機密情報を削除するプロセスです。 たとえば、ログメッセージからユーザーの名前を隠す必要があるかもしれません。 または、テレメトリ イベントからユーザーの IP アドレスを編集することもできます。

最も簡単なやり直しは、値を消去し、変数の空の文字列を返す方法です。 この動作は、 ErasingRedactor が既定のフォールバック 再実行機能であるため、既定で発生します。 Microsoft には、ハッシュ関数を使用してデータを編集するために使用できる HMACSHA256Redactor クラスが含まれています。 HMAC の編集は、データを編集するが、複数のログ ステートメント間でログ メッセージを関連付けることができる場合に便利です。 最後のオプションは、独自の編集関数を提供することです。これは、カスタム アルゴリズムを使用してデータを編集する場合に便利です。

たとえば、値を ***** に置き換えることで、値が編集されることをログで明確にしたいとします。

クラウドネイティブ アプリケーションでデータを編集する方法

組織のクラウドネイティブ アプリでは、ログを書き込み、複数のプロジェクトでテレメトリを作成している可能性があります。 たとえば、データベース サービス、Web アプリ、またはその他の API からログを書き込む場合があります。 ログの種類に応じて、各ログに編集サービスを追加する必要があります。

アプリで編集または削除を有効にするには、次の 4 つの手順を実行する必要があります。

  1. Microsoft.Extensions.Compliance.Redaction NuGet パッケージを各プロジェクトに追加します。
  2. 編集サービスを依存性注入コンテナに追加します。
  3. 分類されたデータの種類ごとに使用する編集実装を選択します。
  4. ログ 記録フレームワークで編集を有効にします。

依存関係挿入コンテナーに編集サービスを追加する

Blazor WebAssembly アプリの例を次に示します。 プロセスは他の種類のアプリでも似ていますが、依存関係挿入コンテナーの構成方法によってコードが若干異なります。

program.cs ファイルに、次の依存関係を追加します。

using Microsoft.Extensions.Compliance.Classification;
using Microsoft.Extensions.Compliance.Redaction;

上記のパッケージを使用すると、次のコードを使用して依存性注入コンテナーにリダクションサービスを追加できます。

builder.Services.AddRedaction();

分類されたデータの種類ごとに使用する編集の実装を選択する

AddRedactor メソッドには、RedactorOptions パラメーターを含めることができます。 このパラメーターを使用すると、各データ分類に使用する編集実装を指定できます。

たとえば、次のコードは、HMACSHA256Redactor データにEUIIを使用することを指定します。

builder.Services.AddRedaction(configure =>
{
    // Configure to use the HMAC redactor
    configure.SetHmacRedactor(configureHmac =>
    {
        // This key should be fetched from keyvault or some other secure store.
        configureHmac.Key = "thisisadummykeythatshouldbereplacedwithakeyfromakeystore";
        // Some discriminator to differentiate between different deployments of a service.
        configureHmac.KeyId = 1;

    }, new DataClassificationSet(DataClassifications.EUIIDataClassification));
});

HMAC リダクター アルゴリズムは試験段階であるため、使用する場合はコンパイラの警告を無効にする必要があります。 上記のコードを #pragma warning disable EXTEXP0002#pragma warning restore EXTEXP0002 で囲んで、プロジェクトをコンパイルできます。

RedactorOptions パラメーターには、複数の編集実装を追加できます。 たとえば、次のコードでは、 EUPI データのカスタム リダクターを追加します。

builder.Services.AddRedaction(configure =>
{
    // Configure to use the HMAC redactor for EUII data
    configure.SetHmacRedactor(configureHmac =>
    {
        // This key should be fetched from keyvault or some other secure store.
        configureHmac.Key = "thisisadummykeythatshouldbereplacedwithakeyfromakeystore";
        // Some discriminator to differentiate between different deployments of a service.
        configureHmac.KeyId = 1;

    }, new DataClassificationSet(DataClassifications.EUIIDataClassification));

    // Configure a custom redactor for EUPI data
    configure.SetRedactor<EShopCustomRedactor>(new DataClassificationSet(DataClassifications.EUPIDataClassification));
});

ログ 記録フレームワークで編集を有効にする

次のステップは、ログ記録フレームワークで秘匿化を有効にすることです。 これを行うには、 .EnableRedaction プロパティをアプリケーション ログ ジェネレーターに設定します。 サンプル アプリのコードは次のとおりです。

builder.Services.AddLogging(logging => 
{
    logging.EnableRedaction();
    logging.AddJsonConsole(); //Enable structure logs on the console to view the redacted data.
});

上記のコードを配置すると、編集サービスを使用する新しいロガーを作成できます。 注文情報をログに書き込む場所に、新しい LogOrders ロガーを実装します。

public static partial class Log
{
    [LoggerMessage(1, LogLevel.Information, "Write the Order data formatted as JSON: {order}")]
    public static partial void LogOrders(this ILogger logger, [LogProperties] Order order);
}

カスタムの編集実装を作成する

Microsoft では、カスタムの編集実装を作成できます。 独自のアルゴリズムを使用してデータを編集する場合は、カスタムの編集を使用します。 機密データを *****に置き換えるカスタム リダクターを実装しましょう。

カスタム 編集機能は、 Redactor クラスを実装する必要があります。 このクラスには、次の 2 つのメソッドが実装されている必要があります。

public class EShopCustomRedactor : Redactor
{
    private const string Stars = "*****";

    public override int GetRedactedLength(ReadOnlySpan<char> input) => Stars.Length;

    public override int Redact(ReadOnlySpan<char> source, Span<char> destination)
    {
        Stars.CopyTo(destination);
        return Stars.Length;
    }
}

このeShopLiteアーキテクチャの例では、データ分類コードの下のCompliance.csで、このクラスを DataEntities プロジェクトに追加できます。