Übung – Unkenntlichmachen vertraulicher Daten in cloudnativen Anwendungen

Abgeschlossen

Sie müssen dem Bestellvorgang einige Protokollierungen hinzufügen. Sie verwenden die Redaction-Features von .NET, um sicherzustellen, dass die vertraulichen Daten nicht in die Protokolle gelangt sind.

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 Redaction-Dienst zum Container zum Einfügen von Abhängigkeiten hinzu.
  • Aktivieren Sie die Unkenntlichmachung im Protokollierungsframework.
  • Rufen Sie das Protokollierungsframework während des Bestellvorgangs auf.
  • Fügen Sie eine benutzerdefinierte Redaction-Implementierung für EUII-Daten hinzu.
  • Wählen Sie aus, welche Redaction-Implementierung für jeden Typ von klassifizierten Daten verwendet werden soll.

Hinzufügen des Redaction-Diensts

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

  1. Geben Sie im TERMINAL-Fenster diesen Befehl ein:

    cd /workspaces/mslearn-dotnet-cloudnative/dotnet-compliance/eShopLite/Store/
    
  2. Hinzufügen des Microsoft.Extensions.Compliance.Redaction-NuGet-Pakets zu Ihrem Projekt:

    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 Program.cs Datei 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 AddRedaction() Zeile 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 Redaction im Protokollierungsframework.

Aufrufen des Protokollierungsframeworks während des Bestellvorgangs

  1. Erweitern Sie im EXPLORER-Bereich den Ordner dotnet-compliance/eShopLite/Store/Services, und wählen Sie dann die ProductService.cs Datei 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 CreateOrder Aufgabe die LogOrders Methode auf:

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

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

Testen Sie die neue redigierte Protokollierung

Mit dem obigen Code kann die App die standardmäßige Redaction-Implementierung verwenden, um die Order Informationen zu redigieren. Jetzt testen Sie dies.

  1. Wechseln Sie unten im TERMINALbereich 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 dann das Symbol " Im Browser öffnen" für den Front-End-Port (32000) aus.

  5. Wählen Sie den Link "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-FensterSTRG+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 Bestellung.Gesamtwert sich in den Protokollen befindet, aber die Werte CustomerName und CustomerAddress leere Zeichenfolgen sind.

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

  8. Drücken Sie im TERMINAL-FensterSTRG+C , um die App zu beenden.

Hinzufügen einer benutzerdefinierten Redaction-Implementierung

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

  1. Erweitern Sie im EXPLORER-Bereich den Ordner dotnet-compliance/eShopLite/DataEntities, und wählen Sie dann die Compliance.cs Datei 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 Redaction-Implementierung

  1. Erweitern Sie im EXPLORER-Bereich den Ordner dotnet-compliance/eShopLite/Store, und wählen Sie dann die Program.cs Datei 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 die Redaktions-Engine 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 im TERMINAL-Fenster die App, und führen Sie sie aus:

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

  3. Wählen Sie den Link "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-FensterSTRG+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 order.Id-Wert nach wie vor eine leere Zeichenfolge ist, aber die Werte CustomerName und CustomerAddress jetzt vorhanden sind. *****.

  6. Drücken Sie im TERMINAL-FensterSTRG+C , um die App zu beenden.