Ejercicio: Censura de datos confidenciales en aplicaciones nativas de nube

Completado

Necesita agregar algún registro al proceso de pedido. Usará las características de censurar datos de .NET para asegurarse de que los datos confidenciales no se filtren en los registros.

En este ejercicio, aprenderá a:

  • Agregue el paquete NuGet Microsoft.Extensions.Compliance.Redaction a cada proyecto.
  • Agregue el servicio de censurar datos al contenedor de inserción de dependencias.
  • Habilite la opción de censurar datos en la plataforma de registro.
  • Llame a la plataforma de registro durante el proceso de pedido.
  • Agregue una implementación de la acción de censurar datos personalizada para los datos EUII.
  • Elija la implementación de la acción de censurar datos que se usará para cada tipo de datos clasificados.

Adición del servicio de censurar datos

Debe tener abierta la ventana codespace o Visual Studio Code. Si no es así, ábrala ahora.

  1. En la ventana TERMINAL, escriba este comando:

    cd /workspaces/mslearn-dotnet-cloudnative/dotnet-compliance/eShopLite/Store/
    
  2. Agregue el paquete NuGet Microsoft.Extensions.Compliance.Redaction al proyecto:

    dotnet add package Microsoft.Extensions.Compliance.Redaction
    
  3. En el panel EXPLORER, expanda la carpeta dotnet-compliance/eShopLite/Store y, a continuación, seleccione el archivo Program.cs.

  4. En el editor, agregue las siguientes dependencias:

    using Microsoft.Extensions.Compliance.Classification;
    using Microsoft.Extensions.Compliance.Redaction;
    
  5. Desplácese hacia abajo hasta la línea 19, debajo del comentario Add redaction, agregue el servicio de censurar datos al contenedor de inserción de dependencias:

    builder.Services.AddRedaction();
    

Habilitación de la acción de censurar datos en la plataforma de registro

  1. En el editor, agregue este código debajo de la línea AddRedaction():

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

    El código anterior habilita la acción de censurar datos en la plataforma de registro.

Llamada a la plataforma de registro durante el proceso de pedido

  1. En el panel EXPLORER, expanda la carpeta dotnet-compliance/eShopLite/Store/Services y, a continuación, seleccione el archivo ProductService.cs.

  2. En el editor, en la parte inferior del archivo, agregue este código:

    public static partial class Log
    {
        [LoggerMessage(1, LogLevel.Information, "Placed Order: {order}")]
        public static partial void LogOrders(this ILogger logger, [LogProperties] Order order);
    }
    
  3. En el editor, en la tarea CreateOrder, llame al método LogOrders:

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

    El código anterior llama al método LogOrders y lo pasa a la información del pedido actual.

Prueba del nuevo registro censurado

Con todo el código anterior implementado, la aplicación puede usar la implementación de la acción de censurar datos predeterminada para censurar la información Order. Ahora probará esto.

  1. En el panel TERMINAL de la parte inferior, vaya a la carpeta dotnet-compliance/eShopLite.

    cd ..
    
  2. Actualice los contenedores de aplicaciones.

    dotnet publish /p:PublishProfile=DefaultContainer 
    
  3. Vaya a la carpeta dotnet-compliance e inicie la aplicación con Docker:

    cd ..
    docker compose up
    
  4. Seleccione la pestaña PUERTOS y, a continuación, seleccione el icono de globo Abrir en el explorador del puerto Front-end (32000).

  5. Seleccione el vínculo Productos. Agregue algunos productos a la cesta de la compra.

  6. Seleccione el botón Comprar cesta.

  7. En la ventana TERMINAL, presione Ctrl+F, y, en el campo de búsqueda, escriba "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":""}}
    

    Debería ver esta entrada de registro con formato JSON. Observe que el valor order.Total está en los registros, pero los valores CustomerName y CustomerAddress son cadenas vacías.

    De manera predeterminada, si no especifica una implementación de acción de censurar datos, el motor de censurar datos usará la implementación ErasingRedactor para asegurarse de que no se filtre ningún dato confidencial en los registros.

  8. En la ventana TERMINAL, presione Ctrl+C para detener la aplicación.

Adición de una implementación de acción de censurar datos personalizada

Ahora mejorará la implementación de la acción de censurar datos para usar diferentes algoritmos de censurar datos para distintos tipos de datos. En primer lugar, agregará una nueva implementación de acción de censurar datos personalizada que reemplace el valor por *****.

  1. En el panel EXPLORER, expanda la carpeta dotnet-compliance/eShopLite/DataEntities y, a continuación, seleccione el archivo Compliance.cs.

  2. En el editor, en la parte inferior del archivo, agregue este código:

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

    El código anterior hace que un método de censurar datos EShopCustomRedactor esté disponible para el motor de censurar datos.

Elección de la implementación de la acción de censurar datos que se va a usar

  1. En el panel EXPLORER, expanda la carpeta dotnet-compliance/eShopLite/Store y, a continuación, seleccione el archivo Program.cs.

  2. Reemplace el código builder.Services.AddRedaction(); para proporcionar la configuración del motor de censurar datos:

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

    El código anterior configura el motor de censurar datos para usar específicamente la implementación ErasingRedactor para datos EUP y la nueva implementación personalizada EShopCustomRedactor para los datos EUII.

Prueba de la nueva implementación de la acción de censurar datos

  1. En la ventana TERMINAL, compile y ejecute la aplicación:

    docker-compose up --build
    
  2. Seleccione la pestaña PUERTOS y, a continuación, seleccione el icono de globo Abrir en el explorador del puerto Front-end (32000).

  3. Seleccione el vínculo Productos. Agregue algunos productos a la cesta de la compra.

  4. Seleccione el botón Comprar cesta.

  5. En la ventana TERMINAL, presione Ctrl+F, y, en el campo de búsqueda, escriba "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":""}}
    

    Debería ver esta entrada de registro con formato JSON. Observe que el valor order.Id sigue siendo una cadena vacía, pero los valores CustomerName y CustomerAddress ahora son *****.

  6. En la ventana TERMINAL, presione Ctrl+C para detener la aplicación.