Ejercicio: Censura de datos confidenciales en aplicaciones nativas de nube
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.
En la ventana TERMINAL, escriba este comando:
cd /workspaces/mslearn-dotnet-cloudnative/dotnet-compliance/eShopLite/Store/
Agregue el paquete NuGet
Microsoft.Extensions.Compliance.Redaction
al proyecto:dotnet add package Microsoft.Extensions.Compliance.Redaction
En el panel EXPLORER, expanda la carpeta dotnet-compliance/eShopLite/Store y, a continuación, seleccione el archivo Program.cs.
En el editor, agregue las siguientes dependencias:
using Microsoft.Extensions.Compliance.Classification; using Microsoft.Extensions.Compliance.Redaction;
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
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
En el panel EXPLORER, expanda la carpeta dotnet-compliance/eShopLite/Store/Services y, a continuación, seleccione el archivo ProductService.cs.
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); }
En el editor, en la tarea
CreateOrder
, llame al métodoLogOrders
: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.
En el panel TERMINAL de la parte inferior, vaya a la carpeta dotnet-compliance/eShopLite.
cd ..
Actualice los contenedores de aplicaciones.
dotnet publish /p:PublishProfile=DefaultContainer
Vaya a la carpeta dotnet-compliance e inicie la aplicación con Docker:
cd .. docker compose up
Seleccione la pestaña PUERTOS y, a continuación, seleccione el icono de globo Abrir en el explorador del puerto Front-end (32000).
Seleccione el vínculo Productos. Agregue algunos productos a la cesta de la compra.
Seleccione el botón Comprar cesta.
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.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 *****
.
En el panel EXPLORER, expanda la carpeta dotnet-compliance/eShopLite/DataEntities y, a continuación, seleccione el archivo Compliance.cs.
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
En el panel EXPLORER, expanda la carpeta dotnet-compliance/eShopLite/Store y, a continuación, seleccione el archivo Program.cs.
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 personalizadaEShopCustomRedactor
para los datos EUII.
Prueba de la nueva implementación de la acción de censurar datos
En la ventana TERMINAL, compile y ejecute la aplicación:
docker-compose up --build
Seleccione la pestaña PUERTOS y, a continuación, seleccione el icono de globo Abrir en el explorador del puerto Front-end (32000).
Seleccione el vínculo Productos. Agregue algunos productos a la cesta de la compra.
Seleccione el botón Comprar cesta.
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
*****.
En la ventana TERMINAL, presione Ctrl+C para detener la aplicación.