dhalドキュメント
9ページ中7ページセキュリティイベントにはルート、ID、IP、ルール情報が含まれる場合があります。機密データとして扱ってください。
リダクション
json
{
"observability": {
"redaction": {
"enabled": true,
"ip": "mask",
"identity": "hash",
"userAgent": "full"
}
}
}IP と ID には none、mask、hash、omit を利用できます。User-Agent は full または omit です。
相関 ID、ログ、イベント
json
{
"observability": {
"correlation": {
"headers": ["x-request-id", "x-correlation-id", "traceparent"]
},
"logs": { "enabled": true, "format": "json" },
"events": { "enabled": true }
}
}アプリケーションリスナーのエラーはリクエスト判断から分離され、ランタイムスナップショットに記録されます。
OpenTelemetry
bash
npm install @opentelemetry/apijson
{
"observability": {
"otel": {
"enabled": true,
"serviceName": "orders-api",
"emitAllowedRequests": false
}
}
}Dhal はホストアプリケーションの OpenTelemetry Provider を使用します。
署名付き Webhook
json
{
"observability": {
"webhooks": {
"enabled": true,
"urls": ["https://security.example.com/dhal/events"],
"timeoutMs": 750,
"emitAllowedRequests": false,
"signing": {
"enabled": true,
"secretEnv": "DHAL_WEBHOOK_SECRET",
"signatureHeader": "x-dhal-signature",
"timestampHeader": "x-dhal-timestamp",
"idHeader": "x-dhal-event-id"
}
}
}
}受信側はタイムスタンプ、イベント ID、HMAC 署名を検証し、古いイベントとリプレイを拒否し、受理後にのみ 2xx を返してください。キューは上限付きで、非 2xx は失敗として扱われます。
実行状態と終了
ts
const snapshot = protection.getRuntimeSnapshot();blocked、wouldBlock、internalErrors、overBudget、リスナーエラー、保留・失敗・破棄された配信を監視します。
ts
async function shutdown() {
await protection.close(5_000);
process.exit(0);
}flush() はエンジンを閉じずにテレメトリを排出します。close() は新しい検査を停止し、テレメトリを排出してリスナーを削除します。