Übung – Unkenntlichmachen vertraulicher Daten in cloudnativen Anwendungen
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.Redactionhinzu. - 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.
Geben Sie im TERMINAL-Fenster diesen Befehl ein:
cd /workspaces/mslearn-dotnet-cloudnative/dotnet-compliance/eShopLite/Store/Hinzufügen des
Microsoft.Extensions.Compliance.Redaction-NuGet-Pakets zu Ihrem Projekt:dotnet add package Microsoft.Extensions.Compliance.RedactionErweitern Sie im EXPLORER-Bereich den Ordner dotnet-compliance/eShopLite/Store, und wählen Sie dann die Program.cs Datei 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 redactionden 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
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
Erweitern Sie im EXPLORER-Bereich den Ordner dotnet-compliance/eShopLite/Store/Services, und wählen Sie dann die ProductService.cs Datei 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
CreateOrderAufgabe dieLogOrdersMethode auf:public async Task<bool> CreateOrder(Order order) { try { _logger.LogOrders(order);Der obige Code ruft die
LogOrdersMethode 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.
Wechseln Sie unten im TERMINALbereich zum Ordner "dotnet-compliance/eShopLite ".
cd ..Aktualisieren Sie die App-Container.
dotnet publish /p:PublishProfile=DefaultContainerWechseln Sie zum Dotnet-Compliance-Ordner , und starten Sie die App mit Docker:
cd .. docker compose upWählen Sie die Registerkarte "PORTS " und dann das Symbol " Im Browser öffnen" für den Front-End-Port (32000) aus.
Wählen Sie den Link "Produkte " aus. Fügen Sie Ihrem Warenkorb einige Produkte hinzu.
Wählen Sie die Schaltfläche " Warenkorb kaufen " aus.
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
ErasingRedactorImplementierung, um sicherzustellen, dass keine vertraulichen Daten in die Protokolle gelangt sind.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.
Erweitern Sie im EXPLORER-Bereich den Ordner dotnet-compliance/eShopLite/DataEntities, und wählen Sie dann die Compliance.cs Datei 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 Redaction-Implementierung
Erweitern Sie im EXPLORER-Bereich den Ordner dotnet-compliance/eShopLite/Store, und wählen Sie dann die Program.cs Datei 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 die Redaktions-Engine 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 im TERMINAL-Fenster die App, und führen Sie sie aus:
docker-compose up --buildWählen Sie die Registerkarte "PORTS " und dann das Symbol " Im Browser öffnen" für den Front-End-Port (32000) aus.
Wählen Sie den Link "Produkte " aus. Fügen Sie Ihrem Warenkorb einige Produkte hinzu.
Wählen Sie die Schaltfläche " Warenkorb kaufen " aus.
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.
*****.Drücken Sie im TERMINAL-FensterSTRG+C , um die App zu beenden.