Censura de datos confidenciales en una aplicación nativa en la nube
Se suele censurar información dentro de aplicaciones en los mensajes de registro y la telemetría. También se puede usar en otros escenarios, como censurar dimensiones en métricas o datos de encabezado en middleware.
La plataforma 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 censurar datos?
Censurar datos es el proceso de quitar información confidencial de un mensaje. Un ejemplo de uso es censurar 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 forma más sencilla de censurar información 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 clase HMACSHA256Redactor
que se puede usar para censurar datos mediante una función hash. La redacción de HMAC es útil si desea redactar datos, pero puede seguir correlacionando los mensajes de registro a través de varias instrucciones de registro. La última opción es proporcionar su propia función para censurar datos. Esto es útil si desea utilizar un algoritmo personalizado.
Por ejemplo, si desea que quede más claro en los registros que un valor está redactado, sustitúyalo por *****
.
Cómo censurar datos en una aplicación nativa en 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 censura a cada uno.
Hay cuatro pasos que debe seguir para poder censurar datos en la aplicación:
- Agregue el paquete NuGet
Microsoft.Extensions.Compliance.Redaction
a cada proyecto. - Agregue el servicio de censurar datos al contenedor de inserción de dependencias.
- Elija la implementación de la acción de censurar datos 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 le permiten agregar el servicio de censura al contenedor de inserción de dependencias con este código:
builder.Services.AddRedaction();
Elija la implementación de la acción de censurar datos que se usará para cada tipo de datos clasificados
El método AddRedactor
puede incluir un parámetro RedactorOptions
. El parámetro permite especificar qué implementación de acción de censura se va a usar para cada taxonomía de datos.
Por ejemplo, el código siguiente especifica que HMACSHA256Redactor
se debe usar para los 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 de censura de HMAC es experimental, por lo que debe deshabilitar la advertencia del compilador si lo usa. Rodear el código anterior con #pragma warning disable EXTEXP0002
y #pragma warning restore EXTEXP0002
le permitirá compilar el proyecto.
Puede agregar varias implementaciones de censura al parámetro RedactorOptions
. Por ejemplo, el código siguiente agrega un censor personalizado para los datos EUPI
.
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 censura. Implemente un nuevo registrador 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);
}
Creación de una implementación de censura personalizada
Microsoft le permite crear una implementación de censura personalizada. Puede usar una censura personalizada cuando quiera censurar los datos mediante su propio algoritmo. Vamos a implementar un censor personalizado que reemplace los datos confidenciales por *****
.
Los censores personalizados deben implementar la clase Redactor
. 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.