機密データフィルター
Sensitive Data Filter は、エクスポート前の処理パイプラインで Trace から機密情報をマスキングする Span processor です。これにより、パスワード、API キー、token、その他の機密データがアプリケーションの外部へ出たり、Observability プラットフォームに保存されたりすることを防ぎます。
デフォルト設定デフォルト設定への直接リンク
Sensitive Data Filter は、推奨される Observability 設定に含まれています。
import {
Observability,
MastraStorageExporter,
MastraPlatformExporter,
SensitiveDataFilter,
} from '@mastra/observability'
export const mastra = new Mastra({
observability: new Observability({
configs: {
default: {
serviceName: 'mastra',
exporters: [new MastraStorageExporter(), new MastraPlatformExporter()],
spanOutputProcessors: [
new SensitiveDataFilter(), // Redacts sensitive fields before export
],
},
},
}),
storage: new LibSQLStore({
id: 'mastra-storage',
url: 'file:./mastra.db',
}),
})
デフォルト設定では、次の一般的な機密フィールド名がマスキングされます。
passwordtokensecretkeyapikeyauthauthorizationbearerbearertokenjwtcredentialclientsecretprivatekeyrefreshssn
フィールドの照合では大文字と小文字が区別されず、区切り文字は正規化されます。たとえば、api-key、api_key、Api Key はすべて apikey として扱われます。
仕組み仕組みへの直接リンク
Sensitive Data Filter は、Span が exporter に送信される前に次の項目を走査して処理します。
- 属性 - Span のメタデータとプロパティ
- メタデータ - Span に付加されたカスタムメタデータ
- 入力 - Agent、Tool、LLM に送信されるデータ
- 出力 - レスポンスと結果
- エラー情報 - スタックトレースとエラーの詳細
機密フィールドが検出されると、デフォルトではその値が [REDACTED] に置き換えられます。このフィルターは、ネストされたオブジェクト、配列、循環参照を安全に処理します。
カスタム設定カスタム設定への直接リンク
マスキングするフィールドとマスキングの表示方法をカスタマイズできます。
import { SensitiveDataFilter, MastraStorageExporter, Observability } from '@mastra/observability'
export const mastra = new Mastra({
observability: new Observability({
configs: {
production: {
serviceName: 'my-service',
exporters: [new MastraStorageExporter()],
spanOutputProcessors: [
new SensitiveDataFilter({
// Add custom sensitive fields
sensitiveFields: [
// Default fields
'password',
'token',
'secret',
'key',
'apikey',
// Custom fields for your application
'creditCard',
'bankAccount',
'routingNumber',
'email',
'phoneNumber',
'dateOfBirth',
],
// Custom redaction token
redactionToken: '***SENSITIVE***',
// Redaction style
redactionStyle: 'full', // or 'partial'
}),
],
},
},
}),
})
マスキングスタイルマスキングスタイルへの直接リンク
このフィルターは、2種類のマスキングスタイルをサポートします。
完全マスキング(デフォルト)完全マスキング(デフォルト)への直接リンク
値全体を固定 token に置き換えます。
// Before
{
"apiKey": "sk-abc123xyz789def456",
"userId": "user_12345"
}
// After
{
"apiKey": "[REDACTED]",
"userId": "user_12345"
}
部分マスキング部分マスキングへの直接リンク
先頭と末尾の3文字を表示します。値全体を公開せずにデバッグする場合に役立ちます。
new SensitiveDataFilter({
redactionStyle: 'partial',
})
// Before
{
"apiKey": "sk-abc123xyz789def456",
"creditCard": "4111111111111111"
}
// After
{
"apiKey": "sk-…456",
"creditCard": "411…111"
}
情報漏えいを防ぐため、7文字未満の値は完全にマスキングされます。
フィールドの照合ルールフィールドの照合ルールへの直接リンク
このフィルターは、高度なフィールド照合を使用します。
- 大文字と小文字を区別しない:
APIKey、apikey、ApiKeyはすべて一致します - 区切り文字に依存しない:
api-key、api_key、apiKeyは同一として扱われます - 完全一致:正規化後のフィールドは完全に一致する必要があります
tokenはtoken、Token、TOKENと一致しますtokenはpromptTokensやtokenCountとは一致しません
ネストされたオブジェクトの処理ネストされたオブジェクトの処理への直接リンク
このフィルターは、ネストされた構造を再帰的に処理します。
// Before
{
"user": {
"id": "12345",
"credentials": {
"password": "SuperSecret123!",
"apiKey": "sk-production-key"
}
},
"config": {
"auth": {
"jwt": "eyJhbGciOiJIUzI1NiIs..."
}
}
}
// After
{
"user": {
"id": "12345",
"credentials": {
"password": "[REDACTED]",
"apiKey": "[REDACTED]"
}
},
"config": {
"auth": {
"jwt": "[REDACTED]"
}
}
}
パフォーマンス上の考慮事項パフォーマンス上の考慮事項への直接リンク
Sensitive Data Filter は、軽量かつ効率的に動作するよう設計されています。
- 同期処理:非同期処理を行わず、レイテンシーへの影響を最小限に抑えます
- 循環参照の処理:複雑なオブジェクトグラフを安全に処理します
- エラーからの復旧:フィルタリングに失敗した場合、クラッシュさせずにフィールドをエラーマーカーへ置き換えます
フィルターの無効化フィルターの無効化への直接リンク
機密データのフィルタリングを無効にする必要がある場合(本番環境では推奨されません)は、次のように設定します。
export const mastra = new Mastra({
observability: new Observability({
configs: {
debug: {
serviceName: 'debug-service',
spanOutputProcessors: [], // No processors, including no SensitiveDataFilter
exporters: [new MastraStorageExporter()],
},
},
}),
})
機密データのフィルタリングは、管理された環境でのみ無効にしてください。Trace を外部サービスや共有ストレージへ送信する場合は、絶対に無効にしないでください。
一般的なユースケース一般的なユースケースへの直接リンク
医療アプリケーション医療アプリケーションへの直接リンク
new SensitiveDataFilter({
sensitiveFields: [
// HIPAA-related fields
'ssn',
'socialSecurityNumber',
'medicalRecordNumber',
'mrn',
'healthInsuranceNumber',
'diagnosisCode',
'icd10',
'prescription',
'medication',
],
})
金融サービス金融サービスへの直接リンク
new SensitiveDataFilter({
sensitiveFields: [
// PCI compliance fields
'creditCard',
'ccNumber',
'cardNumber',
'cvv',
'cvc',
'securityCode',
'expirationDate',
'expiry',
'bankAccount',
'accountNumber',
'routingNumber',
'iban',
'swift',
],
})
エラー処理エラー処理への直接リンク
フィールドの処理中にエラーが発生した場合、フィルターはそのフィールドを安全なエラーマーカーに置き換えます。
{
"problematicField": {
"error": {
"processor": "sensitive-data-filter"
}
}
}
そのため、処理エラーによって Trace のエクスポートが妨げられたり、アプリケーションがクラッシュしたりすることはありません。