在雲端原生應用程式中修訂敏感數據

已完成

應用程式內的修訂最常在記錄訊息和遙測上完成。 它也可用於其他案例,例如計量中的修訂維度,或中間件中的標頭數據。

.NET 記錄架構提供簡單的方法來修訂記錄訊息中的數據。 封裝 Microsoft.Extensions.Compliance.Abstractions 會增強記錄功能,以包含 Redactor 會修訂數據的類別。

什麼是修訂?

修訂是從訊息中移除敏感性信息的程式。 例如,您可能想要從記錄訊息中修訂用戶的名稱。 或者,您可能想要從遙測事件中修訂使用者的IP位址。

最簡單的修訂是清除值,並傳回變數的空字串。 此行為預設會發生,因為 ErasingRedactor 是預設後援重設函式。 Microsoft 包含類別 HMACSHA256Redactor ,可用來使用哈希函式來修訂數據。 如果您想要修訂數據,HMAC 修訂會很有用,但仍能夠在多個記錄語句之間相互關聯記錄訊息。 最後一個選項是提供您自己的修訂函式,如果您想要使用自定義演算法來修改數據,這會很有用。

例如,您想要在記錄中更清楚,將值取代 *****為 來加以修訂。

如何在雲端原生應用程式中修訂數據

您的組織雲端原生應用程式可能會撰寫記錄,並在多個專案中建立遙測。 例如,它可以從資料庫服務、Web 應用程式或任何其他 API 寫入記錄。 視記錄類型而定,您必須將修訂服務新增至每個記錄服務。

在應用程式中啟用修訂需要採取四個步驟:

  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 。 類別需要實作兩種方法:

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架構中,您可以在 DataEntities 專案的數據分類程式代碼下方的 Compliance.cs新增此類別