Übung – Unkenntlichmachen vertraulicher Daten in cloudnativen Anwendungen
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.
Geben Sie im Fenster TERMINAL den folgenden Befehl ein:
cd /workspaces/mslearn-dotnet-cloudnative/dotnet-compliance/eShopLite/Store/
Fügen Sie dem Projekt das
Microsoft.Extensions.Compliance.Redaction
NuGet-Paket hinzu:dotnet add package Microsoft.Extensions.Compliance.Redaction
Erweitern Sie im EXPLORER-Bereich den Ordner dotnet-compliance/eShopLite/Store, und wählen Sie dann die Datei Program.cs aus.
Fügen Sie im Editor die folgenden Abhängigkeiten hinzu:
using Microsoft.Extensions.Compliance.Classification; using Microsoft.Extensions.Compliance.Redaction;
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
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
Erweitern Sie im EXPLORER-Bereich den Ordner dotnet-compliance/eShopLite/Store/Services, und wählen Sie dann die Datei ProductService.cs aus.
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); }
Rufen Sie im Editor in der Aufgabe
CreateOrder
die MethodeLogOrders
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.
Wechseln Sie unten im Bereich TERMINAL zum Ordner dotnet-compliance/eShopLite.
cd ..
Aktualisieren Sie die App-Container.
dotnet publish /p:PublishProfile=DefaultContainer
Wechseln Sie zum dotnet-Compliance-Ordner, und starten Sie die App mit Docker:
cd .. docker compose up
Wählen Sie die Registerkarte PORTS und anschließend das Globussymbol Im Browser öffnen für den Port Front-End (32000) aus.
Wählen Sie den Link für Produkte aus. Fügen Sie Ihrem Warenkorb einige Produkte hinzu.
Wählen Sie die Schaltfläche Warenkorb kaufen aus.
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.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.
Erweitern Sie im Bereich EXPLORER den Ordner dotnet-compliance/eShopLite/DataEntities und wählen Sie dann die Datei Compliance.cs aus.
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
Erweitern Sie im EXPLORER-Bereich den Ordner dotnet-compliance/eShopLite/Store, und wählen Sie dann die Datei Program.cs aus.
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 benutzerdefinierteEShopCustomRedactor
-Implementierung für EUII-Daten verwendet wird.
Testen der neuen Unkenntlichmachungsimplementierung
Erstellen Sie die App im TERMINAL-Fenster und führen Sie sie aus:
docker-compose up --build
Wählen Sie die Registerkarte PORTS und anschließend das Globussymbol Im Browser öffnen für den Port Front-End (32000) aus.
Wählen Sie den Link für Produkte aus. Fügen Sie Ihrem Warenkorb einige Produkte hinzu.
Wählen Sie die Schaltfläche Warenkorb kaufen aus.
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
*****.
sindDrücken Sie im Fenster TERMINAL die Tastenkombination STRG+C, um die App zu beenden.