Aracılığıyla paylaş


.NET'te veri kırpma

Redaction günlüklerdeki, hata iletilerindeki veya diğer çıkışlardaki hassas bilgileri temizlemenize veya maskelemenize yardımcı olur. Bu, gizlilik kurallarıyla uyumlu kalmanızı sağlar ve hassas verileri korur. Kişisel verileri, finansal bilgileri veya diğer gizli veri noktalarını işleyen uygulamalarda kullanışlıdır.

Redaction paketini yükleme

Başlamak için Microsoft.Extensions.Compliance.Redaction NuGet paketini yükleyin📦:

dotnet add package Microsoft.Extensions.Compliance.Redaction

Veya .NET 10+ SDK kullanıyorsanız:

dotnet package add Microsoft.Extensions.Compliance.Redaction

Kullanılabilir redaktörler

Redaktörler hassas verileri yeniden işlemden sorumludur. Hassas bilgileri yeniden oluşturur, değiştirir veya maskeler. Kütüphane tarafından sağlanan mevcut olan redaktörleri göz önünde bulundurun.

Kullanım örneği

Yerleşik redaktörleri kullanmak için gerekli hizmetleri kaydetmeniz gerekir. Aşağıdaki listede açıklandığı gibi kullanılabilir AddRedaction yöntemlerden birini kullanarak hizmetleri kaydedin:

Redaktör yapılandırma

IRedactorProvider kullanarak çalışma zamanında düzenleyicileri getirin. Kendi sağlayıcınızı uygulayabilir ve çağrının AddRedaction içine kaydedebilir veya varsayılan sağlayıcıyı kullanabilirsiniz. Şu IRedactionBuilder yöntemleri kullanarak redaktörleri yapılandırın:

// 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>();

Kodunuzda bu veri sınıflandırması göz önünde bulundurulduğunda:

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

HMAC düzenleyicisini yapılandır

HMAC redaktörlerini şu IRedactionBuilder yöntemleri kullanarak yapılandırın:

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

Alternatif olarak, şu şekilde yapılandırın:

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

Bu bölümü JSON yapılandırma dosyanıza ekleyin:

{
    "HmacRedactorOptions": {
        "KeyId": 1234567890,
        "Key": "1234567890abcdefghijklmnopqrstuvwxyz"
    }
}
  • HmacRedactorOptions özelliğinin ve HmacRedactorOptions.Key ile HmacRedactorOptions.KeyId özelliklerinin ayarlanması gereklidir.
  • Key temel 64 biçiminde ve en az 44 karakter uzunluğunda olmalıdır. Bir hizmetin her ana dağıtımı için ayrı bir anahtar kullanın. Anahtar malzemeyi gizli tutun ve düzenli olarak döndürün.
  • KeyId, verileri karma hale getirmek için kullanılan anahtarı tanımlamak amacıyla gizlenen her değere eklenir.
  • Farklı anahtar kimlikleri, değerlerin ilişkisiz olduğu ve bağıntı için kullanılamayacağı anlamına gelir.

Uyarı

HmacRedactor hala deneysel olduğundan, önceki yöntemler henüz kararlı olmadığını belirten uyarıya EXTEXP0002 neden olur. Bunu kullanmak için, proje dosyanıza <NoWarn>$(NoWarn);EXTEXP0002</NoWarn> ekleyin veya #pragma warning disable EXTEXP0002 çağrılarının etrafına SetHmacRedactor ekleyin.

Özel bir redaktör yapılandırın

Özel bir redaktör oluşturmak için Redactor öğesinden devralan bir alt sınıf tanımlayın:

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

Özel redaktör sağlayıcısı oluşturma

Arabirim, IRedactorProvider veri sınıflandırmasına göre redaktör örnekleri sağlar. Özel bir redaktör sağlayıcısı oluşturmak için, aşağıdaki örnekte gösterildiği gibi IRedactorProvider öğesinden türetin:

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

Hassas bilgileri kaydetme

Loglama, verilerin yanlışlıkla açığa çıkmasının yaygın bir kaynağıdır. Kişisel veriler, kimlik bilgileri veya finansal ayrıntılar gibi hassas bilgiler hiçbir zaman düz metin olarak günlüklere yazılmamalıdır. Bunu önlemek için, hassas olabilecek verileri günlüğe kaydetme sırasında her zaman bilgi gizleme işlemi uygulayın.

Hassas verileri günlüğe kaydetme adımları

  1. Telemetri uzantıları paketini yükleyin: Kısıtlama özelliğini etkinleştirmek için genişletilmiş logger'ı kullanabilmek için Microsoft.Extensions.Telemetry'yi yükleyin.
  2. Redaction'ı ayarlama: Günlüklere yazılmadan önce hassas alanları otomatik olarak temizleyerek veya maskeleyerek yöntemini çağırarak AddRedaction(IServiceCollection) redaktörleri günlüğe kaydetme işlem hattınızla tümleştirin.
  3. Hassas alanları tanımlama: Uygulamanızdaki hangi verilerin hassas olduğunu ve koruma gerektirdiğini bilin ve bunları uygun veri sınıflandırmasıyla işaretleyin.
  4. Günlük çıkışını gözden geçirin: Hassas verilerin kullanıma sunulmadığından emin olmak için günlüklerinizi düzenli olarak denetleyin.

Örnek: Günlüklerdeki verileri yeniden işlemden geçirme

Microsoft.Extensions.Logging kullanırken düzeltmeyi günlük ile aşağıdaki gibi birleştirebilirsiniz:

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

Çıkış şu şekilde olmalıdır:

User SSN: *****

Bu, hassas verilerin günlüğe kaydedilmeden önce yeniden dağıtılmasını sağlayarak veri sızıntısı riskini azaltır.