Упражнение. Изменение конфиденциальных данных в облачных приложениях
Необходимо добавить в процесс заказа некоторые журналы. Вы будете использовать функции редактирования .NET, чтобы убедиться, что конфиденциальные данные не просочились в журналы.
В этом упражнении вы выполните следующие действия.
Microsoft.Extensions.Compliance.Redaction
Добавьте пакет NuGet в каждый проект.- Добавьте службу redaction в контейнер внедрения зависимостей.
- Включите редактирование в платформе ведения журнала.
- Вызовите платформу ведения журнала во время процесса заказа.
- Добавьте пользовательскую реализацию редактирования для данных EUII.
- Выберите, какую реализацию редакта следует использовать для каждого типа классифицированных данных.
Добавление службы редакта
У вас по-прежнему должно быть открыто пространство кода или окно Visual Studio Code. Если нет, откройте его сейчас.
В окне терминала введите следующую команду:
cd /workspaces/mslearn-dotnet-cloudnative/dotnet-compliance/eShopLite/Store/
Microsoft.Extensions.Compliance.Redaction
Добавьте пакет NuGet в проект:dotnet add package Microsoft.Extensions.Compliance.Redaction
В области обозревателя разверните папку dotnet-compliance/eShopLite/Store, а затем выберите файл Program.cs.
В редакторе добавьте следующие зависимости:
using Microsoft.Extensions.Compliance.Classification; using Microsoft.Extensions.Compliance.Redaction;
Прокрутите вниз до строки 19, в разделе
Add redaction
комментария добавьте службу redaction в контейнер внедрения зависимостей:builder.Services.AddRedaction();
Включение редакта в платформе ведения журнала
В редакторе добавьте этот код под строкой
AddRedaction()
:builder.Services.AddLogging(logging => { logging.EnableRedaction(); logging.AddJsonConsole(); //Enable structure logs on the console to view the redacted data. });
Приведенный выше код обеспечивает редактирование в платформе ведения журнала.
Вызов платформы ведения журнала во время процесса заказа
В области обозревателя разверните папку dotnet-compliance/eShopLite/Store/Services, а затем выберите файл ProductService.cs.
В редакторе в нижней части файла добавьте следующий код:
public static partial class Log { [LoggerMessage(1, LogLevel.Information, "Placed Order: {order}")] public static partial void LogOrders(this ILogger logger, [LogProperties] Order order); }
В редакторе
CreateOrder
в задаче вызовитеLogOrders
метод:public async Task<bool> CreateOrder(Order order) { try { _logger.LogOrders(order);
Приведенный
LogOrders
выше код вызывает метод и передает ему текущие сведения о заказе.
Проверка нового ведения журнала с изменением
При использовании всего приведенного выше кода приложение может использовать реализацию по умолчанию для редактирования Order
информации. Теперь вы протестируете это.
В области терминала в нижней части экрана перейдите в папку dotnet-compliance/eShopLite.
cd ..
Обновите контейнеры приложений.
dotnet publish /p:PublishProfile=DefaultContainer
Перейдите в папку dotnet-compliance и запустите приложение с помощью Docker:
cd .. docker compose up
Перейдите на вкладку "ПОРТЫ", а затем щелкните значок "Открыть в браузере" для порта переднего плана (32000).
Выберите ссылку " Продукты ". Добавьте некоторые продукты в корзину покупок.
Нажмите кнопку "Купить корзину ".
В окне терминала нажмите клавиши CTRL+F, в поле поиска введите EventId:1.
frontend-1 | {"EventId":1,"LogLevel":"Information","Category":"Store.Services.ProductService","Message":"Placed Order: DataEntities.Order","State":{"Message":"Microsoft.Extensions.Logging.ExtendedLogger\u002BModernTagJoiner","{OriginalFormat}":"Placed Order: {order}","order.Total":209.94,"order.Products":"[\u0022DataEntities.Product\u0022,\u0022DataEntities.Product\u0022,\u0022DataEntities.Product\u0022,\u0022DataEntities.Product\u0022,\u0022DataEntities.Product\u0022,\u0022DataEntities.Product\u0022]","order":"DataEntities.Order","order.CustomerAddress":"","order.CustomerName":"","order.Id":""}}
Вы увидите эту запись в формате JSON. Обратите внимание, что заказ. Общее значение в журналах, но значения CustomerName и CustomerAddress являются пустыми строками.
По умолчанию, если вы не указываете реализацию редактирования, обработчик redaction будет использовать
ErasingRedactor
реализацию, чтобы не утечка конфиденциальных данных в журналы.В окне терминала нажмите клавиши CTRL+C, чтобы остановить приложение.
Добавление пользовательской реализации редакта
Теперь вы улучшите реализацию редактирования для использования различных алгоритмов редактирования для различных типов данных. Сначала вы добавите новую пользовательскую реализацию редакта, которая заменяет значение *****
.
В области обозревателя разверните папку dotnet-compliance/eShopLite/DataEntities, а затем выберите файл Compliance.cs.
В редакторе в нижней части файла добавьте следующий код:
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; } }
Приведенный
EShopCustomRedactor
выше код делает метод редактирования доступным для обработчика редактирования.
Выбор используемой реализации редакта
В области обозревателя разверните папку dotnet-compliance/eShopLite/Store, а затем выберите файл Program.cs.
Замените
builder.Services.AddRedaction();
код, чтобы обеспечить конфигурацию для обработчика редактирования:builder.Services.AddRedaction(configure => { configure.SetRedactor<ErasingRedactor>(new DataClassificationSet(DataClassifications.EUPDataClassification)); configure.SetRedactor<EShopCustomRedactor>(new DataClassificationSet(DataClassifications.EUIIDataClassification)); });
Приведенный выше код настраивает подсистему redaction для конкретного использования
ErasingRedactor
реализации для данных EUP и новой пользовательскойEShopCustomRedactor
реализации для данных EUII.
Тестирование новой реализации редакта
В окне терминала выполните сборку и запустите приложение:
docker-compose up --build
Перейдите на вкладку "ПОРТЫ", а затем щелкните значок "Открыть в браузере" для порта переднего плана (32000).
Выберите ссылку " Продукты ". Добавьте некоторые продукты в корзину покупок.
Нажмите кнопку "Купить корзину ".
В окне терминала нажмите клавиши CTRL+F, в поле поиска введите EventId:1.
frontend-1 | {"EventId":1,"LogLevel":"Information","Category":"Store.Services.ProductService","Message":"Placed Order: DataEntities.Order","State":{"Message":"Microsoft.Extensions.Logging.ExtendedLogger\u002BModernTagJoiner","{OriginalFormat}":"Placed Order: {order}","order.Total":269.88,"order.Products":"[\u0022DataEntities.Product\u0022,\u0022DataEntities.Product\u0022,\u0022DataEntities.Product\u0022,\u0022DataEntities.Product\u0022,\u0022DataEntities.Product\u0022,\u0022DataEntities.Product\u0022,\u0022DataEntities.Product\u0022,\u0022DataEntities.Product\u0022,\u0022DataEntities.Product\u0022,\u0022DataEntities.Product\u0022,\u0022DataEntities.Product\u0022,\u0022DataEntities.Product\u0022]","order":"DataEntities.Order","order.CustomerAddress":"*****","order.CustomerName":"*****","order.Id":""}}
Вы увидите эту запись в формате JSON. Обратите внимание, что заказ. Значение идентификатора по-прежнему является пустой строкой, но значения CustomerName и CustomerAddress теперь
*****.
В окне терминала нажмите клавиши CTRL+C, чтобы остановить приложение.