Упражнение. Изменение конфиденциальных данных в облачных приложениях

Завершено

Необходимо добавить в процесс заказа некоторые журналы. Вы будете использовать функции редактирования .NET, чтобы убедиться, что конфиденциальные данные не просочились в журналы.

В этом упражнении вы выполните следующие действия.

  • Microsoft.Extensions.Compliance.Redaction Добавьте пакет NuGet в каждый проект.
  • Добавьте службу redaction в контейнер внедрения зависимостей.
  • Включите редактирование в платформе ведения журнала.
  • Вызовите платформу ведения журнала во время процесса заказа.
  • Добавьте пользовательскую реализацию редактирования для данных EUII.
  • Выберите, какую реализацию редакта следует использовать для каждого типа классифицированных данных.

Добавление службы редакта

У вас по-прежнему должно быть открыто пространство кода или окно Visual Studio Code. Если нет, откройте его сейчас.

  1. В окне терминала введите следующую команду:

    cd /workspaces/mslearn-dotnet-cloudnative/dotnet-compliance/eShopLite/Store/
    
  2. Microsoft.Extensions.Compliance.Redaction Добавьте пакет NuGet в проект:

    dotnet add package Microsoft.Extensions.Compliance.Redaction
    
  3. В области обозревателя разверните папку dotnet-compliance/eShopLite/Store, а затем выберите файл Program.cs.

  4. В редакторе добавьте следующие зависимости:

    using Microsoft.Extensions.Compliance.Classification;
    using Microsoft.Extensions.Compliance.Redaction;
    
  5. Прокрутите вниз до строки 19, в разделе Add redaction комментария добавьте службу redaction в контейнер внедрения зависимостей:

    builder.Services.AddRedaction();
    

Включение редакта в платформе ведения журнала

  1. В редакторе добавьте этот код под строкой AddRedaction() :

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

    Приведенный выше код обеспечивает редактирование в платформе ведения журнала.

Вызов платформы ведения журнала во время процесса заказа

  1. В области обозревателя разверните папку dotnet-compliance/eShopLite/Store/Services, а затем выберите файл ProductService.cs.

  2. В редакторе в нижней части файла добавьте следующий код:

    public static partial class Log
    {
        [LoggerMessage(1, LogLevel.Information, "Placed Order: {order}")]
        public static partial void LogOrders(this ILogger logger, [LogProperties] Order order);
    }
    
  3. В редакторе CreateOrder в задаче вызовите LogOrders метод:

    public async Task<bool> CreateOrder(Order order)
    {
        try
        {
            _logger.LogOrders(order);
    

    Приведенный LogOrders выше код вызывает метод и передает ему текущие сведения о заказе.

Проверка нового ведения журнала с изменением

При использовании всего приведенного выше кода приложение может использовать реализацию по умолчанию для редактирования Order информации. Теперь вы протестируете это.

  1. В области терминала в нижней части экрана перейдите в папку dotnet-compliance/eShopLite.

    cd ..
    
  2. Обновите контейнеры приложений.

    dotnet publish /p:PublishProfile=DefaultContainer 
    
  3. Перейдите в папку dotnet-compliance и запустите приложение с помощью Docker:

    cd ..
    docker compose up
    
  4. Перейдите на вкладку "ПОРТЫ", а затем щелкните значок "Открыть в браузере" для порта переднего плана (32000).

  5. Выберите ссылку " Продукты ". Добавьте некоторые продукты в корзину покупок.

  6. Нажмите кнопку "Купить корзину ".

  7. В окне терминала нажмите клавиши 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 реализацию, чтобы не утечка конфиденциальных данных в журналы.

  8. В окне терминала нажмите клавиши CTRL+C, чтобы остановить приложение.

Добавление пользовательской реализации редакта

Теперь вы улучшите реализацию редактирования для использования различных алгоритмов редактирования для различных типов данных. Сначала вы добавите новую пользовательскую реализацию редакта, которая заменяет значение *****.

  1. В области обозревателя разверните папку dotnet-compliance/eShopLite/DataEntities, а затем выберите файл Compliance.cs.

  2. В редакторе в нижней части файла добавьте следующий код:

    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 выше код делает метод редактирования доступным для обработчика редактирования.

Выбор используемой реализации редакта

  1. В области обозревателя разверните папку dotnet-compliance/eShopLite/Store, а затем выберите файл Program.cs.

  2. Замените 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.

Тестирование новой реализации редакта

  1. В окне терминала выполните сборку и запустите приложение:

    docker-compose up --build
    
  2. Перейдите на вкладку "ПОРТЫ", а затем щелкните значок "Открыть в браузере" для порта переднего плана (32000).

  3. Выберите ссылку " Продукты ". Добавьте некоторые продукты в корзину покупок.

  4. Нажмите кнопку "Купить корзину ".

  5. В окне терминала нажмите клавиши 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 теперь *****.

  6. В окне терминала нажмите клавиши CTRL+C, чтобы остановить приложение.