Redigera känsliga data i ett molnbaserat program

Slutförd

Redigering i program görs oftast på loggmeddelanden och telemetri. Den kan också användas i andra scenarier som att redigera dimensioner i Mått eller sidhuvuddata i mellanprogram.

.NET-loggningsramverket är ett enkelt sätt att redigera data i loggmeddelanden. Paketet Microsoft.Extensions.Compliance.Abstractions förbättrar loggningen så att den innehåller en Redactor klass som redigerar data.

Vad är redigering?

Redigering är processen för att ta bort känslig information från ett meddelande. Du kanske till exempel vill redigera en användares namn från ett loggmeddelande. Eller så kanske du vill redigera en användares IP-adress från en telemetrihändelse.

Den enklaste redigeringen är att radera värdet och returnera en tom sträng för en variabel. Det här beteendet inträffar som standard eftersom ErasingRedactor standardredigeringsverktyget för återställning är standard. Microsoft innehåller en HMACSHA256Redactor klass som kan användas för att redigera data med hjälp av en hash-funktion. HMAC-redigeringen är användbar om du vill redigera data, men ändå kan korrelera loggmeddelanden i flera logginstruktioner. Det sista alternativet är att ange en egen redigeringsfunktion, vilket är användbart om du vill redigera data med hjälp av en anpassad algoritm.

Du vill till exempel göra det tydligare i loggarna att ett värde redigeras genom att ersätta det med *****.

Redigera data i ett molnbaserat program

Din molnbaserade app för organisationer kan skriva loggar och skapa telemetri i flera projekt. Det kan till exempel vara att skriva loggar från databastjänsten, webbappen eller andra API:er som används. Beroende på typen av loggning måste du lägga till redigeringstjänsten till var och en.

Det finns fyra steg som du måste vidta för att aktivera redigering i din app:

  1. Microsoft.Extensions.Compliance.Redaction Lägg till NuGet-paketet i varje projekt.
  2. Lägg till redigeringstjänsten i containern för beroendeinmatning.
  3. Välj vilken redigeringsimplementering som ska användas för varje typ av klassificerade data.
  4. Aktivera redigering i loggningsramverket.

Lägg till redigeringstjänsten i containern Dependency Injection

Följande exempel är för en Blazor WebAssembly-app. Processen liknar andra typer av appar, men koden skiljer sig något beroende på hur containern för beroendeinmatning konfigureras.

Lägg till följande beroenden i filen program.cs:

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

Med ovanstående paket kan du sedan lägga till redigeringstjänsten i containern för beroendeinmatning med den här koden:

builder.Services.AddRedaction();

Välj vilken redigeringsimplementering som ska användas för varje typ av klassificerade data

Metoden AddRedactor kan innehålla en RedactorOptions parameter. Med parametern kan du ange vilken redigeringsimplementering som ska användas för varje datataxonomi.

Följande kod anger till exempel att HMACSHA256Redactor ska användas för EUII data.

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));
});

Kommentar

HMAC-redigeringsalgoritmen är experimentell, så du måste inaktivera kompilatorvarningen om du använder den. Om du omger koden ovan med #pragma warning disable EXTEXP0002 och #pragma warning restore EXTEXP0002 kan du kompilera projektet.

Du kan lägga till flera redigeringsimplementeringar i parametern RedactorOptions . Följande kod lägger till exempel till en anpassad redigeringspunkt för EUPI data.

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));
});

Aktivera redigering i loggningsramverket

Nästa steg är att aktivera redigering i loggningsramverket. Detta görs genom att ställa in .EnableRedaction egenskapen på loggningsgeneratorn för dina program. För exempelappen är koden:

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

Med koden ovan på plats kan du skapa en ny loggare som använder redigeringstjänsten. Implementera en ny LogOrders loggare oavsett var du vill skriva orderinformation till loggarna.

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);
}

Skapa en anpassad redigeringsimplementering

Med Microsoft kan du skapa en anpassad redigeringsimplementering. Du använder en anpassad redigering när du vill redigera data med din egen algoritm. Nu ska vi implementera en anpassad redigeringsvektor som ersätter känsliga data med *****.

Anpassade redigeringsfunktioner måste implementera Redactor klassen. Klassen behöver två implementerade metoder:

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;
    }
}

I vår exempelarkitektur eShopLite kan du lägga till den här klassen i Projektet DataEntiteter i Compliance.cs under dataklassificeringskoden.