Unkenntlichmachen vertraulicher Daten in einer cloudnativen Anwendung
Die Redaction innerhalb von Anwendungen erfolgt am häufigsten bei Protokollnachrichten und Telemetrie. Sie kann auch in anderen Szenarien verwendet werden, z. B. das Schwärzen von Dimensionen in Metriken oder Header-Daten in Middleware.
Das .NET-Protokollierungsframework bietet eine einfache Möglichkeit zum Redactieren von Daten in Protokollnachrichten. Das Microsoft.Extensions.Compliance.Abstractions
Paket verbessert die Protokollierung, um eine Redactor
Klasse einzuschließen, die Daten redagiert.
Was ist Redaction?
Redaction ist der Vorgang, vertrauliche Informationen aus einer Nachricht zu entfernen. Sie können z. B. den Namen eines Benutzers aus einer Protokollnachricht redigieren. Oder Sie möchten die IP-Adresse eines Benutzers aus einem Telemetrieereignis anonymisieren.
Die einfachste Redaction 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
Standardmäßige Fallback-Redactor ist. Microsoft enthält eine HMACSHA256Redactor
Klasse, die zum Redactieren von Daten mithilfe einer Hashfunktion verwendet werden kann. Die HMAC-Redaktion ist nützlich, wenn Sie Daten redigieren möchten, aber trotzdem Protokollnachrichten über mehrere Protokolleinträge korrelieren können. Die letzte Option besteht darin, Ihre eigene Redaction-Funktion bereitzustellen, was nützlich ist, wenn Sie Daten mithilfe eines benutzerdefinierten Algorithmus redigieren möchten.
Sie möchten z. B. in den Protokollen deutlicher machen, dass ein Wert redigiert ist, indem Sie ihn ersetzen durch *****
.
So redigieren Sie Daten in einer Cloud-nativen Anwendung
Ihre Cloud-native App ihrer Organisation könnte Protokolle schreiben und Telemetrie in mehreren Projekten erstellen. Beispielsweise könnte es sich um das Schreiben von Protokollen aus dem Datenbankdienst, der Web-App oder einer anderen API handeln, die verwendet wird. Je nach Art der Protokollierung muss der Dienst für die Unkenntlichmachung ggf. jedem Element hinzugefügt werden.
Es gibt vier Schritte, die Sie ausführen müssen, um Die Redaction in Ihrer App zu aktivieren:
- Hinzufügen des
Microsoft.Extensions.Compliance.Redaction
-NuGet-Pakets zu Ihrem Projekt. - Fügen Sie den Redaction-Dienst zum Container zum Einfügen von Abhängigkeiten hinzu.
- Wählen Sie aus, welche Redaction-Implementierung für jeden Typ von klassifizierten Daten verwendet werden soll.
- Aktivieren Sie die Unkenntlichmachung im Protokollierungsframework.
Hinzufügen des Diensts für die Unkenntlichmachung zum Abhängigkeitsinjektionscontainer
Das folgende Beispiel ist für eine Blazor WebAssembly-App vorgesehen. Der Prozess ist für andere Arten von Apps ähnlich, der Code unterscheidet sich jedoch geringfügig von der Konfiguration des Abhängigkeitseinfügungscontainers.
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 Redaction-Dienst dem Container zum Einfügen von Abhängigkeiten mit diesem Code hinzufügen:
builder.Services.AddRedaction();
Wählen Sie aus, welche Redaction-Implementierung für jeden Typ von klassifizierten Daten verwendet werden soll.
Die AddRedactor
Methode kann einen RedactorOptions
Parameter enthalten. Mit dem Parameter können Sie angeben, welche Redaction-Implementierung für jede Datentaxonomie verwendet werden soll.
Beispielsweise gibt der folgende Code an, dass HMACSHA256Redactor
für EUII
Daten 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-Redactoralgorithmus ist experimentell, sodass Sie die Compilerwarnung deaktivieren müssen, wenn Sie ihn verwenden. Wenn Sie den obigen Code mit #pragma warning disable EXTEXP0002
und #pragma warning restore EXTEXP0002
umgeben, können Sie Ihr Projekt kompilieren.
Sie können dem RedactorOptions
Parameter mehrere Redaction-Implementierungen hinzufügen. Der folgende Code fügt beispielsweise einen benutzerdefinierten Editor für EUPI
Daten 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 Redaktion im Protokollierungsframework
Der nächste Schritt besteht darin, die Redaction im Protokollierungsframework zu aktivieren. Dies geschieht, indem Sie die Eigenschaft .EnableRedaction
auf den Protokollierungsgenerator Ihrer Anwendungen festlegen. Für die Beispiel-App lautet der Code:
builder.Services.AddLogging(logging =>
{
logging.EnableRedaction();
logging.AddJsonConsole(); //Enable structure logs on the console to view the redacted data.
});
Mit dem obigen Code können Sie einen neuen Logger erstellen, der den Redaktionsdienst verwendet. Implementieren Sie einen neuen LogOrders
Logger an der Stelle, an der Sie Bestellinformationen in die Protokolle schreiben möchten.
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 Redaction-Implementierung
Mit Microsoft können Sie eine benutzerdefinierte Redaction-Implementierung erstellen. Sie verwenden eine benutzerdefinierte Schwärzung, wenn Sie Daten mithilfe Ihres eigenen Algorithmus redigieren möchten. Lassen Sie uns einen benutzerdefinierten Redactor implementieren, der vertrauliche Daten durch *****
ersetzt.
Kundenspezifische Redakteure müssen die Klasse Redactor
implementieren. Die Klasse benötigt zwei implementierte Methoden:
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 Beispielarchitektur eShopLite können Sie diese Klasse in Compliance.cs unterhalb des Datenklassifizierungscodes dem DataEntities-Projekt hinzufügen.