클라우드 네이티브 애플리케이션에서 중요한 데이터 수정

완료됨

애플리케이션 내에서 수정은 로그 메시지 및 원격 분석에서 가장 일반적으로 수행됩니다. 메트릭의 차원 수정 또는 미들웨어의 헤더 데이터와 같은 다른 시나리오에서도 사용할 수 있습니다.

.NET 로깅 프레임워크는 로그 메시지에서 데이터를 수정하는 간단한 방법을 제공합니다. 이 패키지는 Microsoft.Extensions.Compliance.Abstractions 데이터를 수정하는 클래스를 Redactor 포함하도록 로깅을 향상시킵니다.

수정이란?

수정은 메시지에서 중요한 정보를 제거하는 프로세스입니다. 예를 들어 로그 메시지에서 사용자의 이름을 수정할 수 있습니다. 또는 원격 분석 이벤트에서 사용자의 IP 주소를 수정할 수 있습니다.

가장 간단한 편집은 값을 지우고 변수에 대해 빈 문자열을 반환하는 것입니다. 이 동작은 기본 대체 다시 작성기이므로 기본적으로 ErasingRedactor 발생합니다. Microsoft에는 해시 함수를 HMACSHA256Redactor 사용하여 데이터를 수정하는 데 사용할 수 있는 클래스가 포함되어 있습니다. HMAC 편집은 데이터를 수정하려는 경우에도 여러 로그 문 간에 로그 메시지의 상관 관계를 지정할 수 있는 경우에 유용합니다. 마지막 옵션은 사용자 지정 알고리즘을 사용하여 데이터를 수정하려는 경우에 유용한 고유한 편집 함수를 제공하는 것입니다.

예를 들어 값을 .로 바꿔서 수정된 값을 로그에서 더 명확하게 만들려고 합니다 *****.

클라우드 네이티브 애플리케이션에서 데이터를 수정하는 방법

조직 클라우드 네이티브 앱은 로그를 작성하고 여러 프로젝트에서 원격 분석을 만들 수 있습니다. 예를 들어 데이터베이스 서비스, 웹앱 또는 사용하는 다른 API에서 로그를 작성할 수 있습니다. 로깅 유형에 따라 각 로깅 서비스에 편집 서비스를 추가해야 합니다.

앱에서 수정을 사용하도록 설정하기 위해 수행해야 하는 네 가지 단계가 있습니다.

  1. Microsoft.Extensions.Compliance.Redaction 각 프로젝트에 NuGet 패키지를 추가합니다.
  2. 종속성 주입 컨테이너에 편집 서비스를 추가합니다.
  3. 분류된 데이터의 각 형식에 사용할 편집 구현을 선택합니다.
  4. 로깅 프레임워크에서 수정을 사용하도록 설정합니다.

종속성 주입 컨테이너에 편집 서비스 추가

다음 예제는 Blazor WebAssembly 앱에 대한 것입니다. 프로세스는 다른 유형의 앱과 유사하지만 종속성 주입 컨테이너가 구성된 방법에 따라 코드가 약간 다릅니다.

program.cs 파일에서 다음 종속성을 추가합니다.

using Microsoft.Extensions.Compliance.Classification;
using Microsoft.Extensions.Compliance.Redaction;

위의 패키지를 사용하면 다음 코드를 사용하여 종속성 주입 컨테이너에 편집 서비스를 추가할 수 있습니다.

builder.Services.AddRedaction();

분류된 데이터의 각 형식에 사용할 편집 구현 선택

메서드는 AddRedactor 매개 변수를 포함할 RedactorOptions 수 있습니다. 매개 변수를 사용하면 각 데이터 분류에 사용할 편집 구현을 지정할 수 있습니다.

예를 들어 다음 코드는 데이터에 사용해야 EUII 한다고 HMACSHA256Redactor 지정합니다.

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.
});

위의 코드를 사용하면 편집 서비스를 사용하는 새 로거를 만들 수 있습니다. 로그에 주문 정보를 쓰려는 위치에 새 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);
}

사용자 지정 수정 구현 만들기

Microsoft에서는 사용자 지정 수정 구현을 만들 수 있습니다. 사용자 고유의 알고리즘을 사용하여 데이터를 수정하려는 경우 사용자 지정 편집을 사용합니다. 중요한 데이터를 *****.으로 대체하는 사용자 지정 재배포자를 구현해 보겠습니다.

사용자 지정 편집기는 클래스를 구현 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 아키텍처에서는 데이터 분류 코드 아래의 Compliance.cs에서 DataEntities 프로젝트에 이 클래스를 추가할 수 있습니다.