Control: 5.3.3 Ensure server parameter 'audit_log_enabled' is set to 'ON' for MySQL flexible Server
Description
Enable audit_log_enabled on MySQL flexible servers.
Enabling audit_log_enabled helps MySQL Database to log items such as connection attempts to the server, DDL/DML access, and more. Log data can be used to identify, troubleshoot, and repair configuration errors and suboptimal performance.
Remediation
From Azure Portal
Part 1 - Turn on audit logs
- Login to Azure Portal using https://portal.azure.com.
 - Go to 
Azure Database for MySQL flexible servers. - For each database, under 
Settings, clickServer parameters. - Set 
audit_log_enabledtoON. - Click 
Save. 
Part 2 - Capture audit logs (diagnostic settings is for example only, send these logs to the appropriate data sink for your logging needs)
- Under Monitoring, select 
Diagnostic settings. - Select 
+ Add diagnostic setting. - Provide a diagnostic setting name.
 - Under Categories, select 
MySQL Audit Logs. - Specify destination details.
 - Click 
Save. 
It may take up to 10 minutes for the logs to appear in the configured destination.
From Azure CLI
Use the below command to enable audit_log_enabled :
az mysql flexible-server parameter set --resource-group <resourceGroup> --server-name <serverName> --name audit_log_enabled --value on
From PowerShell
Use the below command to enable audit_log_enabled :
Update-AzMySqlFlexibleServerConfiguration -ResourceGroupName <resourceGroup> -ServerName <serverName> -Name audit_log_enabled -Value on
Default Value
audit_log_enabled is set to OFF by default.
Usage
Run the control in your terminal:
powerpipe control run azure_compliance.control.cis_v300_5_3_3Snapshot and share results via Turbot Pipes:
powerpipe loginpowerpipe control run azure_compliance.control.cis_v300_5_3_3 --shareSQL
This control uses a named query:
with audit_log_enabled as(  select    id  from    azure_mysql_flexible_server,    jsonb_array_elements(flexible_server_configurations) as config  where    config ->> 'Name' = 'audit_log_enabled'    and config -> 'ConfigurationProperties' ->> 'value' = 'ON')select  s.id as resource,  case    when a.id is not null then 'ok'    else 'alarm'  end as status,  case    when a.id is not null then s.title || ' audit logging enabled.'    else s.title || ' audit logging disabled.'  end as reason    , s.resource_group as resource_group  , sub.display_name as subscriptionfrom  azure_mysql_flexible_server as s  left join audit_log_enabled as a on s.id = a.id  left join azure_subscription as sub on sub.subscription_id = s.subscription_id;