Redigera känsliga data i ett molnbaserat program
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:
Microsoft.Extensions.Compliance.Redaction
Lägg till NuGet-paketet i varje projekt.- Lägg till redigeringstjänsten i containern för beroendeinmatning.
- Välj vilken redigeringsimplementering som ska användas för varje typ av klassificerade data.
- 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.