Bizalmas adatok ismételt használata natív felhőbeli alkalmazásokban
Az alkalmazásokon belüli újrapróbálkozást leggyakrabban naplóüzeneteken és telemetrián végzik. Más helyzetekben is használható, például dimenziók metrikákban történő újramegálmodásához vagy a köztes szoftver fejlécadataihoz.
A .NET naplózási keretrendszere egyszerű módot kínál az adatok naplózási üzenetekben való újrakódolására. A Microsoft.Extensions.Compliance.Abstractions
csomag javítja a naplózást, hogy tartalmazzon egy Redactor
olyan osztályt, amely újrakontrasztja az adatokat.
Mi az a redaction?
A redaction a bizalmas információk üzenetből való eltávolításának folyamata. Előfordulhat például, hogy egy felhasználó nevét egy naplóüzenetből szeretné kiírni. Vagy előfordulhat, hogy egy felhasználó IP-címét telemetriaeseményből szeretné újra kiírni.
A legegyszerűbb újraműveltség az érték törlése, és egy üres sztring visszaadása egy változóhoz. Ez a viselkedés alapértelmezés szerint azért fordul elő, mert az ErasingRedactor
alapértelmezett tartalék újrabontás. A Microsoft tartalmaz egy osztályt HMACSHA256Redactor
, amely kivonatfüggvények használatával történő adat-redactálásra használható. A HMAC-újraműveltség akkor hasznos, ha újra szeretné használni az adatokat, de továbbra is képes korrelálni a naplóüzeneteket több naplóüzenet között. Az utolsó lehetőség a saját újrafelfedezési függvény biztosítása, amely akkor hasznos, ha egyéni algoritmussal szeretné újrakontolni az adatokat.
Tegyük fel például, hogy a naplókban egyértelműbbé szeretné tenni, hogy egy érték újra van-e módosítva *****
.
Adatok újrakonformálása natív felhőbeli alkalmazásokban
A szervezetek natív felhőbeli alkalmazása naplókat írhat, és telemetriát hozhat létre több projektben. Például naplókat írhat az adatbázis-szolgáltatásból, a webalkalmazásból vagy bármely más API-ból. A naplózás típusától függően mindegyikhez hozzá kell adnia a redaction szolgáltatást.
Négy lépésre van szükség az újraműveltség engedélyezéséhez az alkalmazásban:
- Adja hozzá a
Microsoft.Extensions.Compliance.Redaction
NuGet-csomagot minden projekthez. - Adja hozzá a redaction szolgáltatást a függőséginjektálási tárolóhoz.
- Válassza ki, hogy melyik redaction implementációt használja az egyes minősített adatok típusaihoz.
- Engedélyezze az újraművelést a naplózási keretrendszerben.
Adja hozzá az újraküldő szolgáltatást a Függőséginjektálási tárolóhoz
Az alábbi példa egy Blazor WebAssembly-alkalmazásra mutat. A folyamat hasonló más típusú alkalmazásokhoz, de a kód kissé eltérő attól függően, hogy a függőséginjektálási tároló hogyan van konfigurálva.
A program.cs fájlban adja hozzá a következő függőségeket:
using Microsoft.Extensions.Compliance.Classification;
using Microsoft.Extensions.Compliance.Redaction;
A fenti csomagok lehetővé teszik, hogy a kóddal adja hozzá a redaction szolgáltatást a függőséginjektáló tárolóhoz:
builder.Services.AddRedaction();
Válassza ki, hogy melyik redaction implementációt használja az egyes minősített adatok típusaihoz
A AddRedactor
metódus tartalmazhat egy paramétert RedactorOptions
. A paraméterrel megadhatja, hogy az egyes adatosztályozásokhoz melyik redaction implementációt használja.
Az alábbi kód például azt határozza meg, hogy az HMACSHA256Redactor
adatokat kell-e használni EUII
.
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));
});
Megjegyzés:
A HMAC redactor algoritmus kísérleti, ezért ha használja, le kell tiltania a fordító figyelmeztetését. A fenti kód körülöleli #pragma warning disable EXTEXP0002
a projektet, és #pragma warning restore EXTEXP0002
lehetővé teszi a projekt fordítását.
A paraméterhez több újraművelési implementációt RedactorOptions
is hozzáadhat. Az alábbi kód például egy egyéni újrabontást ad hozzá az adatokhoz 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));
});
Újraműveltség engedélyezése a naplózási keretrendszerben
A következő lépés az újraműveltség engedélyezése a naplózási keretrendszerben. Ezt úgy végezheti el, hogy a tulajdonságot az .EnableRedaction
alkalmazásnaplózási generátorra állítja. A példaalkalmazás esetében a kód a következő:
builder.Services.AddLogging(logging =>
{
logging.EnableRedaction();
logging.AddJsonConsole(); //Enable structure logs on the console to view the redacted data.
});
A fenti kód használatával létrehozhat egy új naplózót, amely a redaction szolgáltatást használja. Implementáljon egy új LogOrders
naplózót, ahol rendelési adatokat szeretne írni a naplókba.
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);
}
Egyéni újraaction implementáció létrehozása
A Microsoft lehetővé teszi, hogy egyéni újraművelési implementációt hozzon létre. Egyéni újraművelést fog használni, ha saját algoritmussal szeretné újrakontolni az adatokat. Implementáljunk egy egyéni redaktort, amely a bizalmas adatokat lecseréli a *****
gombra.
Az egyéni redaktornak implementálnia kell az osztályt Redactor
. Az osztálynak két metódust kell implementálnia:
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;
}
}
A példaarchitektúrában eShopLite ezt az osztályt hozzáadhatja a DataEntities projekthez az adatbesorolási kód alatti Compliance.cs fájlban.