Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
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.
- , ErasingRedactor herhangi bir girişi boş bir dizeyle değiştirir.
-
HmacRedactor
HMACSHA256kullanarak gizlenen verileri kodlar.
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:
- AddRedaction(IServiceCollection): IRedactorProvider uygulamasını IServiceCollection içinde kaydeder.
-
AddRedaction(IServiceCollection, Action<IRedactionBuilder>): IRedactorProvider içinde IServiceCollection uygulamasını kaydeder ve belirtilen redaktörleri verilen
configuretemsilciyle yapılandırır.
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.
-
Keytemel 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ı
- 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.
- 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.
- 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.
- 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.