Øvelse – Redact følsomme data i cloudbaserede programmer

Fuldført

Du skal føje logføring til ordreprocessen. Du skal bruge redigeringsfunktionerne i .NET til at sikre, at de følsomme data ikke lækkes i loggene.

I denne øvelse skal du:

  • Føj Microsoft.Extensions.Compliance.Redaction NuGet-pakken til hvert projekt.
  • Føj redigeringstjenesten til objektbeholderen til afhængighedsinjektion.
  • Aktivér redigering i logføringsstrukturen.
  • Kald logføringsstrukturen under ordreprocessen.
  • Tilføj en brugerdefineret implementering af redigering for EUII-data.
  • Vælg, hvilken genhandlingsimplementering der skal bruges til hver type klassificerede data.

Tilføj redigeringstjenesten

Du bør stadig have vinduet codespace eller Visual Studio Code åbent. Hvis ikke, skal du åbne den nu.

  1. I vinduet TERMINAL skal du angive denne kommando:

    cd /workspaces/mslearn-dotnet-cloudnative/dotnet-compliance/eShopLite/Store/
    
  2. Føj Microsoft.Extensions.Compliance.Redaction NuGet-pakken til projektet:

    dotnet add package Microsoft.Extensions.Compliance.Redaction
    
  3. I ruden EXPLORER skal du udvide mappen dotnet-compliance/eShopLite/Store og derefter vælge filen Program.cs.

  4. Tilføj følgende afhængigheder i editoren:

    using Microsoft.Extensions.Compliance.Classification;
    using Microsoft.Extensions.Compliance.Redaction;
    
  5. Rul ned til linje 19 under kommentaren Add redaction føj redigeringstjenesten til objektbeholderen til afhængighedsinjektion:

    builder.Services.AddRedaction();
    

Aktivering af redigering i logføringsstrukturen

  1. Tilføj denne kode under linjen AddRedaction() i editoren:

    builder.Services.AddLogging(logging => 
    {
        logging.EnableRedaction();
        logging.AddJsonConsole(); //Enable structure logs on the console to view the redacted data.
    });
    

    Ovenstående kode muliggør redigering i logføringsstrukturen.

Kald logføringsstrukturen under ordreprocessen

  1. I ruden EXPLORER skal du udvide mappen dotnet-compliance/eShopLite/Store/Services og derefter vælge filen ProductService.cs.

  2. Tilføj denne kode nederst i filen i editoren:

    public static partial class Log
    {
        [LoggerMessage(1, LogLevel.Information, "Placed Order: {order}")]
        public static partial void LogOrders(this ILogger logger, [LogProperties] Order order);
    }
    
  3. Kald metoden CreateOrder i LogOrders-opgaven i editoren:

    public async Task<bool> CreateOrder(Order order)
    {
        try
        {
            _logger.LogOrders(order);
    

    Ovenstående kode kalder metoden LogOrders og overfører de aktuelle ordreoplysninger.

Test den nye redigerede logføring

Når al ovenstående kode er på plads, kan appen bruge standardimplementeringsimplementering til at redigere Order oplysninger. Du skal nu teste dette.

  1. Gå til mappen dotnet-compliance/eShopLite i ruden TERMINAL nederst.

    cd ..
    
  2. Opdater objektbeholderne til apps.

    dotnet publish /p:PublishProfile=DefaultContainer 
    
  3. Gå til mappen dotnet-compliance, og start appen med Docker:

    cd ..
    docker compose up
    
  4. Vælg fanen PORTE, og vælg derefter ikonet Åbn i browser globus for Front End (32000) port.

  5. Vælg linket Products. Føj nogle produkter til indkøbskurven.

  6. Vælg knappen Køb kurv.

  7. I vinduet TERMINAL skal du trykke på Ctrl+Fi søgefeltet "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 kunne se denne JSON-formaterede logpost. Bemærk, at rækkefølge. Den samlede værdi findes i loggene, men værdierne for CustomerName og CustomerAddress er tomme strenge.

    Hvis du ikke angiver en genhandlingsimplementering, bruger programmet til redigering som standard ErasingRedactor-implementeringen til at sikre, at der ikke er lækket følsomme data til loggene.

  8. I vinduet TERMINAL skal du trykke på Ctrl+C for at stoppe appen.

Tilføj en brugerdefineret implementering af redigering

Du skal nu forbedre implementeringen af redigering for at bruge forskellige redigeringsalgoritmer til forskellige typer data. Først skal du tilføje en ny implementering af brugerdefineret redigering, der erstatter værdien med *****.

  1. I ruden EXPLORER skal du udvide mappen dotnet-compliance/eShopLite/DataEntities mappe og derefter vælge filen Compliance.cs.

  2. Tilføj denne kode nederst i filen i editoren:

    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;
        }
    }
    

    Ovenstående kode gør en EShopCustomRedactor redigeringsmetode tilgængelig for redigeringsprogrammet.

Vælg, hvilken genhandlingsimplementering der skal bruges

  1. I ruden EXPLORER skal du udvide mappen dotnet-compliance/eShopLite/Store og derefter vælge filen Program.cs.

  2. Erstat builder.Services.AddRedaction(); kode for at angive konfiguration af redigeringsprogrammet:

    builder.Services.AddRedaction(configure =>
    {
        configure.SetRedactor<ErasingRedactor>(new DataClassificationSet(DataClassifications.EUPDataClassification));
        configure.SetRedactor<EShopCustomRedactor>(new DataClassificationSet(DataClassifications.EUIIDataClassification));
    });
    

    Ovenstående kode konfigurerer redigeringsprogrammet til specifikt at bruge ErasingRedactor-implementeringen for EUP-data og den nye brugerdefinerede EShopCustomRedactor implementering for EUII-data.

Test den nye implementering af redigering

  1. Opret og kør appen i vinduet TERMINAL:

    docker-compose up --build
    
  2. Vælg fanen PORTE, og vælg derefter ikonet Åbn i browser globus for Front End (32000) port.

  3. Vælg linket Products. Føj nogle produkter til indkøbskurven.

  4. Vælg knappen Køb kurv.

  5. I vinduet TERMINAL skal du trykke på Ctrl+Fi søgefeltet "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 kunne se denne JSON-formaterede logpost. Bemærk, at rækkefølge. Id- værdi er stadig en tom streng, men værdierne for CustomerName og CustomerAddress er nu *****.

  6. I vinduet TERMINAL skal du trykke på Ctrl+C for at stoppe appen.