पाठ 21 / 25

Audit Logging

हर कर्म, निर्णय और कारण ऐसे रूप में दर्ज करें जिसे बाद में खोजा जा सके।

क्या हुआ, और अनुमति क्यों मिली?

हर tool call को एक संरचित पंक्ति के रूप में log करें: समय, session, tool, छिपाया हुआ command या path, निर्णय (allow, ask, deny) और कारण। घटना के बाद यह "असल में क्या चला?" का उत्तर मिनटों में देता है। Logs वहाँ रखें जहाँ agent उन्हें बदल न सके, उन्हें उचित अवधि तक रखें और उनमें secrets कभी न लिखें।

देखें, परखें, सुधारें

आपको agent के किए का रिकॉर्ड, अपने guardrails पर हमला करने वाले tests, और कुछ चूकने पर योजना चाहिए।

चार चरण: log, red-team, alert, सुधार।
चित्र 7.1 — Log, red-team, alert और सुधार।

एक log पंक्ति, चलाकर

मैंने यह चलाया। Command का token log करने से पहले छिपा दिया गया। ध्यान दें कि redaction pattern ने उस token का बाक़ी हिस्सा भी हटाया, इसलिए पंक्ति कटी दिखती है; ग़लत होने के लिए यह सुरक्षित दिशा है।

import json, re
def redact(t): return re.sub(r"(?i)(password|secret|token)\s*[=:]\s*\S+", "[REDACTED]", t)

line = json.dumps({
    "tool": "bash",
    "cmd": redact("curl -H 'token=abc123' x"),
    "decision": "deny",
    "reason": "network",
}, sort_keys=True)
print(line)

Output:

{"cmd": "curl -H '[REDACTED] x", "decision": "deny", "reason": "network", "tool": "bash"}

सिर्फ़ घटनाओं पर नहीं, patterns पर alert

एक अकेला denied command सामान्य है। एक मिनट में बीस denials, .env पढ़ने की denied कोशिश, या अज्ञात host तक पहुँचने की कोशिश alert और इंसानी नज़र के लायक हैं।

त्वरित जाँच: Action के अलावा हर audit log पंक्ति में क्या होना चाहिए?

  • Agent का password
  • निर्णय और कारण
  • एक चुटकुला
  • और कुछ नहीं
Answer

निर्णय और कारण — कर्म क्यों allow या deny हुआ, यह जानना नीति सुधारने के लिए ज़रूरी है।