Clarify requirements & constraints
- Per-tenant isolation, cryptographic tamper-evidence, searchable for investigators, 7-year WORM retention with cost controls, minimal app latency, auditor-friendly chain-of-custody.
High-level architecture
- Lightweight app SDK → local write-ahead buffer → secure log forwarder (async) → Ingest cluster (Kafka with topic-per-tenant or tenant-tags) → Processing pipeline (enrichment, normalization, tenant-tokenization) → Immutable store + Query store → SIEM/Investigation UI
Core components & responsibilities
- Agent/SDK: synchronous local append, async flush to forwarder to avoid app latency.
- Forwarder: signs batches, stamps UUIDs, sequence numbers.
- Ingest (Kafka): durable, partitioned by tenant; enables replay.
- Immutable store: object storage with WORM (S3 Object Lock or Write Once File System), each object accompanied by:
- SHA-256 chunk Merkle trees
- Per-batch HMAC + KMS-backed signing
- Append-only index files
- Query store: ELK/Opensearch or columnar store that indexes metadata; raw immutable objects retained separately.
- Key Management: HSM or cloud KMS with separate tenant keys and key rotation policies.
- Chain-of-custody service: records ingest events, signatures, operator accesses in an auditable ledger (blockchain-style or signed sequence) with timestamps from NTP/PTP and optional RFC-3161 timestamps.
Tamper-evidence & chain-of-custody
- Each batch:
- Create Merkle root over records
- Sign Merkle root with KMS key -> produce signed manifest
- Store manifest in immutable store and ledger
- Ledger stores (signed) ingest metadata and access events; ledger itself is immutably backed (S3 Object Lock + periodic anchoring to public blockchain or notarization service) to demonstrate non-repudiation.
Tenant separation
- Logical: topic-per-tenant, index per-tenant, RBAC on query/UI.
- Cryptographic: per-tenant encryption keys; optional tenant-specific signing keys.
- Access controls: IAM, attribute-based access, attestation for auditor access.
Retention & cost management
- Hot index: last 90 days in Opensearch for fast queries.
- Warm: 90 days–1 year in lower-cost indexed store (compressed).
- Cold: 1–7 years raw objects in S3 Glacier Deep Archive (WORM).
- Lifecycle automation: move manifests and Merkle roots to hot index for investigations while raw payloads archived; restore on-demand with audit logging.
Queryability & investigations
- Index enriched metadata and hashes into SIEM; investigators can query metadata and then retrieve raw batch from immutable store and verify signatures/merkle proofs locally.
- Provide investigator tooling to verify Merkle proofs and signed manifests.
Low latency design
- App only writes to local durable buffer and returns fast.
- All cryptographic signing/enrichment done asynchronously by forwarder/ingest; latency impact to application is microseconds.
Operational & compliance controls
- Monitoring: pipeline health, missed batches, signature failures.
- Audit: operator actions logged, periodic attestation reports, automated integrity verification (recompute hashes).
- Testing: periodic restore drills, chain-of-custody demos for auditors.
Trade-offs
- Strong tamper-proofing increases storage/compute and complexity; anchoring to public blockchain improves non-repudiation but costs/time.
- Per-tenant topics increase Kafka management; use multi-tenant topics with tenant keys if scale demands.
Metrics to present
- Time-to-ingest, query latency (hot/warm), storage cost per tenant per year, verification time per batch, SLA for restore from archive.
This design satisfies tamper-evidence, tenant separation, queryability, 7-year WORM retention with cost tiers, minimal app latency, and produces verifiable chain-of-custody for auditors.