Übung – Unkenntlichmachen vertraulicher Daten in cloudnativen Anwendungen

Abgeschlossen

Sie müssen dem Bestellvorgang eine Protokollierung hinzufügen. Sie verwenden die Unkenntlichmachungsfunktionen von .NET, um sicherzustellen, dass die sensiblen Daten nicht in die Protokolle durchsickern.

In dieser Übung führen Sie die folgenden Schritte aus:

  • Fügen Sie jedem Projekt das NuGet-Paket Microsoft.Extensions.Compliance.Redaction hinzu.
  • Fügen Sie den Dienst für die Unkenntlichmachung dem Abhängigkeitsinjektionscontainer hinzu.
  • Aktivieren Sie die Unkenntlichmachung im Protokollierungsframework.
  • Rufen Sie das Protokollierungsframework während des Bestellvorgangs auf.
  • Fügen Sie eine benutzerdefinierte Unkenntlichmachungsimplementierung für EUII-Daten hinzu.
  • Wählen Sie die gewünschte Unkenntlichmachungsimplementierung für die einzelnen Arten von klassifizierten Daten aus.

Hinzufügen des Diensts zur Unkenntlichmachung

Sie sollten den Codespace oder das Visual Studio Code-Fenster weiterhin geöffnet haben. Wenn nicht, öffnen Sie es jetzt.

  1. Geben Sie im Fenster TERMINAL den folgenden Befehl ein:

    cd /workspaces/mslearn-dotnet-cloudnative/dotnet-compliance/eShopLite/Store/
    
  2. Fügen Sie dem Projekt das Microsoft.Extensions.Compliance.Redaction NuGet-Paket hinzu:

    dotnet add package Microsoft.Extensions.Compliance.Redaction
    
  3. Erweitern Sie im EXPLORER-Bereich den Ordner dotnet-compliance/eShopLite/Store, und wählen Sie dann die Datei Program.cs aus.

  4. Fügen Sie im Editor die folgenden Abhängigkeiten hinzu:

    using Microsoft.Extensions.Compliance.Classification;
    using Microsoft.Extensions.Compliance.Redaction;
    
  5. Scrollen Sie nach unten zu Linie 19, fügen Sie unter dem Kommentar Add redaction den Unkenntlichmachungsdienst zum Container zum Einfügen von Abhängigkeiten hinzu:

    builder.Services.AddRedaction();
    

Aktivieren von Unkenntlichmachung im Protokollierungsframework

  1. Fügen Sie im Editor diesen Code unter der Linie AddRedaction() hinzu:

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

    Der obige Code ermöglicht die Unkenntlichmachung im Protokollierungsframework.

