Bagikan melalui


Redaksi data di .NET

Redaksi membantu Anda membersihkan atau menutupi informasi sensitif dalam log, pesan kesalahan, atau output lainnya. Ini membuat Anda mematuhi aturan privasi dan melindungi data sensitif. Ini berguna dalam aplikasi yang menangani data pribadi, informasi keuangan, atau poin data rahasia lainnya.

Menginstal paket redaksi dokumen

Untuk memulai, instal paket 📦 Microsoft.Extensions.Compliance.Redaction NuGet:

dotnet add package Microsoft.Extensions.Compliance.Redaction

Atau, jika Anda menggunakan .NET 10+ SDK:

dotnet package add Microsoft.Extensions.Compliance.Redaction

Editor yang tersedia

Penyunting bertanggung jawab atas tindakan menyunting data sensitif. Mereka meredaksi, mengganti, atau menutupi informasi sensitif. Pertimbangkan pengolah yang tersedia berikut ini yang disediakan oleh pustaka:

  • ErasingRedactor mengganti input apa pun dengan string kosong.
  • HmacRedactor menggunakan HMACSHA256 untuk mengodekan data yang diredaksi.

Contoh penggunaan

Untuk menggunakan redactor bawaan, Anda harus mendaftarkan layanan yang diperlukan. Daftarkan layanan menggunakan salah satu metode AddRedaction yang tersedia seperti yang dijelaskan dalam daftar berikut:

Mengonfigurasi editor

Ambil penyunting saat runtime menggunakan IRedactorProvider. Anda dapat menerapkan penyedia Anda sendiri dan mendaftarkannya di dalam panggilan AddRedaction, atau menggunakan penyedia bawaan. Konfigurasikan pengedit menggunakan metode IRedactionBuilder ini:

// This will use the default redactor, which is the ErasingRedactor
var serviceCollection = new ServiceCollection();
serviceCollection.AddRedaction();

// Using the default redactor provider:
serviceCollection.AddRedaction(redactionBuilder =>
{
    // Assign a redactor to use for a set of data classifications.
    redactionBuilder.SetRedactor<StarRedactor>(
        MyTaxonomyClassifications.Private,
        MyTaxonomyClassifications.Personal);
    // Assign a fallback redactor to use when processing classified data for which no specific redactor has been registered.
    // The `ErasingRedactor` is the default fallback redactor. If no redactor is configured for a data classification then the data will be erased.
    redactionBuilder.SetFallbackRedactor<MyFallbackRedactor>();
});

// Using a custom redactor provider:
builder.Services.AddSingleton<IRedactorProvider, StarRedactorProvider>();

Mengingat klasifikasi data ini dalam kode Anda:

public static class MyTaxonomyClassifications
{
    public static string Name => "MyTaxonomy";

    public static DataClassification Private => new(Name, nameof(Private));
    public static DataClassification Public => new(Name, nameof(Public));
    public static DataClassification Personal => new(Name, nameof(Personal));
}

Konfigurasi penyunting HMAC

Konfigurasikan redactor HMAC menggunakan metode IRedactionBuilder ini:

var serviceCollection = new ServiceCollection();
serviceCollection.AddRedaction(builder =>
{
    builder.SetHmacRedactor(
        options =>
        {
            options.KeyId = 1234567890;
            options.Key = Convert.ToBase64String("1234567890abcdefghijklmnopqrstuvwxyz");
        },

        // Any data tagged with Personal or Private attributes will be redacted by the Hmac redactor.
        MyTaxonomyClassifications.Personal, MyTaxonomyClassifications.Private,

        // "DataClassificationSet" lets you compose multiple data classifications:
        // For example, here the Hmac redactor will be used for data tagged
        // with BOTH Personal and Private (but not one without the other).
        new DataClassificationSet(MyTaxonomyClassifications.Personal,
                                  MyTaxonomyClassifications.Private));
});

Atau, konfigurasikan dengan cara ini:

var serviceCollection = new ServiceCollection();
serviceCollection.AddRedaction(builder =>
{
    builder.SetHmacRedactor(
        Configuration.GetSection("HmacRedactorOptions"), MyTaxonomyClassifications.Personal);
});

Sertakan bagian ini dalam file konfigurasi JSON Anda:

