Redact følsomme data i et cloudbaseret program

Fuldført

Redigering i programmer udføres oftest på logmeddelelser og telemetri. Den kan også bruges i andre scenarier, f.eks. ved at redigere dimensioner i metrikværdier eller headerdata i middleware.

.NET-logføringsstrukturen gør det nemt at redigere data i logmeddelelser. Pakken Microsoft.Extensions.Compliance.Abstractions forbedrer logføringen, så den omfatter en Redactor klasse, der redigerer data.

Hvad er redaction?

Redaction er processen med at fjerne følsomme oplysninger fra en meddelelse. Det kan f.eks. være, at du vil redigere en brugers navn fra en logmeddelelse. Du kan også redigere en brugers IP-adresse fra en telemetrihændelse.

Den mest enkle redigering er at slette værdien og returnere en tom streng for en variabel. Denne funktionsmåde sker som standard, fordi ErasingRedactor er standardredaktor for fallback. Microsoft indeholder en HMACSHA256Redactor klasse, der kan bruges til at redigere data ved hjælp af en hashfunktion. HMAC-redigeringen er nyttig, hvis du vil redigere data, men stadig kan korrelere logmeddelelser på tværs af flere logsætninger. Den sidste mulighed er at angive din egen redigeringsfunktion, hvilket er nyttigt, hvis du vil redigere data ved hjælp af en brugerdefineret algoritme.

Du vil f.eks. gøre det tydeligere i loggene, at en værdi redigeres, ved at erstatte den med *****.

Sådan redigerer du data i et oprindeligt cloudprogram

Din organisations cloudbaserede app kan skrive logge og oprette telemetri i flere projekter. Det kan f.eks. være at skrive logge fra databasetjenesten, webappen eller andre API'er, den bruger. Afhængigt af logføringstypen skal du føje redigeringstjenesten til hver enkelt.

Der er fire trin, du skal udføre for at aktivere redigering i din app:

  1. Føj Microsoft.Extensions.Compliance.Redaction NuGet-pakken til hvert projekt.
  2. Føj redigeringstjenesten til objektbeholderen til afhængighedsinjektion.
  3. Vælg, hvilken genhandlingsimplementering der skal bruges til hver type klassificerede data.
  4. Aktivér redigering i logføringsstrukturen.

Føj redigeringstjenesten til objektbeholderen Afhængighedsinjektion

Følgende eksempel er for en Blazor WebAssembly-app. Processen er den samme for andre typer apps, men koden er lidt anderledes, afhængigt af hvordan afhængighedsinjektionsbeholderen er konfigureret.

Tilføj følgende afhængigheder i den program.cs fil:

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

Ovenstående pakker giver dig mulighed for derefter at føje redigeringstjenesten til objektbeholderen til afhængighedsinjektion med denne kode:

builder.Services.AddRedaction();

Vælg, hvilken genhandlingsimplementering der skal bruges til hver type klassificerede data

Metoden AddRedactor kan indeholde en RedactorOptions parameter. Parameteren giver dig mulighed for at angive, hvilken genhandlingsimplementering der skal bruges til hver data taksonomi.

Følgende kode angiver f.eks., at HMACSHA256Redactor skal bruges til 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));
});

Seddel

HMAC-redactoralgoritmen er eksperimentel, så du skal deaktivere kompileringsadvarslen, hvis du bruger den. Hvis du omgiver ovenstående kode med #pragma warning disable EXTEXP0002 og #pragma warning restore EXTEXP0002, kan du kompilere projektet.

Du kan føje flere implementeringer af redigering til parameteren RedactorOptions. Følgende kode tilføjer f.eks. en brugerdefineret opdatering for 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));
});

Aktivér redigering i logføringsstrukturen

Det næste trin er at aktivere redigering i logføringsstrukturen. Dette gøres ved at angive egenskaben .EnableRedaction til din programlogføringsgenerator. I eksempelappen er koden:

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

Når ovenstående kode er på plads, kan du oprette en ny logføring, der bruger redigeringstjenesten. Implementer en ny LogOrders logføring, uanset hvor du vil skrive ordreoplysninger til loggene.

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

Opret en brugerdefineret implementering af redigering

Microsoft giver dig mulighed for at oprette en brugerdefineret implementering af redigering. Du skal bruge en brugerdefineret redigering, når du vil redigere data ved hjælp af din egen algoritme. Lad os implementere en brugerdefineret redactor, der erstatter følsomme data med *****.

Brugerdefinerede redactors skal implementere klassen Redactor. Klassen skal have implementeret to 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 vores eksempel eShopLite arkitektur kan du føje denne klasse til projektet DataEntities i Compliance.cs under dataklassificeringskoden.