Rufen Sie das Protokollierungsframework während des Bestellvorgangs auf

  1. Erweitern Sie im EXPLORER-Bereich den Ordner dotnet-compliance/eShopLite/Store/Services, und wählen Sie dann die Datei ProductService.cs aus.

  2. Fügen Sie im Editor unten in der Datei den folgenden Code hinzu:

    public static partial class Log
    {
        [LoggerMessage(1, LogLevel.Information, "Placed Order: {order}")]
        public static partial void LogOrders(this ILogger logger, [LogProperties] Order order);
    }
    
  3. Rufen Sie im Editor in der Aufgabe CreateOrder die Methode LogOrders auf:

    public async Task<bool> CreateOrder(Order order)
    {
        try
        {
            _logger.LogOrders(order);
    

    Der obige Code ruft die Methode LogOrders auf und übergibt sie an die aktuellen Bestellinformationen.

Testen der neuen Unkenntlichmachungsprotokollierung

Mit dem obigen Code kann die App die standardmäßige Unkenntlichmachungsimplementierung verwenden, um die Order-Informationen unkenntlich zu machen. Jetzt testen Sie dies.

  1. Wechseln Sie unten im Bereich TERMINAL zum Ordner dotnet-compliance/eShopLite.

    cd ..
    
  2. Aktualisieren Sie die App-Container.

    dotnet publish /p:PublishProfile=DefaultContainer 
    
  3. Wechseln Sie zum dotnet-Compliance-Ordner, und starten Sie die App mit Docker:

    cd ..
    docker compose up
    
  4. Wählen Sie die Registerkarte PORTS und anschließend das Globussymbol Im Browser öffnen für den Port Front-End (32000) aus.

  5. Wählen Sie den Link für Produkte aus. Fügen Sie Ihrem Warenkorb einige Produkte hinzu.

  6. Wählen Sie die Schaltfläche Warenkorb kaufen aus.

  7. Drücken Sie im TERMINAL--Fenster auf STRG+F, geben Sie im Suchfeld "EventId":1, ein.

    frontend-1  | {"EventId":1,"LogLevel":"Information","Category":"Store.Services.ProductService","Message":"Placed Order: DataEntities.Order","State":{"Message":"Microsoft.Extensions.Logging.ExtendedLogger\u002BModernTagJoiner","{OriginalFormat}":"Placed Order: {order}","order.Total":209.94,"order.Products":"[\u0022DataEntities.Product\u0022,\u0022DataEntities.Product\u0022,\u0022DataEntities.Product\u0022,\u0022DataEntities.Product\u0022,\u0022DataEntities.Product\u0022,\u0022DataEntities.Product\u0022]","order":"DataEntities.Order","order.CustomerAddress":"","order.CustomerName":"","order.Id":""}}
    

    Dieser JSON-formatierte Protokolleintrag sollte angezeigt werden. Beachten Sie, dass der Wert order.Total immer noch im Protokoll ist, aber die Werte CustomerName und CustomerAddress jetzt leere Zeichenfolgen sind.

    Wenn Sie keine Unkenntlichmachungsimplementierung angeben, verwendet das Unkenntlichmachungsmodul die ErasingRedactor-Implementierung, um sicherzustellen, dass keine vertraulichen Daten in die Protokolle gelangt sind.

  8. Drücken Sie im Fenster TERMINAL die Tastenkombination STRG+C, um die App zu beenden.

Hinzufügen einer benutzerdefinierten Unkenntlichmachungsimplementierung

Sie werden jetzt die Unkenntlichmachungsimplementierung verbessern, um unterschiedliche Unkenntlichmachnungs-Algorithmen für verschiedene Datentypen zu verwenden. Zuerst fügen Sie eine neue benutzerdefinierte Unkenntlichmachungsimplementierung hinzu, die den Wert durch ***** ersetzt.

  1. Erweitern Sie im Bereich EXPLORER den Ordner dotnet-compliance/eShopLite/DataEntities und wählen Sie dann die Datei Compliance.cs aus.

  2. Fügen Sie im Editor unten in der Datei den folgenden Code hinzu:

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

    Der obige Code stellt eine EShopCustomRedactor-Unkenntlichmachungsmethode für das Unkenntlichmachungsmodul zur Verfügung.

Auswählen der zu verwendenden Unkenntlichmachungsimplementierung

  1. Erweitern Sie im EXPLORER-Bereich den Ordner dotnet-compliance/eShopLite/Store, und wählen Sie dann die Datei Program.cs aus.

  2. Ersetzen Sie den builder.Services.AddRedaction();-Code, um die Konfiguration für das Unkenntlichmachungsmodul bereitzustellen:

    builder.Services.AddRedaction(configure =>
    {
        configure.SetRedactor<ErasingRedactor>(new DataClassificationSet(DataClassifications.EUPDataClassification));
        configure.SetRedactor<EShopCustomRedactor>(new DataClassificationSet(DataClassifications.EUIIDataClassification));
    });
    

    Mit dem obigen Code wird das Unkenntlichmachungsmodul so konfiguriert, dass speziell die ErasingRedactor-Implementierung für EUP-Daten und die neue benutzerdefinierte EShopCustomRedactor-Implementierung für EUII-Daten verwendet wird.

Testen der neuen Unkenntlichmachungsimplementierung

  1. Erstellen Sie die App im TERMINAL-Fenster und führen Sie sie aus:

    docker-compose up --build
    
  2. Wählen Sie die Registerkarte PORTS und anschließend das Globussymbol Im Browser öffnen für den Port Front-End (32000) aus.

  3. Wählen Sie den Link für Produkte aus. Fügen Sie Ihrem Warenkorb einige Produkte hinzu.

  4. Wählen Sie die Schaltfläche Warenkorb kaufen aus.

  5. Drücken Sie im TERMINAL--Fenster auf STRG+F, geben Sie im Suchfeld "EventId":1, ein.

    frontend-1  | {"EventId":1,"LogLevel":"Information","Category":"Store.Services.ProductService","Message":"Placed Order: DataEntities.Order","State":{"Message":"Microsoft.Extensions.Logging.ExtendedLogger\u002BModernTagJoiner","{OriginalFormat}":"Placed Order: {order}","order.Total":269.88,"order.Products":"[\u0022DataEntities.Product\u0022,\u0022DataEntities.Product\u0022,\u0022DataEntities.Product\u0022,\u0022DataEntities.Product\u0022,\u0022DataEntities.Product\u0022,\u0022DataEntities.Product\u0022,\u0022DataEntities.Product\u0022,\u0022DataEntities.Product\u0022,\u0022DataEntities.Product\u0022,\u0022DataEntities.Product\u0022,\u0022DataEntities.Product\u0022,\u0022DataEntities.Product\u0022]","order":"DataEntities.Order","order.CustomerAddress":"*****","order.CustomerName":"*****","order.Id":""}}
    

    Dieser JSON-formatierte Protokolleintrag sollte angezeigt werden. Beachten Sie, dass der Wert order.Id immer noch eine leere Zeichenfolge ist, aber die Werte CustomerName und CustomerAddress jetzt *****. sind

  6. Drücken Sie im Fenster TERMINAL die Tastenkombination STRG+C, um die App zu beenden.