Övning – Redigera känsliga data i molnbaserade program

Slutförd

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.

  1. I terminalfönstret anger du följande kommando:

    cd /workspaces/mslearn-dotnet-cloudnative/dotnet-compliance/eShopLite/Store/
    
  2. Microsoft.Extensions.Compliance.Redaction Lägg till NuGet-paketet i projektet:

    dotnet add package Microsoft.Extensions.Compliance.Redaction
    
  3. I explorer-fönstret expanderar du mappen dotnet-compliance/eShopLite/Store och väljer sedan filen Program.cs.

  4. Lägg till följande beroenden i redigeringsprogrammet:

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

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

  1. I explorer-fönstret expanderar du mappen dotnet-compliance/eShopLite/Store/Services och väljer sedan filen ProductService.cs.

  2. 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);
    }
    
  3. I redigeraren anropar LogOrders du metoden i CreateOrder 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.

  1. Gå till mappen dotnet-compliance/eShopLite i terminalfönstret längst ned.

    cd ..
    
  2. Uppdatera appcontainrarna.

    dotnet publish /p:PublishProfile=DefaultContainer 
    
  3. Gå till mappen dotnet-compliance och starta appen med Docker:

    cd ..
    docker compose up
    
  4. Välj fliken PORTar och välj sedan ikonen Öppna i webbläsarens jordglob för frontend-porten (32000).

  5. Välj länken Produkter . Lägg till några produkter i din varukorg.

  6. Välj knappen Köp korg.

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

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

  1. I explorer-fönstret expanderar du mappen dotnet-compliance/eShopLite/DataEntities och väljer sedan filen Compliance.cs.

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

  1. I explorer-fönstret expanderar du mappen dotnet-compliance/eShopLite/Store och väljer sedan filen Program.cs.

  2. 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 anpassade EShopCustomRedactor implementeringen för EUII-data.

Testa den nya redigeringsimplementeringen

  1. I terminalfönstret skapar och kör du appen:

    docker-compose up --build
    
  2. Välj fliken PORTar och välj sedan ikonen Öppna i webbläsarens jordglob för frontend-porten (32000).

  3. Välj länken Produkter . Lägg till några produkter i din varukorg.

  4. Välj knappen Köp korg.

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

  6. I terminalfönstret trycker du på Ctrl+C för att stoppa appen.