Oefening: gevoelige gegevens redact in cloudeigen toepassingen
U moet logboekregistratie toevoegen aan het orderproces. U gebruikt de redaction-functies van .NET om ervoor te zorgen dat de gevoelige gegevens niet in de logboeken worden gelekt.
In deze oefening gaat u het volgende doen:
- Voeg het
Microsoft.Extensions.Compliance.Redaction
NuGet-pakket toe aan elk project. - Voeg de redaction-service toe aan de container voor afhankelijkheidsinjectie.
- Schakel redaction in het framework voor logboekregistratie in.
- Roep het framework voor logboekregistratie aan tijdens het orderproces.
- Voeg een aangepaste redaction-implementatie toe voor EUII-gegevens.
- Kies welke implementatie van redaction moet worden gebruikt voor elk type geclassificeerde gegevens.
De redaction-service toevoegen
U moet nog steeds het venster Codespace of Visual Studio Code openen. Zo niet, open het nu.
Voer in het TERMINAL-venster deze opdracht in:
cd /workspaces/mslearn-dotnet-cloudnative/dotnet-compliance/eShopLite/Store/
Voeg het
Microsoft.Extensions.Compliance.Redaction
NuGet-pakket toe aan het project:dotnet add package Microsoft.Extensions.Compliance.Redaction
Vouw in het deelvenster EXPLORER de map dotnet-compliance/eShopLite/Store uit en selecteer vervolgens het bestand Program.cs .
Voeg in de editor de volgende afhankelijkheden toe:
using Microsoft.Extensions.Compliance.Classification; using Microsoft.Extensions.Compliance.Redaction;
Schuif omlaag naar regel 19, voeg onder de
Add redaction
opmerking de redaction-service toe aan de container voor afhankelijkheidsinjectie:builder.Services.AddRedaction();
Redaction inschakelen in het framework voor logboekregistratie
Voeg in de editor deze code toe onder de
AddRedaction()
regel:builder.Services.AddLogging(logging => { logging.EnableRedaction(); logging.AddJsonConsole(); //Enable structure logs on the console to view the redacted data. });
De bovenstaande code maakt redaction mogelijk in het framework voor logboekregistratie.
Het logboekregistratieframework aanroepen tijdens het orderproces
Vouw in het deelvenster EXPLORER de map dotnet-compliance/eShopLite/Store/Services uit en selecteer vervolgens het ProductService.cs bestand.
Voeg in de editor onder aan het bestand deze code toe:
public static partial class Log { [LoggerMessage(1, LogLevel.Information, "Placed Order: {order}")] public static partial void LogOrders(this ILogger logger, [LogProperties] Order order); }
Roep in de editor in de
CreateOrder
taak de methode aanLogOrders
:public async Task<bool> CreateOrder(Order order) { try { _logger.LogOrders(order);
De bovenstaande code roept de methode aan
LogOrders
en geeft deze door aan de huidige ordergegevens.
De nieuwe aangepaste logboekregistratie testen
Met alle bovenstaande code kan de app de standaard-implementatie van redaction gebruiken om de Order
informatie te redacteren. U gaat dit nu testen.
Ga in het TERMINAL-deelvenster onderaan naar de map dotnet-compliance/eShopLite .
cd ..
Werk de appscontainers bij.
dotnet publish /p:PublishProfile=DefaultContainer
Ga naar de map dotnet-compliance en start de app met Docker:
cd .. docker compose up
Selecteer het tabblad POORTEN en selecteer vervolgens het pictogram Openen in browserbol voor de front-endpoort (32000).
Selecteer de koppeling Producten . Voeg enkele producten toe aan uw winkelwagen.
Selecteer de knop Mand kopen .
Druk in het TERMINAL-venster op Ctrl+F en voer in het zoekveld 'EventId':1' in.
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":""}}
U ziet deze JSON-indeling voor logboekvermelding. U ziet dat de bestelling. De totale waarde bevindt zich in de logboeken, maar de waarden CustomerName en CustomerAddress zijn lege tekenreeksen.
Als u geen implementatie van een redaction opgeeft, gebruikt de redaction-engine standaard de
ErasingRedactor
implementatie om ervoor te zorgen dat er geen gevoelige gegevens in de logboeken worden gelekt.Druk in het TERMINAL-venster op Ctrl+C om de app te stoppen.
Een aangepaste implementatie voor redaction toevoegen
U gaat nu de implementatie van redaction verbeteren om verschillende algoritmen voor redaction te gebruiken voor verschillende typen gegevens. Eerst voegt u een nieuwe aangepaste redaction-implementatie toe die de waarde vervangt door *****
.
Vouw in het deelvenster EXPLORER de map dotnet-compliance/eShopLite/DataEntities uit en selecteer vervolgens het Compliance.cs bestand.
Voeg in de editor onder aan het bestand deze code toe:
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; } }
De bovenstaande code maakt een
EShopCustomRedactor
redaction-methode beschikbaar voor de redaction-engine.
Kiezen welke implementatie van redaction u wilt gebruiken
Vouw in het deelvenster EXPLORER de map dotnet-compliance/eShopLite/Store uit en selecteer vervolgens het bestand Program.cs .
Vervang
builder.Services.AddRedaction();
code om de configuratie voor de redaction-engine te bieden:builder.Services.AddRedaction(configure => { configure.SetRedactor<ErasingRedactor>(new DataClassificationSet(DataClassifications.EUPDataClassification)); configure.SetRedactor<EShopCustomRedactor>(new DataClassificationSet(DataClassifications.EUIIDataClassification)); });
De bovenstaande code configureert de redaction-engine om specifiek de
ErasingRedactor
implementatie voor EUP-gegevens en de nieuwe aangepasteEShopCustomRedactor
implementatie voor EUII-gegevens te gebruiken.
De nieuwe implementatie van redaction testen
Bouw en voer de app uit in het TERMINAL-venster :
docker-compose up --build
Selecteer het tabblad POORTEN en selecteer vervolgens het pictogram Openen in browserbol voor de front-endpoort (32000).
Selecteer de koppeling Producten . Voeg enkele producten toe aan uw winkelwagen.
Selecteer de knop Mand kopen .
Druk in het TERMINAL-venster op Ctrl+F en voer in het zoekveld 'EventId':1' in.
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":""}}
U ziet deze JSON-indeling voor logboekvermelding. U ziet dat de bestelling. De id-waarde is nog steeds een lege tekenreeks, maar de waarden CustomerName en CustomerAddress zijn nu
*****.
Druk in het TERMINAL-venster op Ctrl+C om de app te stoppen.