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_enabled
toON
. - 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_3
Snapshot and share results via Turbot Pipes:
powerpipe loginpowerpipe control run azure_compliance.control.cis_v300_5_3_3 --share
SQL
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, azure_subscription as subwhere sub.subscription_id = s.subscription_id;