Censura de datos confidenciales en una aplicación nativa de nube
La redacción dentro de las aplicaciones se realiza normalmente en los mensajes de registro y la telemetría. También se puede usar en otros escenarios, como redactar dimensiones en Métricas o datos de encabezamiento en middleware.
El marco de registro de .NET proporciona una manera sencilla de censurar los datos en los mensajes de registro. El paquete Microsoft.Extensions.Compliance.Abstractions mejora el registro para incluir una clase Redactor que redacta los datos.
¿Qué es la redacción?
La redacción es el proceso de quitar información confidencial de un mensaje. Por ejemplo, puede que quiera ocultar el nombre de un usuario en un mensaje de registro. Otro ejemplo es censurar la dirección IP de un usuario desde un evento de telemetría.
La redacción más sencilla es borrar el valor y devolver una cadena vacía para una variable. Este comportamiento se produce de forma predeterminada porque el ErasingRedactor es el redactor de reserva predeterminado. Microsoft incluye una HMACSHA256Redactor clase que se puede usar para censurar datos mediante una función hash. La reacción de HMAC es útil si desea censurar los datos, pero puede correlacionar los mensajes de registro entre varias instrucciones de registro. La última opción es proporcionar su propia función de redacción, lo que resulta útil si desea redactar datos mediante un algoritmo personalizado.
Por ejemplo, quiere que sea más claro en los registros que se redacta un valor reemplazando por *****.
Cómo censurar datos en una aplicación nativa de la nube
La aplicación nativa de la nube de las organizaciones podría escribir registros y crear telemetría en varios proyectos. Por ejemplo, podría escribir registros desde el servicio de base de datos, la aplicación web o cualquier otra API que use. Según el tipo de registro, deberá agregar el servicio de reacción a cada uno.
Hay cuatro pasos que debe seguir para habilitar la redacción en tu aplicación.
- Agregue el paquete NuGet
Microsoft.Extensions.Compliance.Redactiona cada proyecto. - Agregue el servicio de censurar datos al contenedor de inserción de dependencias.
- Elija la implementación de la acción de redacción que se usará para cada tipo de datos clasificados.
- Habilite la opción de censurar datos en la plataforma de registro.
Agregue el servicio de censurar datos al contenedor de inserción de dependencias
El ejemplo siguiente es para una aplicación WebAssembly de Blazor. El proceso es similar para otros tipos de aplicaciones, pero el código es ligeramente diferente en función de cómo se configure el contenedor de inserción de dependencias.
En el archivo program.cs , agregue las siguientes dependencias:
using Microsoft.Extensions.Compliance.Classification;
using Microsoft.Extensions.Compliance.Redaction;
Los paquetes anteriores permiten agregar el servicio de redacción al contenedor de inyección de dependencias con este código:
builder.Services.AddRedaction();
Elección de la implementación de la acción de redacción que se va a usar para cada tipo de datos clasificados
El AddRedactor método puede incluir un RedactorOptions parámetro . El parámetro permite especificar qué implementación de acción de redacción se va a usar para cada taxonomía de datos.
Por ejemplo, el siguiente código especifica que HMACSHA256Redactor se debe usar para datos EUII.
builder.Services.AddRedaction(configure =>
{
// Configure to use the HMAC redactor
configure.SetHmacRedactor(configureHmac =>
{
// This key should be fetched from keyvault or some other secure store.
configureHmac.Key = "thisisadummykeythatshouldbereplacedwithakeyfromakeystore";
// Some discriminator to differentiate between different deployments of a service.
configureHmac.KeyId = 1;
}, new DataClassificationSet(DataClassifications.EUIIDataClassification));
});
Nota:
El algoritmo del redactor HMAC es experimental, por lo que debe deshabilitar la advertencia del compilador si la usa. Rodear el código anterior con #pragma warning disable EXTEXP0002 y #pragma warning restore EXTEXP0002 le permitiría compilar el proyecto.
Puede agregar varias implementaciones de redacción al parámetro RedactorOptions. Por ejemplo, el código siguiente agrega un redactor personalizado para los EUPI datos.
builder.Services.AddRedaction(configure =>
{
// Configure to use the HMAC redactor for EUII data
configure.SetHmacRedactor(configureHmac =>
{
// This key should be fetched from keyvault or some other secure store.
configureHmac.Key = "thisisadummykeythatshouldbereplacedwithakeyfromakeystore";
// Some discriminator to differentiate between different deployments of a service.
configureHmac.KeyId = 1;
}, new DataClassificationSet(DataClassifications.EUIIDataClassification));
// Configure a custom redactor for EUPI data
configure.SetRedactor<EShopCustomRedactor>(new DataClassificationSet(DataClassifications.EUPIDataClassification));
});
Habilite la opción de censurar datos en la plataforma de registro
El siguiente paso es habilitar la censura en la plataforma de registro. Para ello, establezca la propiedad .EnableRedaction en el generador de registros de aplicaciones. Para la aplicación de ejemplo, el código es:
builder.Services.AddLogging(logging =>
{
logging.EnableRedaction();
logging.AddJsonConsole(); //Enable structure logs on the console to view the redacted data.
});
Con el código anterior implementado, puede crear un nuevo registrador que use el servicio de reacción. Implemente un nuevo registrador de LogOrders donde quiera escribir información de pedido en los registros.
public static partial class Log
{
[LoggerMessage(1, LogLevel.Information, "Write the Order data formatted as JSON: {order}")]
public static partial void LogOrders(this ILogger logger, [LogProperties] Order order);
}
Crear una implementación de redacción personalizada
Microsoft le permite crear una implementación de redacción personalizada. Usará una reacción personalizada cuando quiera censurar los datos mediante su propio algoritmo. Vamos a implementar un redactor personalizado que reemplace los datos confidenciales por *****.
Los redactores personalizados deben implementar la Redactor clase . La clase necesita dos métodos implementados:
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;
}
}
En nuestra arquitectura de ejemplo eShopLite , puede agregar esta clase al proyecto DataEntities , en Compliance.cs debajo del código de clasificación de datos.