Enterprise Features
Fapilog provides building blocks for enterprise environments. This page highlights the compliance, audit, and security capabilities you can compose with fapilog and its add-ons. It is not a certification or a guarantee of regulatory compliance; you must validate controls for your own environment.
At a Glance
Capability |
Description |
|---|---|
Compliance Controls (assist) |
Policy templates and logging patterns that can be aligned to SOC2, HIPAA, GDPR, PCI-DSS, ISO 27001, SOX (you own control validation) |
Audit Trail |
Structured audit events with optional tamper-evident hash chains (via add-on) |
Data Protection |
PII/PHI tagging, redaction configuration |
Access Control |
Role-based access settings and auth mode configuration helpers |
Integrity |
SHA-256 checksums, sequence numbers, chain verification (when enabled) |
Built-in Audit Sink
Enable compliance logging via
core.sinks = ["audit"]; configure withsink_config.audit.*Uses the existing
AuditTrailwith hash-chain integrity and compliance metadataSee Audit Sink (Compliance Trail) for configuration and verification
Add-on spotlight: Tamper-Evident Logging + KMS/Vault
What:
fapilog-tamperadd-on that adds per-record MAC/signatures, sealed manifests, and cross-file chain verification.Key management: Integrates with AWS KMS, GCP KMS, Azure Key Vault, and HashiCorp Vault (including KMS-native signing so keys never leave the provider). Optional extras:
fapilog-tamper[all-kms].Docs: See Enterprise Key Management for Tamper-Evident Logging for architecture, configuration, and deployment guidance.
Use cases: Regulated audit trails (SOX/SOC2/HIPAA/PCI), shared services with centralized key custodians, and environments that require attested manifests for log rotation.
Compliance Framework Support (assist, not certification)
Fapilog ships configuration helpers that can map to common frameworks. Use them as starting points and validate against your own policies and auditors:
from fapilog_audit import ComplianceLevel, CompliancePolicy
# Configure for your compliance requirements
policy = CompliancePolicy(
level=ComplianceLevel.SOC2,
retention_days=365,
require_integrity_check=True,
real_time_alerts=True,
)
Example control mappings (non-exhaustive)
Framework |
Control areas this can help with |
Redaction Preset |
|---|---|---|
SOC2 |
Integrity checks, access logging, audit trails |
|
HIPAA |
PHI redaction, minimum necessary patterns, audit trails |
|
GDPR |
PII redaction, data subject request support (application responsibility) |
|
PCI-DSS |
Access logging, audit trails (encryption and card data handling are your responsibility) |
|
ISO 27001 |
Security logging and integrity controls |
|
SOX |
Change/event logging with chain verification |
|
See Redaction Presets for complete field lists covered by each preset.
Audit Trail System
The AuditTrail building blocks provide structured audit logging. You control event content and ensure policies meet your regulatory scope:
from fapilog_audit import AuditTrail, AuditEventType, ComplianceLevel, CompliancePolicy
# Initialize audit trail
audit = AuditTrail(
policy=CompliancePolicy(level=ComplianceLevel.SOC2),
storage_path=Path("./audit_logs"),
)
await audit.start()
# Log security events
await audit.log_security_event(
AuditEventType.AUTHENTICATION_FAILED,
"Login attempt failed",
user_id="user@example.com",
client_ip="192.168.1.100",
)
# Log data access for compliance
await audit.log_data_access(
resource="customer_records",
operation="read",
user_id="admin@example.com",
data_classification="confidential",
contains_pii=True,
)
# Ensure queued audit events are flushed before shutdown
await audit.stop() # stop() drains pending events; use audit.drain() for manual flush
Audit Event Types
Category |
Event Types |
|---|---|
Security |
|
Data |
|
System |
|
Config |
|
Compliance |
|
Tamper-Evident Hash Chains
Audit events include integrity fields to detect tampering or gaps:
# Each AuditEvent automatically includes:
event.sequence_number # Monotonic counter (gap detection)
event.previous_hash # SHA-256 of previous event (chain linkage)
event.checksum # SHA-256 of this event (integrity)
Chain Verification
Verify integrity of audit logs at any time:
from fapilog_audit import AuditTrail
# Load events from storage
events = await audit.get_events(
start_time=datetime(2025, 1, 1),
end_time=datetime(2025, 12, 31),
)
# Verify chain integrity
result = AuditTrail.verify_chain(events)
# Or verify directly from disk:
# result = await audit.verify_chain_from_storage()
if result.valid:
print(f"✓ {result.events_checked} events verified")
else:
print(f"✗ Chain broken at sequence {result.first_invalid_sequence}")
print(f" Error: {result.error_message}")
What Chain Verification Detects
Tampering - Any modification to an event breaks the checksum
Deletion - Missing events create sequence gaps
Insertion - Added events break the hash chain
Reordering - Events out of sequence fail validation
Data Protection
PII/PHI Classification
Flag events containing sensitive data:
await audit.log_data_access(
resource="patient_records",
operation="read",
contains_pii=True, # Personally Identifiable Information
contains_phi=True, # Protected Health Information (HIPAA)
data_classification="restricted",
)
Automatic Redaction
Fapilog provides compliance-focused redaction presets that automatically protect sensitive fields:
from fapilog import LoggerBuilder
# HIPAA: Protects PHI (18 identifier categories)
logger = LoggerBuilder().with_redaction(preset="HIPAA_PHI").build()
# GDPR: Protects EU personal data
logger = LoggerBuilder().with_redaction(preset="GDPR_PII").build()
# PCI-DSS: Protects cardholder data
logger = LoggerBuilder().with_redaction(preset="PCI_DSS").build()
# Multiple regulations
logger = (
LoggerBuilder()
.with_redaction(preset=["HIPAA_PHI", "PCI_DSS", "CREDENTIALS"])
.build()
)
Compliance Presets:
Preset |
Regulation |
What It Protects |
|---|---|---|
|
HIPAA |
MRN, SSN, DOB, contact info, 18 PHI identifiers |
|
GDPR |
Email, phone, name, IP, national IDs, 70+ fields |
|
UK-GDPR |
All GDPR fields plus NHS number, NI number |
|
PCI-DSS |
Card numbers, CVV, expiry, cardholder name |
|
CCPA |
California personal information |
|
N/A |
Passwords, API keys, tokens, secrets |
See Redaction Presets for complete field lists.
Important: Redaction matches field names, not field content. PII embedded in message strings is not redacted. See Compliance Redaction Cookbook for what works and what doesn’t.
Access Control
Note:
AccessControlSettingsprovides configuration primitives only. Fapilog does not enforce access control - you must integrate these settings with your identity provider and application middleware.
Define access control policies using the configuration model:
from fapilog.core.access_control import AccessControlSettings, validate_access_control
access = AccessControlSettings(
enabled=True,
auth_mode="oauth2", # Options: none, basic, token, oauth2
allowed_roles=["admin", "auditor", "system"],
require_admin_for_sensitive_ops=True,
allow_anonymous_read=False,
allow_anonymous_write=False,
)
# Validate configuration against security baselines
result = validate_access_control(access)
if not result.ok:
for issue in result.issues:
print(f"{issue.field}: {issue.message}")
Integration responsibility: Use these settings to configure your authentication middleware, API gateway, or application-level access checks. For example:
# Example: FastAPI dependency using AccessControlSettings
async def require_role(role: str, settings: AccessControlSettings = Depends(get_settings)):
if not settings.enabled:
return
if role not in settings.allowed_roles:
raise HTTPException(403, "Insufficient permissions")
Retention Policies
Configure log retention to align with your data lifecycle requirements:
policy = CompliancePolicy(
retention_days=365, # Keep logs for 1 year
archive_after_days=90, # Archive after 90 days
)
Note: Fapilog provides retention configuration as library primitives. Actual retention enforcement (deletion, archival) is the responsibility of your application or infrastructure.
Compliance Validation
Validate your configuration against compliance baselines:
from fapilog_audit import validate_compliance_policy
result = validate_compliance_policy(policy)
if not result.ok:
for issue in result.issues:
print(f"[{issue.severity}] {issue.field}: {issue.message}")
Example validation output:
[error] retention_days: must be >= 30
[error] require_integrity_check: must be enabled
[error] gdpr_data_subject_rights: required
Real-Time Compliance Alerts
Note: Alert detection is implemented, but alert delivery is a stub. You must provide your own alerting integration.
Configure which events should trigger alerts:
policy = CompliancePolicy(
real_time_alerts=True,
alert_on_critical_errors=True,
alert_on_security_events=True,
)
When these flags are enabled, the AuditTrail identifies events that should trigger alerts (security events, critical errors, PII access for GDPR, PHI access for HIPAA). However, the actual alert delivery is not implemented - you must integrate your own alerting system.
Option 1: Custom sink for alert routing
class ComplianceAlertSink:
async def write(self, entry: dict) -> None:
if entry.get("log_level") == "SECURITY":
await send_to_pagerduty(entry)
await send_to_slack(entry)
Option 2: Subclass AuditTrail and override _send_compliance_alert
class MyAuditTrail(AuditTrail):
async def _send_compliance_alert(self, event: AuditEvent) -> None:
await send_to_pagerduty(event.model_dump())
await send_to_slack(event.message)
Integration with Enterprise Systems
SIEM Integration
Audit events export cleanly for SIEM ingestion:
# Events provide structured data for SIEM transformation
event_dict = event.model_dump()
# Transform to your SIEM format (CEF, LEEF, etc.)
cef_line = transform_to_cef(event_dict)
Log Aggregation
Fapilog’s JSON output integrates with standard log aggregators:
Splunk - JSON logs ingest directly
Elasticsearch - Structured fields map to indices
Datadog - Labels and metadata propagate
CloudWatch - JSON Insights queries work out of the box
Quick Reference: Compliance Checklist
Requirement |
Fapilog Feature |
Configuration |
|---|---|---|
Audit trail |
|
|
Log integrity |
Hash chains |
Automatic (sequence + checksum) |
URL credential protection |
|
Enabled by default |
HIPAA PHI redaction |
|
|
GDPR PII redaction |
|
|
PCI-DSS redaction |
|
|
Credential redaction |
|
|
Access control |
|
|
Retention policy |
|
|
Security events |
|
|
Data classification |
Event flags |
|
Further Reading
Redaction Presets - Complete field lists for HIPAA, GDPR, PCI-DSS
Compliance Redaction Cookbook - What works and what doesn’t
Redaction Configuration - Builder API and settings
API Reference: Configuration - Settings reference