Изменение конфиденциальных данных в облачном приложении
Редактизация в приложениях чаще всего выполняется в сообщениях журнала и телеметрии. Его также можно использовать в других сценариях, таких как изменение измерений в метриках или данных заголовка в ПО промежуточного слоя.
Платформа ведения журнала .NET предоставляет простой способ редактирования данных в сообщениях журнала. Пакет Microsoft.Extensions.Compliance.Abstractions
улучшает ведение журнала, чтобы включить Redactor
класс, который редактирует данные.
Что такое редакт?
Redaction — это процесс удаления конфиденциальной информации из сообщения. Например, может потребоваться изменить имя пользователя из сообщения журнала. Или вы можете изменить IP-адрес пользователя из события телеметрии.
Самое простое редактирование — удалить значение и вернуть пустую строку для переменной. Это поведение происходит по умолчанию, так как ErasingRedactor
по умолчанию используется резервный редактор. Корпорация Майкрософт включает HMACSHA256Redactor
класс, который можно использовать для редактирования данных с помощью хэш-функции. Редактировка HMAC полезна, если вы хотите изменить данные, но по-прежнему сможете сопоставлять сообщения журнала между несколькими операторами журнала. Последний вариант — предоставить собственную функцию редактирования, которая полезна, если вы хотите изменить данные с помощью пользовательского алгоритма.
Например, вы хотите сделать его более понятным в журналах, которые значение редактируется, заменив его *****
на .
Как изменить данные в облачном приложении
Ваше облачное приложение организации может создавать журналы и создавать данные телеметрии в нескольких проектах. Например, это может быть запись журналов из службы базы данных, веб-приложения или любого другого API, который он использует. В зависимости от типа ведения журнала необходимо добавить службу редактирования в каждую из них.
Для включения редакта в приложении необходимо выполнить четыре шага.
Microsoft.Extensions.Compliance.Redaction
Добавьте пакет NuGet в каждый проект.- Добавьте службу redaction в контейнер внедрения зависимостей.
- Выберите, какую реализацию редакта следует использовать для каждого типа классифицированных данных.
- Включите редактирование в платформе ведения журнала.
Добавление службы редакта в контейнер внедрения зависимостей
В следующем примере используется приложение Blazor WebAssembly. Процесс аналогичен другим типам приложений, но код немного отличается в зависимости от того, как настроен контейнер внедрения зависимостей.
В файле program.cs добавьте следующие зависимости:
using Microsoft.Extensions.Compliance.Classification;
using Microsoft.Extensions.Compliance.Redaction;
Приведенные выше пакеты позволяют добавить службу редакта в контейнер внедрения зависимостей с помощью этого кода:
builder.Services.AddRedaction();
Выбор реализации редактации для каждого типа классифицированных данных
Метод AddRedactor
может включать RedactorOptions
параметр. Этот параметр позволяет указать, какую реализацию редакта следует использовать для каждой таксономии данных.
Например, следующий код указывает, что HMACSHA256Redactor
он должен использоваться для 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));
});
Примечание.
Алгоритм редактора HMAC является экспериментальным, поэтому при его использовании необходимо отключить предупреждение компилятора. Вокруг приведенного выше кода можно #pragma warning disable EXTEXP0002
#pragma warning restore EXTEXP0002
скомпилировать проект.
В параметр можно добавить несколько реализаций RedactorOptions
редактирования. Например, следующий код добавляет пользовательский редактор для 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));
});
Включение редактирования в платформе ведения журнала
Следующий шаг — включить редактирование в платформе ведения журнала. Это делается путем задания свойства генератору .EnableRedaction
журналов приложений. Пример приложения:
builder.Services.AddLogging(logging =>
{
logging.EnableRedaction();
logging.AddJsonConsole(); //Enable structure logs on the console to view the redacted data.
});
Используя приведенный выше код, вы можете создать новый средство ведения журнала, использующее службу redaction. Реализуйте новый LogOrders
средство ведения журнала, где вы хотите написать сведения о заказе в журналы.
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);
}
Создание пользовательской реализации редакта
Корпорация Майкрософт позволяет создавать пользовательскую реализацию редакта. Вы будете использовать настраиваемую редактировку, если вы хотите изменить данные с помощью собственного алгоритма. Давайте реализуем пользовательский редактор, заменяющий конфиденциальные данные *****
.
Пользовательские красные субъекты должны реализовать Redactor
класс. Классу требуются два метода:
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;
}
}
В нашем примере eShopLite архитектуры этот класс можно добавить в проект DataEntities в файле Compliance.cs под кодом классификации данных.