Anonimiseer gevoelige gegevens in een cloudgebaseerde toepassing

Voltooid

Redaction binnen toepassingen wordt meestal uitgevoerd voor logboekberichten en telemetrie. Het kan ook worden gebruikt in andere scenario's, zoals het redacteren van dimensies in metrische gegevens of headergegevens in middleware.

Het .NET-logboekregistratieframework biedt een eenvoudige manier om gegevens in logboekberichten te redacteren. Het Microsoft.Extensions.Compliance.Abstractions-pakket verbetert de logboekregistratie door een Redactor-klasse toe te voegen die gegevens anonimiseert.

Wat is redactie?

Redaction is het proces van het verwijderen van gevoelige informatie uit een bericht. U kunt bijvoorbeeld de naam van een gebruiker uit een logboekbericht redacteren. U kunt ook het IP-adres van een gebruiker redacteren vanuit een telemetriegebeurtenis.

De eenvoudigste bewerking is het wissen van de waarde en het retourneren van een lege tekenreeks voor een variabele. Dit gedrag treedt standaard op omdat de ErasingRedactor de standaard terugvalredacteur is. Microsoft bevat een HMACSHA256Redactor-klasse die kan worden gebruikt om gegevens te redacteren met behulp van een hash-functie. Het HMAC-redaction is handig als u gegevens wilt anonimiseren en toch logboekberichten kunt correleren over meerdere logboekregels. De laatste optie is om uw eigen redaction-functie te bieden, wat handig is als u gegevens wilt redacteren met behulp van een aangepast algoritme.

U wilt het bijvoorbeeld duidelijker maken in de logboeken dat een waarde wordt bewerkt door deze te vervangen door *****.

Gegevens redacteren in een cloudeigen toepassing

Uw cloudeigen app van uw organisatie kan logboeken schrijven en telemetrie maken in meerdere projecten. Het kan bijvoorbeeld gaan om het schrijven van logboeken van de databaseservice, de web-app of andere API's die worden gebruikt. Afhankelijk van het type logboekregistratie moet u de redaction-service aan elke service toevoegen.

Er zijn vier stappen die u moet uitvoeren om redaction in te schakelen in uw app:

  1. Voeg het Microsoft.Extensions.Compliance.Redaction NuGet-pakket toe aan elk project.
  2. Voeg de redaction-service toe aan de container voor afhankelijkheidsinjectie.
  3. Kies welke implementatie van redaction moet worden gebruikt voor elk type geclassificeerde gegevens.
  4. Schakel redactie in het loggingframework in.

De redaction-service toevoegen aan de container Afhankelijkheidsinjectie

Het volgende voorbeeld is voor een Blazor WebAssembly-app. Het proces is vergelijkbaar voor andere typen apps, maar de code verschilt enigszins, afhankelijk van hoe de container voor afhankelijkheidsinjectie is geconfigureerd.

Voeg in het bestand program.cs de volgende afhankelijkheden toe:

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

Met de bovenstaande pakketten kunt u vervolgens de redaction-service toevoegen aan de container voor afhankelijkheidsinjectie met deze code:

builder.Services.AddRedaction();

Kiezen welke implementatie van redaction moet worden gebruikt voor elk type geclassificeerde gegevens

De methode AddRedactor kan een RedactorOptions parameter bevatten. Met de parameter kunt u opgeven welke implementatie van redaction moet worden gebruikt voor elke gegevenstaxonomie.

De volgende code geeft bijvoorbeeld aan dat de HMACSHA256Redactor moet worden gebruikt voor EUII gegevens.

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

Notitie

Het HMAC redactor-algoritme is experimenteel, dus u moet de waarschuwing voor de compiler uitschakelen als u deze gebruikt. Om de bovenstaande code heen met #pragma warning disable EXTEXP0002 en #pragma warning restore EXTEXP0002 kunt u uw project compileren.

U kunt meerdere implementaties voor redaction toevoegen aan de parameter RedactorOptions. Met de volgende code wordt bijvoorbeeld een aangepaste redactor toegevoegd voor EUPI gegevens.

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

Redactie inschakelen in het logging-framework

De volgende stap is het inschakelen van anonimisering in het logboekframework. Dit wordt gedaan door de eigenschap .EnableRedaction in te stellen op de logboekregistratiegenerator van uw toepassingen. Voor de voorbeeld-app is de code:

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

Met de bovenstaande code kunt u een nieuwe logger maken die gebruikmaakt van de redactiedienst. Implementeer een nieuwe LogOrders logger waar u ordergegevens naar de logboeken wilt schrijven.

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

Een aangepaste implementatie voor redaction maken

Met Microsoft kunt u een aangepaste implementatie voor redaction maken. U gebruikt een aangepaste redaction wanneer u gegevens wilt redacteren met behulp van uw eigen algoritme. We gaan een aangepaste redactor implementeren die gevoelige gegevens vervangt door *****.

Aangepaste redacteurs moeten de Redactor-klasse implementeren. De klasse heeft twee methoden nodig die moeten worden geïmplementeerd.

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

In ons voorbeeld eShopLite architectuur kunt u deze klasse toevoegen aan het DataEntities-project, in Compliance.cs onder de code voor gegevensclassificatie.