Megosztás:


Adatátadás a .NET-ben

A redaction segítségével megtisztíthatja vagy maszkolhatja a naplókban, hibaüzenetekben vagy egyéb kimenetekben lévő bizalmas információkat. Így továbbra is megfelel az adatvédelmi szabályoknak, és védi a bizalmas adatokat. Olyan alkalmazásokban hasznos, amelyek személyes adatokat, pénzügyi információkat vagy más bizalmas adatpontokat kezelnek.

Felülvizsgálati csomag telepítése

Első lépésként telepítse a 📦 Microsoft.Extensions.Compliance.Redaction NuGet csomagot:

dotnet add package Microsoft.Extensions.Compliance.Redaction

Vagy ha a .NET 10+ SDK-t használod:

dotnet package add Microsoft.Extensions.Compliance.Redaction

Elérhető redaktorok

A redaktorok felelősek a bizalmas adatok kitakarásáért. Bizalmas információkat módosítanak, cserélnek vagy maszkolnak. Vegye figyelembe a következő, a tár által biztosított redaktorokat:

  • A ErasingRedactor minden bemenetet üres karakterláncra cserél.
  • A HmacRedactor a HMACSHA256 segítségével kódolja a törölt adatokat.

Használati példa

A beépített redaktorok használatához regisztrálnia kell a szükséges szolgáltatásokat. Regisztrálja a szolgáltatásokat az alábbi listában ismertetett elérhető AddRedaction módszerek egyikével:

Redactor konfigurálása

Futásidőben redaktorok lekérése egy IRedactorProvider használatával. Implementálhatja a saját szolgáltatóját, és regisztrálhatja a AddRedaction hívásban, vagy használhatja az alapértelmezett szolgáltatót. Konfigurálja a redaktorokat az alábbi IRedactionBuilder módszerekkel:

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

Ha figyelembe vesszük az adatbesorolást a kódban:

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

A HMAC-redaktor konfigurálása

Konfigurálja a HMAC-redaktort az alábbi IRedactionBuilder módszerekkel:

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

Másik lehetőségként konfigurálja a következő módon:

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

Adja meg ezt a szakaszt a JSON-konfigurációs fájlban:

{
    "HmacRedactorOptions": {
        "KeyId": 1234567890,
        "Key": "1234567890abcdefghijklmnopqrstuvwxyz"
    }
}
  • A HmacRedactorOptions beállításhoz meg kell adni annak HmacRedactorOptions.Key tulajdonságait és HmacRedactorOptions.KeyId tulajdonságait.
  • A Key formátumnak 64-es alapformátumúnak kell lennie, és legalább 44 karakter hosszúnak kell lennie. Használjon egy külön kulcsot egy szolgáltatás minden fő üzembe helyezéséhez. Tartsa titokban a legfontosabb anyagot, és forgassa rendszeresen.
  • A KeyId minden egyes kitakart értékhez hozzá van fűzve, hogy az adatok kivonatának elkészítéséhez használt kulcsot azonosítsa.
  • A különböző kulcsazonosítók azt jelentik, hogy az értékek nem kapcsolódnak egymáshoz, és nem használhatók korrelációhoz.

Megjegyzés

Ez HmacRedactor még kísérleti jellegű, ezért az előbbi metódusok EXTEXP0002 figyelmeztetést adnak arról, hogy még nem stabil. A használatához adja hozzá a <NoWarn>$(NoWarn);EXTEXP0002</NoWarn> a projektfájlhoz, vagy helyezze köré a #pragma warning disable EXTEXP0002-t a SetHmacRedactor-hívások köré.

Egyéni redactor konfigurálása

Egyéni redaktor létrehozásához definiáljon egy alosztályt, amely a következőtől Redactoröröklődik:

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

Egyéni szerkesztési szolgáltató létrehozása

Az IRedactorProvider interfész adatbesoroláson alapuló redaktorpéldányokat biztosít. Egy egyéni redaktor szolgáltató létrehozásához örököljön az IRedactorProvider-ból a következő példában bemutatott módon:

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

Bizalmas adatok naplózása

A naplózás gyakori forrása a véletlen adatexpozíciónak. A bizalmas adatokat, például a személyes adatokat, a hitelesítő adatokat vagy a pénzügyi adatokat soha nem szabad egyszerű szöveges naplókba írni. Ennek elkerülése érdekében mindig használjon újraművelést a potenciálisan bizalmas adatok naplózásakor.

A bizalmas adatok naplózásának lépései

  1. Telepítse a telemetriai bővítmények csomagját: Telepítse a Microsoft.Extensions.Telemetry elemet, hogy a kiterjesztett naplózóval engedélyezze a kitakarási funkciót.
  2. Redaction beállítása: A AddRedaction(IServiceCollection) metódus hívásával integrálhatja a redaktorokat a naplózási rendszerbe, így automatikusan szűrni vagy elfedni tudja a bizalmas mezőket, mielőtt a naplókba íródnak.
  3. Bizalmas mezők azonosítása: Tudja, hogy az alkalmazásban mely adatok bizalmasak, és védelmet igényelnek, és jelölje meg őket a megfelelő adatbesorolással.
  4. Napló kimenet áttekintése: Rendszeresen ellenőrizze a naplókat, hogy ne kerüljön bizalmas adat kitéve.

Példa: Adatok cenzúrázása naplókban

A Microsoft.Extensions.Logging használata esetén a redaction és a naplózás az alábbiak szerint kombinálható:

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

A kimenetnek a következőhöz hasonlónak kell lennie:

User SSN: *****

Ez biztosítja, hogy a bizalmas adatok újra ki legyenek téve a naplózás előtt, így csökkentve az adatszivárgások kockázatát.