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 onFrom PowerShell
Use the below command to enable audit_log_enabled :
Update-AzMySqlFlexibleServerConfiguration -ResourceGroupName <resourceGroup> -ServerName <serverName> -Name audit_log_enabled -Value onDefault 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;