Ejercicio: Censura de datos confidenciales en aplicaciones nativas de nube
Necesita agregar algún registro al proceso de pedido. Utilizará las características de redacción 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.Redactiona 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.
- Añada una implementación de redacción personalizada para los datos EUII.
- Elija la implementación de la acción de redacción que se usará para cada tipo de datos clasificados.
Agregar el servicio de redacción
Todavía debería tener abierto el espacio de código o la ventana de 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.Redactional proyecto:dotnet add package Microsoft.Extensions.Compliance.RedactionEn el panel EXPLORADOR , 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
AddRedaction()línea: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
LogOrdersmétodo y lo pasa 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. Va a probar esto ahora.
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=DefaultContainerVaya a la carpeta dotnet-compliance e inicie la aplicación con Docker:
cd .. docker compose upSeleccione la pestaña PUERTOS y, a continuación, seleccione el icono del globo Abrir en navegador para el 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, 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. Nótese que el valor de pedido.Total está en los registros, pero los valores de NombreCliente y DirecciónCliente 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
ErasingRedactorpara 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.
Añadir una implementación de redacción 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 redacción 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 pone un método de
EShopCustomRedactorredacción a disposición del motor de redacción.
Elegir qué implementación de redacción usar
En el panel EXPLORADOR , 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 redacción.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 redacción para usar específicamente la implementación
ErasingRedactorpara datos EUP y la nueva implementación personalizadaEShopCustomRedactorpara datos EUII.
Prueba la nueva implementación de redacción
En la ventana TERMINAL , compile y ejecute la aplicación:
docker-compose up --buildSeleccione la pestaña PUERTOS y, a continuación, seleccione el icono del globo Abrir en navegador para el 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, 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 de pedido.Id sigue siendo una cadena vacía, pero los valores de CustomerName y CustomerAddress ahora son
*****.En la ventana TERMINAL , presione Ctrl+C para detener la aplicación.