Skip to content

セキュリティフィルタ

DD は機密データフィルタリング機能を組み込みで提供し、ログ内のパスワード、キー、Token などの機密情報を自動検出してマスキングできます。

SensitiveDataFilter

正規表現ベースの機密データフィルター。動的パターンとキャッシュをサポート。

作成

関数シグネチャ説明
NewSensitiveDataFilter() *SensitiveDataFilter完全パターンセット
NewEmptySensitiveDataFilter() *SensitiveDataFilter空のフィルター
NewCustomSensitiveDataFilter(patterns ...string) (*SensitiveDataFilter, error)カスタムパターン

メソッド

メソッドシグネチャ説明
AddPattern(pattern string) error正規表現パターンを追加
AddPatterns(patterns ...string) errorパターンを一括追加
ClearPatterns()全パターンをクリア
PatternCount() intパターン数
Enable()フィルタリングを有効化
Disable()フィルタリングを無効化
IsEnabled() bool有効かどうか
Filter(input string) string文字列をフィルタリング
FilterFieldValue(key string, value any) any単一フィールド値をフィルタリング
FilterValueRecursive(key string, value any) anyネストされた構造を再帰的にフィルタリング
GetFilterStats() FilterStatsフィルタリング統計を取得
ActiveGoroutineCount() int32アクティブなフィルター goroutine 数
WaitForGoroutines(timeout time.Duration) boolフィルター goroutine の完了を待機
Close() boolフィルターを閉じてキャッシュを解放

カスタムパターン

go
filter, _ := dd.NewCustomSensitiveDataFilter(
    `(?i)password\s*[:=]\s*\S+`,     // パスワード
    `(?i)api[_-]?key\s*[:=]\s*\S+`,  // API Key
    `\b\d{16,19}\b`,                  // クレジットカード番号
)

SecurityConfig

セキュリティ設定構造体。フィルタリング動作とセキュリティレベルを制御します。

go
type SecurityConfig struct {
    MaxMessageSize  int                       // メッセージサイズ上限(バイト、0 は制限なし、プリセット設定のデフォルトは 5MB)
    MaxWriters      int                       // 最大 Writer 数(プリセット設定のデフォルトは 100)
    SensitiveFilter *SensitiveDataFilter      // 機密データフィルター
    RateLimitConfig *internal.RateLimitConfig // レート制限設定(内部型、nil はレート制限無効を示す;プリセット設定はいずれもこのフィールドを埋めない)
}

RateLimitConfig について

RateLimitConfig はログのレート制限を制御し、ログフラッディング(DoS)を防止して高負荷時のシステム安定性を維持します。このフィールドは内部型(*internal.RateLimitConfig)であり、直接生成できません。すべてのプリセット設定(DefaultSecurityConfigDefaultSecureConfigSecurityConfigForLevel など)はこのフィールドを埋めません、つまりデフォルトではレート制限が有効になりません;明示的に設定した場合のみ、Logger がそれに従いレートリミッターを初期化します。レート制限を無効にするには nil に設定してください。

FilterStats

フィルタリング統計データ構造。モニタリングとオブザーバビリティに使用します。

go
type FilterStats struct {
    ActiveGoroutines  int32         // 現在アクティブなフィルター goroutine 数
    PatternCount      int32         // 登録済みの機密データパターン数
    SemaphoreCapacity int           // 最大同時フィルタリング操作数
    MaxInputLength    int           // 入力長さの切り詰め閾値
    Enabled           bool          // フィルタリングが有効かどうか
    TotalFiltered     int64         // 総フィルタリング操作数
    TotalRedactions   int64         // 総マスキング回数
    TotalTimeouts     int64         // 総タイムアウト回数
    AverageLatency    time.Duration // 平均フィルタリングレイテンシ
    CacheHits         int64         // キャッシュヒット回数
    CacheMiss         int64         // キャッシュミス回数
}

SecurityLevel

セキュリティレベルの列挙型。SecurityConfigForLevel でプリセット設定を素早く取得するために使用します。

go
type SecurityLevel int

String() メソッドを実装し、読み取り可能なレベル名を返します。

定数説明
SecurityLevelDevelopment開発環境(機密フィルタリングなし、レート制限なし)
SecurityLevelBasic基本フィルタリング(パスワード、トークン、API Key、クレジットカード、SSN、電話番号、SWIFT/CVV など約 40 種の一般的な機密データ)
SecurityLevelStandard標準フィルタリング(本番環境推奨)
SecurityLevelStrict厳格フィルタリング(PII/金融データ環境)
SecurityLevelParanoid最高レベルフィルタリング(高リスク環境)

プリセット設定

関数説明適用シナリオ
DefaultSecurityConfig()基本機密データフィルタリング本番環境(推奨)
DefaultSecureConfig()完全機密データフィルタリング高セキュリティ要件
HealthcareConfig()HIPAA 準拠医療業界
FinancialConfig()PCI-DSS 準拠金融業界
GovernmentConfig()政府基準公共部門

レベル別設定

go
func SecurityConfigForLevel(level SecurityLevel) *SecurityConfig
レベル定数説明
DevelopmentSecurityLevelDevelopment開発環境、最も緩やか
BasicSecurityLevelBasic基本フィルタリング
StandardSecurityLevelStandard標準フィルタリング
StrictSecurityLevelStrict厳格フィルタリング
ParanoidSecurityLevelParanoid最高レベルフィルタリング

Clone

go
func (c *SecurityConfig) Clone() *SecurityConfig

セキュリティ設定のディープコピーを作成します。

使用方法

Config で設定

go
// DefaultConfig には DefaultSecurityConfig() が組み込み済みで、通常は明示的な代入は不要
cfg := dd.DefaultConfig()
logger, _ := dd.New(cfg)

// より高いセキュリティレベルの設定に置き換える場合は明示的に上書き
// cfg.Security = dd.DefaultSecureConfig()

実行時に変更

go
// セキュリティ設定を更新
logger.SetSecurityConfig(dd.DefaultSecureConfig())

// 現在の設定を読み取り
sec := logger.GetSecurityConfig()

ネストされた構造のフィルタリング

go
filter := dd.NewSensitiveDataFilter()

// 文字列フィルタリング
filtered := filter.Filter("password=s3cr3t")
// → "password=[REDACTED]"

// ネストされた構造(自動再帰、循環参照検出をサポート)
data := map[string]any{
    "user": map[string]any{
        "name":     "admin",
        "password": "s3cr3t",
        "token":    "eyJhbGciOi...",
    },
}
filteredData := filter.FilterValueRecursive("data", data)

フィルタリング統計のモニタリング

go
filter := dd.NewSensitiveDataFilter()
// ... フィルタリングを使用 ...
stats := filter.GetFilterStats()
fmt.Printf("総フィルタリング: %d, マスキング: %d, 平均レイテンシ: %v\n",
    stats.TotalFiltered, stats.TotalRedactions, stats.AverageLatency)

次のステップ

  • 設定 -- SecurityConfig 設定
  • Logger -- SetSecurityConfig メソッド
  • 監査ログ -- セキュリティイベント監査