Unkenntlichmachen vertraulicher Daten in einer cloudnativen Anwendung
Die Unkenntlichmachung innerhalb von Anwendungen wird in der Regel für Protokollmeldungen und Telemetriedaten durchgeführt. Sie kann aber auch in anderen Szenarien verwendet werden. Beispiele wären etwa die Bearbeitung von Dimensionen in Metriken oder von Kopfzeilendaten in Middleware.
Das .NET-Protokollierungsframework bietet eine einfache Möglichkeit für die Unkenntlichmachung von Daten in Protokollmeldungen. Das Microsoft.Extensions.Compliance.Abstractions
-Paket erweitert die Protokollierung, um eine Redactor
-Klasse einzuschließen, die Daten redigiert.
Was ist Unkenntlichmachung?
Bei der Unkenntlichmachung werden vertrauliche Informationen aus einer Meldung entfernt. Sie können z. B. Benutzernamen in einer Protokollnachricht unkenntlich machen – oder die IP-Adresse von Benutzer*innen aus einem Telemetrieereignis.
Die einfachste Unkenntlichmachung besteht darin, den Wert zu löschen und eine leere Zeichenfolge für eine Variable zurückzugeben. Dieses Verhalten tritt standardmäßig auf, da der ErasingRedactor
der standardmäßige Fallback-Redakteur ist. Microsoft enthält eine Klasse vom Typ HMACSHA256Redactor
, die verwendet werden kann, um Daten mithilfe einer Hashfunktion unkenntlich zu machen. Die HMAC-Unkenntlichmachung ist nützlich, wenn Sie Daten redigieren möchten, aber trotzdem Protokollnachrichten über mehrere Protokollanweisungen hinweg korrelieren wollen. Die letzte Option besteht darin, Ihre eigene Funktion für die Unkenntlichmachung bereitzustellen. Dies ist hilfreich, wenn Sie Daten mithilfe eines benutzerdefinierten Algorithmus unkenntlich machen möchten.
Sie wollen es z. B. in den Protokollen deutlicher machen, dass ein Wert unkenntlich gemacht wurde, indem er durch *****
ersetzt wurde.
Unkenntlichmachen vertraulicher Daten in einer cloudnativen Anwendung
Die cloudnative App Ihrer Organisation kann beispielsweise Protokolle schreiben und Telemetriedaten in mehreren Projekten erstellen. Sie kann beispielsweise Protokolle aus dem Datenbankdienst, aus der Web-App oder aus einer beliebigen anderen von ihr verwendeten API schreiben. Je nach Art der Protokollierung muss der Dienst für die Unkenntlichmachung ggf. jedem Element hinzugefügt werden.
Die Aktivierung der Unkenntlichmachung in Ihrer App umfasst vier Schritte:
- Fügen Sie jedem Projekt das NuGet-Paket
Microsoft.Extensions.Compliance.Redaction
hinzu. - Fügen Sie den Dienst für die Unkenntlichmachung dem Abhängigkeitsinjektionscontainer hinzu.
- Wählen Sie die gewünschte Unkenntlichmachungsimplementierung für die einzelnen Arten von klassifizierten Daten aus.
- Aktivieren Sie die Unkenntlichmachung im Protokollierungsframework.
Hinzufügen des Diensts für die Unkenntlichmachung zum Abhängigkeitsinjektionscontainer
Das folgende Beispiel bezieht sich auf eine Blazor WebAssembly-App. Der Prozess ist für andere Arten von Apps ähnlich, der Code unterscheidet sich jedoch geringfügig (je nach Konfiguration des Abhängigkeitsinjektionscontainers).
Fügen Sie in der Datei program.cs die folgenden Abhängigkeiten hinzu:
using Microsoft.Extensions.Compliance.Classification;
using Microsoft.Extensions.Compliance.Redaction;
Mit den obigen Paketen können Sie dann den Dienst für die Unkenntlichmachung mithilfe des folgenden Codes dem Abhängigkeitsinjektionscontainer hinzufügen:
builder.Services.AddRedaction();
Auswählen der gewünschten Unkenntlichmachungsimplementierung für die einzelnen Arten von klassifizierten Daten
Die Methode AddRedactor
kann einen Parameter vom Typ RedactorOptions
enthalten. Mit dem Parameter können Sie angeben, welche Unkenntlichmachungsimplementierung für die jeweilige Datentaxonomie verwendet werden soll.
Der folgende Code gibt beispielsweise an, dass HMACSHA256Redactor
für Daten vom Typ EUII
verwendet werden soll.
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));
});
Hinweis
Der HMAC-Algorithmus für die Unkenntlichmachung ist experimentell. Daher müssen Sie die Compilerwarnung deaktivieren, wenn Sie ihn verwenden. Wenn Sie den obigen Code in #pragma warning disable EXTEXP0002
und #pragma warning restore EXTEXP0002
einschließen, können Sie Ihr Projekt kompilieren.
Dem Parameter RedactorOptions
können mehrere Unkenntlichmachungsimplementierungen hinzugefügt werden. Der folgende Code fügt beispielsweise eine benutzerdefinierte Unkenntlichmachung für Daten vom Typ EUPI
hinzu.
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));
});
Aktivieren der Unkenntlichmachung im Protokollierungsframework
Im nächsten Schritt muss die Unkenntlichmachung im Protokollierungsframework aktiviert werden. Hierzu wird die Eigenschaft .EnableRedaction
auf den Protokollierungsgenerator Ihrer Anwendungen festgelegt. Für die Beispiel-App lautet der Code wie folgt:
builder.Services.AddLogging(logging =>
{
logging.EnableRedaction();
logging.AddJsonConsole(); //Enable structure logs on the console to view the redacted data.
});
Wenn der obige Code vorhanden ist, können Sie eine neue Protokollierung erstellen, die den Dienst für die Unkenntlichmachung verwendet. Implementieren Sie eine neue Protokollierung vom Typ LogOrders
überall dort, wo Bestellinformationen in die Protokolle geschrieben werden.
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);
}
Erstellen einer benutzerdefinierten Unkenntlichmachungsimplementierung
Microsoft ermöglicht die Erstellung einer benutzerdefinierten Unkenntlichmachungsimplementierung. Eine benutzerdefinierte Unkenntlichmachungsimplementierung kann verwendet werden, wenn Sie Daten mithilfe Ihres eigenen Algorithmus unkenntlich machen möchten. Implementieren wir eine benutzerdefinierte Unkenntlichmachung, die vertrauliche Daten durch *****
ersetzt.
Benutzerdefinierte Unkenntlichmachungen müssen die Klasse Redactor
implementieren. Für die Klasse müssen zwei Methoden implementiert werden:
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;
}
}
In unserer exemplarischen eShopLite-Architektur können Sie diese Klasse dem Projekt DataEntities in Compliance.cs unterhalb des Datenklassifizierungscodes hinzufügen.