Oefening: gevoelige gegevens redact in cloudeigen toepassingen

Voltooid

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.

  1. Voer in het TERMINAL-venster deze opdracht in:

    cd /workspaces/mslearn-dotnet-cloudnative/dotnet-compliance/eShopLite/Store/
    
  2. Voeg het Microsoft.Extensions.Compliance.Redaction NuGet-pakket toe aan het project:

    dotnet add package Microsoft.Extensions.Compliance.Redaction
    
  3. Vouw in het deelvenster EXPLORER de map dotnet-compliance/eShopLite/Store uit en selecteer vervolgens het bestand Program.cs .

  4. Voeg in de editor de volgende afhankelijkheden toe:

    using Microsoft.Extensions.Compliance.Classification;
    using Microsoft.Extensions.Compliance.Redaction;
    
  5. 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

  1. 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

  1. Vouw in het deelvenster EXPLORER de map dotnet-compliance/eShopLite/Store/Services uit en selecteer vervolgens het ProductService.cs bestand.

  2. 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);
    }
    
  3. Roep in de editor in de CreateOrder taak de methode aan LogOrders :

    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.

  1. Ga in het TERMINAL-deelvenster onderaan naar de map dotnet-compliance/eShopLite .

    cd ..
    
  2. Werk de appscontainers bij.

    dotnet publish /p:PublishProfile=DefaultContainer 
    
  3. Ga naar de map dotnet-compliance en start de app met Docker:

    cd ..
    docker compose up
    
  4. Selecteer het tabblad POORTEN en selecteer vervolgens het pictogram Openen in browserbol voor de front-endpoort (32000).

  5. Selecteer de koppeling Producten . Voeg enkele producten toe aan uw winkelwagen.

  6. Selecteer de knop Mand kopen .

  7. 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.

  8. 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 *****.

  1. Vouw in het deelvenster EXPLORER de map dotnet-compliance/eShopLite/DataEntities uit en selecteer vervolgens het Compliance.cs bestand.

  2. 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

  1. Vouw in het deelvenster EXPLORER de map dotnet-compliance/eShopLite/Store uit en selecteer vervolgens het bestand Program.cs .

  2. 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 aangepaste EShopCustomRedactor implementatie voor EUII-gegevens te gebruiken.

De nieuwe implementatie van redaction testen

  1. Bouw en voer de app uit in het TERMINAL-venster :

    docker-compose up --build
    
  2. Selecteer het tabblad POORTEN en selecteer vervolgens het pictogram Openen in browserbol voor de front-endpoort (32000).

  3. Selecteer de koppeling Producten . Voeg enkele producten toe aan uw winkelwagen.

  4. Selecteer de knop Mand kopen .

  5. 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 *****.

  6. Druk in het TERMINAL-venster op Ctrl+C om de app te stoppen.