{
    "HmacRedactorOptions": {
        "KeyId": 1234567890,
        "Key": "1234567890abcdefghijklmnopqrstuvwxyz"
    }
}
  • HmacRedactorOptions memerlukan atribut HmacRedactorOptions.Key dan HmacRedactorOptions.KeyId diatur.
  • Key harus dalam format dasar 64 dan panjang setidaknya 44 karakter. Gunakan kunci yang berbeda untuk setiap penyebaran utama layanan. Rahasiakan materi kunci dan gantikan secara teratur.
  • KeyId ditambahkan ke setiap nilai yang diredaksi untuk mengidentifikasi kunci yang digunakan untuk hash data.
  • ID kunci yang berbeda berarti nilai tidak terkait dan tidak dapat digunakan untuk korelasi.

Nota

HmacRedactor masih eksperimental, sehingga metode sebelumnya akan menyebabkan EXTEXP0002 peringatan yang menunjukkan belum stabil. Untuk menggunakannya, tambahkan <NoWarn>$(NoWarn);EXTEXP0002</NoWarn> ke file proyek Anda atau tambahkan #pragma warning disable EXTEXP0002 di sekitar panggilan ke SetHmacRedactor.

Konfigurasikan penyunting kustom

Untuk membuat redactor kustom, tentukan subkelas yang mewarisi dari Redactor:

public sealed class StarRedactor : 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;
    }
}

Membuat penyedia redactor kustom

Antarmuka IRedactorProvider menyediakan instance redactor berdasarkan klasifikasi data. Untuk membuat penyedia penyunting kustom, gunakan turunan dari IRedactorProvider seperti yang ditunjukkan dalam contoh berikut:

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

public sealed class StarRedactorProvider : IRedactorProvider
{
    private static readonly StarRedactor _starRedactor = new();

    public static StarRedactorProvider Instance { get; } = new();

    public Redactor GetRedactor(DataClassificationSet classifications) => _starRedactor;
}

Mencatat informasi sensitif

Pengelogan adalah sumber umum paparan data yang tidak disengaja. Informasi sensitif seperti data pribadi, kredensial, atau detail keuangan tidak boleh ditulis ke log dalam teks biasa. Untuk mencegah hal ini, selalu gunakan redaksi saat mencatat data yang berpotensi sensitif.

Langkah-langkah untuk mencatat data sensitif

  1. Instal paket ekstensi telemetri: Instal Microsoft.Extensions.Telemetry agar dapat menggunakan pencatat yang diperluas untuk mengaktifkan fitur redaksi.
  2. Menyiapkan penyensoran: Integrasikan alat penyensor dengan alur pencatatan AddRedaction(IServiceCollection) Anda dengan memanggil metode tersebut, untuk secara otomatis mengamankan atau menutupi bidang sensitif sebelum ditulis ke log.
  3. Identifikasi bidang sensitif: Ketahui data mana dalam aplikasi Anda yang sensitif dan memerlukan perlindungan, dan tandai dengan klasifikasi data yang sesuai.
  4. Tinjau output log: Audit log Anda secara teratur untuk memastikan tidak ada data sensitif yang terekspos.

Contoh: Meredaksi data dalam log

Saat menggunakan Microsoft.Extensions.Logging, Anda dapat menggabungkan redaksi dengan pengelogan sebagai berikut:

using Microsoft.Extensions.Telemetry;
using Microsoft.Extensions.Compliance.Redaction;

var services = new ServiceCollection();
services.AddLogging(builder =>
{
    // Enable redaction.
    builder.EnableRedaction();
});

services.AddRedaction(builder =>
{
    // configure redactors for your data classifications
    builder.SetRedactor<StarRedactor>(MyTaxonomyClassifications.Private);
});
// Use annotations to mark sensitive data.
// For example, apply the Private classification to SSN data.
[LoggerMessage(0, LogLevel.Information, "User SSN: {SSN}")]
public static partial void LogPrivateInformation(
    this ILogger logger,
    [MyTaxonomyClassifications.Private] string SSN);

public void TestLogging()
{
    LogPrivateInformation("MySSN");
}

Outputnya harus seperti ini:

User SSN: *****

Ini memastikan bahwa data sensitif diredaksi sebelum dicatat, mengurangi risiko kebocoran data.