Övning – Redigera känsliga data i molnbaserade program
Du behöver lägga till viss loggning i beställningsprocessen. Du använder redigeringsfunktionerna i .NET för att säkerställa att känsliga data inte läcker ut i loggarna.
I den här övningen kommer du att:
Microsoft.Extensions.Compliance.Redaction
Lägg till NuGet-paketet i varje projekt.- Lägg till redigeringstjänsten i containern för beroendeinmatning.
- Aktivera redigering i loggningsramverket.
- Anropa loggningsramverket under beställningsprocessen.
- Lägg till en anpassad redigeringsimplementering för EUII-data.
- Välj vilken redigeringsimplementering som ska användas för varje typ av klassificerade data.
Lägg till redigeringstjänsten
Du bör fortfarande ha kodområdet eller Visual Studio Code-fönstret öppet. Annars öppnar du den nu.
I terminalfönstret anger du följande kommando:
cd /workspaces/mslearn-dotnet-cloudnative/dotnet-compliance/eShopLite/Store/
Microsoft.Extensions.Compliance.Redaction
Lägg till NuGet-paketet i projektet:dotnet add package Microsoft.Extensions.Compliance.Redaction
I explorer-fönstret expanderar du mappen dotnet-compliance/eShopLite/Store och väljer sedan filen Program.cs.
Lägg till följande beroenden i redigeringsprogrammet:
using Microsoft.Extensions.Compliance.Classification; using Microsoft.Extensions.Compliance.Redaction;
Rulla ned till rad 19 under kommentaren
Add redaction
och lägg till redigeringstjänsten i containern för beroendeinmatning:builder.Services.AddRedaction();
Aktivera redigering i loggningsramverket
I redigeraren lägger du till den här koden under
AddRedaction()
raden:builder.Services.AddLogging(logging => { logging.EnableRedaction(); logging.AddJsonConsole(); //Enable structure logs on the console to view the redacted data. });
Koden ovan aktiverar redigering i loggningsramverket.
Anropa loggningsramverket under beställningsprocessen
I explorer-fönstret expanderar du mappen dotnet-compliance/eShopLite/Store/Services och väljer sedan filen ProductService.cs.
Lägg till den här koden längst ned i filen i redigeringsprogrammet:
public static partial class Log { [LoggerMessage(1, LogLevel.Information, "Placed Order: {order}")] public static partial void LogOrders(this ILogger logger, [LogProperties] Order order); }
I redigeraren anropar
LogOrders
du metoden iCreateOrder
uppgiften:public async Task<bool> CreateOrder(Order order) { try { _logger.LogOrders(order);
Koden ovan anropar
LogOrders
metoden och skickar den aktuell orderinformation.
Testa den nya redigerade loggningen
Med all kod ovan på plats kan appen använda standardimplementeringen för redigering för att redigera Order
informationen. Nu ska du testa det här.
Gå till mappen dotnet-compliance/eShopLite i terminalfönstret längst ned.
cd ..
Uppdatera appcontainrarna.
dotnet publish /p:PublishProfile=DefaultContainer
Gå till mappen dotnet-compliance och starta appen med Docker:
cd .. docker compose up
Välj fliken PORTar och välj sedan ikonen Öppna i webbläsarens jordglob för frontend-porten (32000).
Välj länken Produkter . Lägg till några produkter i din varukorg.
Välj knappen Köp korg.
I terminalfönstret trycker du på Ctrl+F. I sökfältet anger du "EventId":1..
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":""}}
Du bör se den här JSON-formaterade loggposten. Observera att ordern . Det totala värdet finns i loggarna, men värdena CustomerName och CustomerAddress är tomma strängar.
Om du inte anger någon redigeringsimplementering använder
ErasingRedactor
redigeringsmotorn som standard implementeringen för att säkerställa att inga känsliga data läcker ut i loggarna.I terminalfönstret trycker du på Ctrl+C för att stoppa appen.
Lägga till en anpassad redigeringsimplementering
Nu ska du förbättra redigeringsimplementeringen så att du kan använda olika redigeringsalgoritmer för olika typer av data. Först lägger du till en ny implementering av anpassad redigering som ersätter värdet med *****
.
I explorer-fönstret expanderar du mappen dotnet-compliance/eShopLite/DataEntities och väljer sedan filen Compliance.cs.
Lägg till den här koden längst ned i filen i redigeringsprogrammet:
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; } }
Koden ovan gör en
EShopCustomRedactor
redigeringsmetod tillgänglig för redigeringsmotorn.
Välj vilken redigeringsimplementering som ska användas
I explorer-fönstret expanderar du mappen dotnet-compliance/eShopLite/Store och väljer sedan filen Program.cs.
Ersätt
builder.Services.AddRedaction();
kod för att ange konfiguration för redigeringsmotorn:builder.Services.AddRedaction(configure => { configure.SetRedactor<ErasingRedactor>(new DataClassificationSet(DataClassifications.EUPDataClassification)); configure.SetRedactor<EShopCustomRedactor>(new DataClassificationSet(DataClassifications.EUIIDataClassification)); });
Koden ovan konfigurerar redigeringsmotorn för att specifikt använda implementeringen
ErasingRedactor
för EUP-data och den nya anpassadeEShopCustomRedactor
implementeringen för EUII-data.
Testa den nya redigeringsimplementeringen
I terminalfönstret skapar och kör du appen:
docker-compose up --build
Välj fliken PORTar och välj sedan ikonen Öppna i webbläsarens jordglob för frontend-porten (32000).
Välj länken Produkter . Lägg till några produkter i din varukorg.
Välj knappen Köp korg.
I terminalfönstret trycker du på Ctrl+F. I sökfältet anger du "EventId":1..
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":""}}
Du bör se den här JSON-formaterade loggposten. Observera att ordern . ID-värdet är fortfarande en tom sträng, men värdena CustomerName och CustomerAddress är nu
*****.
I terminalfönstret trycker du på Ctrl+C för att stoppa appen.