在雲端原生應用程式中修訂敏感數據
應用程式內的修訂最常在記錄訊息和遙測上完成。 它也可用於其他案例,例如計量中的修訂維度,或中間件中的標頭數據。
.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架構中,您可以在 DataEntities 專案的數據分類程式代碼下方的 Compliance.cs 中新增此類別。