অধ্যায় ৮.২ — অডিট লগ
১. উদ্দেশ্য
অডিট লগ — "কে কী করেছে কখন কোথা থেকে"। প্ল্যাটফর্মের ট্যাম্পার-প্রতিরোধী রেকর্ড।
২. কেন এটি গুরুত্বপূর্ণ
- কমপ্লায়েন্স: SOC 2, ISO 27001, PCI-DSS
- ফরেনসিক: ঘটনার তদন্ত
- জবাবদিহিতা: ব্যবহারকারী দায়বদ্ধতা
- ব্যবসায়িক বুদ্ধি: ব্যবহার patterns
৩. কী লগ করা হয়
সব ব্যবসা-অর্থবোধক ইভেন্ট: - Authentication: login success/failure, MFA, password change - Authorization: permission grant/revoke, role assign - Data: create/update/delete এন্টিটি - Financial: JE post/reverse, payment, refund - Configuration: partner setting পরিবর্তন - Integration: GDS call, webhook delivery - Period: open, soft-close, close, reopen
৪. স্কিমা
audit_logs (
log_id BIGINT PK,
partner_id BIGINT,
event_type VARCHAR(100), -- 'BOOKING.CREATED'
actor_type VARCHAR(20), -- 'USER' / 'API' / 'SYSTEM'
actor_id BIGINT,
actor_name VARCHAR(200), -- denormalized for history
target_entity_type VARCHAR(50), -- 'BOOKING', 'JE', etc.
target_entity_id BIGINT,
request_id VARCHAR(50), -- correlation
ip_address VARCHAR(50),
user_agent VARCHAR(500),
event_payload JSON,
diff JSON, -- before/after
reason VARCHAR(500),
timestamp DATETIME(6),
hash_chain_prev CHAR(64),
hash_chain_self CHAR(64)
)
৫. Tamper-evidence — Hash Chaining
প্রতিটি রো-এর hash_chain_self = SHA-256 of (prev_hash + all_columns_concatenated)।
আক্রমণকারী যদি পুরাতন রো পরিবর্তন করে → তার hash পরিবর্তন → পরের সব hash ভাঙে। ডিটেক্ট হয় nightly verification job-এ।
৬. ধারণ
| ক্যাটাগরি | ধারণ |
|---|---|
| Financial-impact events | ১০ বছর |
| Authentication events | ৭ বছর |
| Configuration events | ৭ বছর |
| Read events (sensitive) | ২ বছর |
| Marketing/preference events | ৩ বছর |
Glacier-এ আর্কাইভ পুরাতন রো।
৭. অ্যাক্সেস
audit.read.* permission প্রয়োজন। Auditor role-এ ডিফল্ট। অন্য কাউকে দিলে maker-checker চাই।
Audit log নিজেই অডিটেবল — কে দেখেছে সেটাও লগ।
৮. অনুসন্ধান ও ফিল্টার
UI-এ: - Time range - Actor (user) - Event type - Target entity - IP address - Free-text search
বড় partner-এর জন্য অনুসন্ধান optimised: (partner_id, timestamp) ইনডেক্স।
৯. এক্সপোর্ট
Audit pack: - Date range - Filter criteria - Export to S3 (CSV + JSON) - Hash chain verification certificate - Tamper-evident envelope
১০. ইন্টিগ্রিটি ভেরিফিকেশন
Nightly job:
for row in audit_logs ordered by id:
expected = sha256(prev_hash + serialize(row))
assert row.hash_chain_self == expected
ব্যর্থতা → security alert, incident response।
১১. সাধারণ ফাঁদ
- ⚠️ অডিট লগের mutation প্রয়োজনীয় — ভুল, append-only রাখুন
- ⚠️ Sensitive data (passwords, PAN) লগে — log redaction
- ⚠️ Hash chain skip — tamper detection ভেঙে যায়
- ⚠️ Audit log read events log না করা — meta-audit gap