Back to Checks
Prowlerprowler-provider-m365
Purview audit log search is enabled
purview_audit_log_search_enabled
Service: purviewSeverity: critical
OfficialBuilt-inVerified
Categories:logginge3
Resource Type:NotDefined
Microsoft Purview tenant setting for audit log search is assessed to confirm unified audit log ingestion (UnifiedAuditLogIngestionEnabled), which records user and admin activities and makes them searchable.
Risk
Without audit log ingestion/search, activity trails are missing or delayed, reducing visibility and accountability.
- Data exfiltration and privilege abuse go undetected (confidentiality/integrity)
- Incident response and forensics fail due to absent evidence, increasing dwell time
Run this check with Prowler
Run in Prowler CloudRun
prowler m365 --checks purview_audit_log_search_enabledRecommendation
Enable and keep audit log search on (UnifiedAuditLogIngestionEnabled=true). Apply least privilege to audit roles, set retention aligned to sensitivity, forward logs to a SIEM for defense in depth, and routinely review and alert on audit events. Avoid disabling auditing even when using third-party tools.
Remediation
CLI
Set-AdminAuditLogConfig -UnifiedAuditLogIngestionEnabled $trueOther
1Go to https://compliance.microsoft.com and sign in with an admin account
2Open Solutions > Audit
3Click Start recording user and admin activity
4Click Yes to confirm
Check Code
from typing import List
from prowler.lib.check.models import Check, CheckReportM365
from prowler.providers.m365.services.purview.purview_client import purview_client
class purview_audit_log_search_enabled(Check):
"""Check if Purview audit log search is enabled.
Attributes:
metadata: Metadata associated with the check (inherited from Check).
"""
def execute(self) -> List[CheckReportM365]:
"""Execute the check for audit log search
This method checks if audit log search is enabled Purview settings
Returns:
List[CheckReportM365]: A list of reports containing the result of the check.
"""
findings = []
audit_log_config = purview_client.audit_log_config
if audit_log_config:
report = CheckReportM365(
metadata=self.metadata(),
resource=audit_log_config if audit_log_config else {},
resource_name="Purview Settings",
resource_id="purviewSettings",
)
report.status = "FAIL"
report.status_extended = "Purview audit log search is not enabled."
if purview_client.audit_log_config and getattr(
purview_client.audit_log_config, "audit_log_search", False
):
report.status = "PASS"
report.status_extended = "Purview audit log search is enabled."
findings.append(report)
return findings