Gevoelige gegevens redact in een cloudeigen 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 met een Redactor klasse die gegevens redt.

Wat is redaction?

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 gebeurt standaard omdat de ErasingRedactor standaard terugval redactor is. Microsoft bevat een HMACSHA256Redactor klasse die kan worden gebruikt om gegevens te redacteren met behulp van een hash-functie. De HMAC-redaction is handig als u gegevens wilt redacteren, maar nog steeds logboekberichten in meerdere logboekinstructies kunt correleren. 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 redacted 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 redaction in het framework voor logboekregistratie 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 AddRedactor methode kan een RedactorOptions parameter bevatten. Met de parameter kunt u opgeven welke implementatie van redaction moet worden gebruikt voor elke gegevenstaxonomie.

Met de volgende code wordt bijvoorbeeld aangegeven dat de HMACSHA256Redactor code 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 RedactorOptions parameter. Met de volgende code wordt bijvoorbeeld een aangepaste redactor voor EUPI gegevens toegevoegd.

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

Redaction inschakelen in het framework voor logboekregistratie

De volgende stap is het inschakelen van redaction in het framework voor logboekregistratie. Dit wordt gedaan door de eigenschap in te stellen op de .EnableRedaction 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 redaction-service. 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. Laten we een aangepaste redactor implementeren die gevoelige gegevens vervangt door *****.

Aangepaste redactors moeten de Redactor klasse implementeren. De klasse heeft twee methoden nodig die zijn 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 onze voorbeeldarchitectuur eShopLite kunt u deze klasse toevoegen aan het project DataEntities , in Compliance.cs onder de code voor gegevensclassificatie.