This post explains pragmatic, cloud-native ways to detect and alert on audit log failures for AWS, Azure, and GCP to satisfy NIST SP 800-171 Rev.2 / CMMC 2.0 Level 2 control AU.L2-3.3.4 — the requirement to alert when audit logs are not available, failing, or are being disabled.
Framework, Key Objectives and Implementation Notes
Framework: Compliance Framework — Practice: Practice — Requirement: Ensure audit logs and logging services are monitored and failures or disabled logging generate alerts — Key Objectives: detect disabled logging, delivery failures, gaps in ingestion, and unauthorized changes to logging configuration; preserve log integrity and enable timely response — Implementation Notes: apply organization-level logging, centralize log sinks, use native eventing/alerting, protect log stores (immutability/encryption), and automate health checks with serverless checks or managed monitoring rules.
Why this control matters (risk)
If you do not implement cloud-native alerts for audit log failures you risk blind spots during incidents: attackers can disable or delete logs to hide activity, operations issues can interrupt log delivery, and forensic investigations become impossible. Non-detection will also cause non-conformity with NIST SP 800-171/CMMC audits, which can result in lost contracts and regulatory penalties for organizations handling CUI.
Implementation approach — AWS (practical steps)
Enable organization-wide CloudTrail (multi-region, log file validation) and deliver logs to a centralized, encrypted S3 bucket with a restrictive bucket policy and S3 Object Lock for retention when required. Create EventBridge rules that match CloudTrail management API calls that alter logging: StopLogging, DeleteTrail, UpdateTrail, and S3 bucket policy changes. Tie those rules to SNS/email or an automated runbook (Lambda/Systems Manager Automation) that notifies owners. In addition, implement health checks: deploy a small Lambda that runs on a schedule (EventBridge schedule) and checks the timestamp of the latest log object in the S3 bucket (or checks CloudWatch Logs ingestion metrics); alert if the last object is older than a configurable threshold (for example, 15 minutes or 1 hour depending on workload). Use AWS Config managed rules (cloudtrail-enabled, s3-bucket-logging-enabled) to detect configuration drift and route evaluations to SNS for alerts.
Implementation approach — Azure (practical steps)
Enable subscription- and tenant-level diagnostic settings to send Activity Logs and resource diagnostics to a central Log Analytics workspace and/or to a Storage Account/Event Hub. Create Azure Monitor alert rules driven by Log Analytics queries that detect missing ingestion (for example a query that returns zero ingestion in the last N minutes) or explicit audit events where a diagnostic setting was deleted/changed. Use Activity Log alerts to catch operations like Delete/Update on Microsoft.Insights/diagnosticSettings or role changes that could disable logging. Harden the logging pipeline by assigning a dedicated managed identity and locking the Storage Account (resource locks) and enable immutable blob storage (time-based retention or legal holds) to meet retention and integrity requirements.
Implementation approach — GCP (practical steps)
Enable Cloud Audit Logs for admin activity, data access (as needed), and system events at the organization/folder/project level, and export to a centralized sink (Cloud Storage, BigQuery, or Pub/Sub). Create log-based metrics from audit logs that indicate errors or sink deletions (e.g., count of logging.sinks.delete events) and configure Cloud Monitoring alerting policies on those metrics. For ingestion gap detection, create a metric that counts recent audit-log entries or deploy a Cloud Function that queries the Logging API for the most recent audit log timestamp and publishes a custom metric; trigger an alert when the timestamp is older than your threshold. Protect sinks with organization policies and IAM roles that restrict who can modify sink/configuration to reduce the risk of silent disabling.
Small-business real-world example
Scenario: A small defense contractor (10–50 employees) handling CUI needs a low-cost solution. Implementation: enable organization-level CloudTrail/Activity Log/Audit Logs and export to a single S3/Blob/GCS bucket. Deploy a scheduled serverless function (Lambda/Azure Function/Cloud Function) that checks the timestamp of the last log object every 10 minutes; if the last timestamp is older than 20 minutes, publish to SNS/Action Group/Cloud Monitoring to notify the security lead and create a ticket in their ITSM system. Combine this with EventBridge/Activity Log rules for StopLogging/Delete operations so any configuration tampering immediately triggers an alert. Use managed alerts (CloudWatch/Azure Monitor/Cloud Monitoring) so you don't need to run an always-on VM — keeping cost and operational overhead low.
Compliance tips and best practices
Practical tips: centralize logs and use organization policies to prevent per-project overrides; enforce immutable retention (S3 Object Lock, Azure immutable blobs, GCS bucket lock) for the retention window required by your policies; enable encryption with customer-managed keys and keep KMS access separate from administrators who can change logging settings; implement least-privilege IAM roles so only a small, audited role can change logging configurations. Regularly test alerts and runbooks: simulate StopLogging events in a controlled manner to verify notifications and escalation paths. Document the alert thresholds, playbooks for triage, and the exact controls used to satisfy AU.L2-3.3.4 for auditors.
Operationalizing and evidence for auditors
To demonstrate compliance, keep: (1) an architecture diagram showing centralized logging and alerting flow; (2) configuration snapshots (CloudTrail trails, diagnostic settings, logging sinks); (3) alert history from your monitoring system showing triggered alerts and incident tickets; (4) runbooks and test reports from scheduled simulation of failures. Automate attestations where possible: use IaC (CloudFormation/Terraform/Bicep) to enforce logging resources and use CI/CD to prevent drift. Include periodic reviews in your compliance calendar to validate that the alerting thresholds and contacts are up to date.
In summary, meeting NIST SP 800-171 / CMMC AU.L2-3.3.4 in the cloud requires centralization of audit logs, protection of log stores, native event detection for configuration changes, and periodic health checks that detect gaps in ingestion — all wired to reliable alerting and documented runbooks. By combining organization-level logging, event-driven detection (EventBridge/Activity Log/Cloud Logging), scheduled serverless health checks, and immutability/encryption safeguards, even small businesses can implement cost-effective, auditable alerting to satisfy the control and reduce incident risk.