イベントの機密データを秘匿化する
最も安全な機密値は、イベント パイプラインに入らない値です。リクエスト、例外、モデル応答、データベース オブジェクトをシリアル化し、後で危険なキーを削除しようとするのではなく、明示的な許可リストから構造化イベントを構築します。
デフォルトで除外するデータ
API キー、パスワード、セッション Cookie、認証ヘッダー、Webhook 署名、支払い詳細、完全なリクエスト本文、データベース接続文字列、または生のプロンプトと完了をログに記録しないでください。自由形式のテキストには、フィールド名が無害に見える場合でも、個人データや機密データが含まれる可能性があります。
電子メール アドレスよりも内部の不透明な識別子を優先します。生の例外を制御された例外に置き換える error_type そして、適切なアクセスと保持を備えた診断システムに完全なスタック トレースを保存します。識別子またはクエリ文字列を含む URL を安定したルート テンプレートに置き換えます。
境界にコントロールを適用する
イベント オブジェクトをフィールドごとに作成します。
const event = {
route_template: request.routeOptions.url,
method: request.method,
status_code: response.statusCode,
latency_ms: elapsedMs,
account_id: account.internalId,
};
await telemetry.log("api_request_completed", event);
再利用可能な消毒剤が必要な場合は、多層防御として扱います。ネストされたオブジェクト、配列、代替大文字、および予期しない型をテストします。バインドされた文字列の長さとコントラクト外の拒否フィールド。元の値のセットが小さいか推測可能な場合、ハッシュは匿名化されません。
確認して返信する
すべての大規模イベント契約に所有者を割り当てます。本番環境の排出を有効にする前に、開発中のサンプル行を確認してください。新しい識別子が追加された場合は、保持とアクセスのニーズを再検討してください。
機密データが発見された場合は、発行パスを停止し、影響を受けるテーブルと時間範囲を特定し、公開されたシークレットをローテーションし、必要に応じてサポートされている削除ワークフローを使用します。次に、実際のイベント コンストラクターを実行する回帰テストを追加します。
読む イベントスキーマの設計 契約慣行と ログ API リファレンス 取り込み形状に合わせて。