修訂雲端原生應用程式中的敏感性資料
應用程式內的修訂最常在記錄訊息和遙測上完成。 它也可用於其他案例,例如計量中的修訂維度,或中介軟體中的標頭資料。
.NET 記錄架構提供簡單的方法來修訂記錄訊息中的數據。 Microsoft.Extensions.Compliance.Abstractions
套件增強了記錄功能,加入了一個可以隱藏數據的 Redactor
類別。
什麼是修訂?
編輯是從訊息中移除敏感資訊的過程。 例如,您可能想要從記錄訊息中修訂用戶的名稱。 或者,您可能想要在遙測事件中隱藏使用者的IP地址。
最簡單的修訂是清除值,並傳回變數的空字串。 此行為預設會發生,因為 ErasingRedactor
是預設備援修訂器。 Microsoft包含類別 HMACSHA256Redactor
,可用來使用哈希函式來修訂數據。 如果您想遮蔽數據,HMAC 遮蔽很有用,但仍然能夠將多個日誌語句中的日誌訊息相互關聯。 最後一個選項是提供您自己的修訂函式,如果您想要使用自定義演算法來修改數據,這會很有用。
例如,您想要在記錄中更清楚地顯示出透過將某個值取代為 *****
來修訂該值。
如何在雲端原生應用程式中修訂數據
您的組織雲端原生應用程式可能會撰寫記錄,並在多個專案中建立遙測。 例如,它可以從資料庫服務、Web 應用程式或任何其他 API 寫入記錄。 視記錄的類型而定,您需要將修訂服務新增至每一個記錄中。
在應用程式中啟用修訂需要採取四個步驟:
- 將
Microsoft.Extensions.Compliance.Redaction
NuGet 套件新增至每個專案。 - 將修訂服務新增至相依性插入容器中。
- 選擇要針對每種分類數據類型使用的修訂實作。
- 在紀錄架構中啟用修訂。
將修訂服務新增至相依性插入容器中
下列範例適用於 Blazor WebAssembly 應用程式。 此程式與其他類型的應用程式類似,但程式代碼會根據相依性插入容器的設定方式稍有不同。
在 program.cs 檔案中,新增下列相依性:
using Microsoft.Extensions.Compliance.Classification;
using Microsoft.Extensions.Compliance.Redaction;
上述套件可讓您接著使用此程式碼,將編輯服務新增至相依注入容器中:
builder.Services.AddRedaction();
選擇要針對每種分類數據類型使用的修訂實作
方法 AddRedactor
可以包含 RedactorOptions
參數。 參數可讓您指定要用於每個數據分類的修訂實作。
例如,下列程式代碼指定應該使用 HMACSHA256Redactor
來處理 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));
});
備註
HMAC 編輯器演算法是實驗性的,因此,如果您使用它,必須停用編譯器警告。 在上述程式代碼外圍加上 #pragma warning disable EXTEXP0002
和 #pragma warning restore EXTEXP0002
,將使您可以編譯專案。
您可以將多個修訂實作新增至 RedactorOptions
參數。 例如,下列程式代碼會為 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));
});
在紀錄架構中啟用修訂
接下來的步驟是在日誌框架中啟用刪除功能。 這可藉由將 .EnableRedaction
屬性設定為您的應用程式記錄產生器來完成。 針對範例應用程式,程式代碼為:
builder.Services.AddLogging(logging =>
{
logging.EnableRedaction();
logging.AddJsonConsole(); //Enable structure logs on the console to view the redacted data.
});
使用上述程式代碼,您可以建立使用修訂服務的新記錄器。 實作新的 LogOrders
記錄器,當您想將訂單資訊寫入記錄檔時。
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);
}
建立自訂修訂實作
Microsoft可讓您建立自定義修訂實作。 當您想要使用自己的演算法來修訂資料時,您將使用自定義修訂。 讓我們實作自定義的編輯器,以將敏感數據替換為*****
。
自訂編輯器需要實作 Redactor
類別。 類別需要實作兩個方法:
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;
}
}
在我們的範例eShopLite架構中,您可以在數據分類程序代碼下方的 Compliance.cs,將此類別新增至 DataEntities 專案。