Redact sensitive data in a cloud-native application (Redact sensitive data in a cloud-native application)

Completato

La ridistribuzione all'interno delle applicazioni viene eseguita più comunemente nei messaggi di log e nei dati di telemetria. Può essere usato anche in altri scenari, ad esempio la modifica delle dimensioni in Metriche o i dati di intestazione nel middleware.

Il framework di registrazione .NET offre un modo semplice per redigire i dati nei messaggi di log. Il Microsoft.Extensions.Compliance.Abstractions pacchetto migliora la registrazione per includere una Redactor classe che redattiva i dati.

Che cos'è la redaction?

La ridistribuzione è il processo di rimozione di informazioni riservate da un messaggio. Ad esempio, potrebbe essere necessario redigire il nome di un utente da un messaggio di log. In alternativa, è possibile redigire l'indirizzo IP di un utente da un evento di telemetria.

La procedura più semplice consiste nel cancellare il valore e restituire una stringa vuota per una variabile. Questo comportamento si verifica per impostazione predefinita perché è il ErasingRedactor rollback di fallback predefinito. Microsoft include una HMACSHA256Redactor classe che può essere usata per redact dei dati usando una funzione hash. La ridistribuzione HMAC è utile se si vogliono redistribuire i dati, ma è comunque possibile correlare i messaggi di log tra più istruzioni di log. L'ultima opzione consiste nel fornire una funzione di redaction personalizzata, utile se si vogliono redigire i dati usando un algoritmo personalizzato.

Ad esempio, si vuole rendere più chiaro nei log che un valore viene modificato sostituendolo con *****.

Come redigire i dati in un'applicazione nativa del cloud

L'app nativa del cloud dell'organizzazione potrebbe scrivere log e creare dati di telemetria in più progetti. Ad esempio, potrebbe scrivere log dal servizio di database, dall'app Web o da qualsiasi altra API usata. A seconda del tipo di registrazione, è necessario aggiungere il servizio di rollforward a ognuno di essi.

È necessario eseguire quattro passaggi per abilitare l'approvazione nell'app:

  1. Aggiungere il Microsoft.Extensions.Compliance.Redaction pacchetto NuGet a ogni progetto.
  2. Aggiungere il servizio di rollforward al contenitore di inserimento delle dipendenze.
  3. Scegliere l'implementazione di redaction da usare per ogni tipo di dati classificati.
  4. Abilitare la ridistribuzione nel framework di registrazione.

Aggiungere il servizio di rollforward al contenitore Dependency Injection

L'esempio seguente è relativo a un'app WebAssembly Blazor. Il processo è simile per altri tipi di app, ma il codice è leggermente diverso a seconda della configurazione del contenitore di inserimento delle dipendenze.

Nel file program.cs aggiungere le dipendenze seguenti:

using Microsoft.Extensions.Compliance.Classification;
using Microsoft.Extensions.Compliance.Redaction;

I pacchetti precedenti consentono di aggiungere quindi il servizio di rollforward al contenitore di inserimento delle dipendenze con questo codice:

builder.Services.AddRedaction();

Scegliere l'implementazione di redaction da usare per ogni tipo di dati classificati

Il AddRedactor metodo può includere un RedactorOptions parametro. Il parametro consente di specificare l'implementazione dell'applicazione da usare per ogni tassonomia dei dati.

Ad esempio, il codice seguente specifica che deve essere usato per EUII i HMACSHA256Redactor dati.

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

L'algoritmo di redactor HMAC è sperimentale, quindi è necessario disabilitare l'avviso del compilatore se lo si usa. Circondare il codice precedente con #pragma warning disable EXTEXP0002 e #pragma warning restore EXTEXP0002 consente di compilare il progetto.

È possibile aggiungere più implementazioni di rollforward al RedactorOptions parametro . Ad esempio, il codice seguente aggiunge un redactor personalizzato per i EUPI dati.

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

Abilitare la ridistribuzione nel framework di registrazione

Il passaggio successivo consiste nell'abilitare l'approvazione nel framework di registrazione. Questa operazione viene eseguita impostando la .EnableRedaction proprietà sul generatore di registrazione delle applicazioni. Per l'app di esempio, il codice è:

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

Con il codice precedente, è possibile creare un nuovo logger che usa il servizio di rollforward. Implementare un nuovo LogOrders logger ovunque si desideri scrivere le informazioni sugli ordini nei log.

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

Creare un'implementazione personalizzata dell'applicazione

Microsoft consente di creare un'implementazione di redaction personalizzata. Si userà un'operazione personalizzata quando si vogliono redigire i dati usando il proprio algoritmo. Verrà ora implementato un redactor personalizzato che sostituisce i dati sensibili con *****.

I redactor personalizzati devono implementare la Redactor classe . La classe richiede due metodi implementati:

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

Nell'architettura di esempio eShopLite è possibile aggiungere questa classe al progetto DataEntities , in Compliance.cs sotto il codice di classificazione dei dati.