Cet article explique comment activer et utiliser le plug-in d'audit Cloud SQL pour MySQL. Pour une présentation générale, consultez la page Audit de la base de données MySQL. Pour en savoir plus sur les plug-ins MySQL, consultez la page Chargement des plug-ins MySQL.
Avant de commencer
Journaux d'audit pour l'accès aux données
Activez et configurez les journaux d'audit pour l'accès aux données. Consultez la section Configurer les journaux d'audit pour l'accès aux données.
Droits requis pour les utilisateurs chargés de l'audit
Vous devez disposer des droits EXECUTE
sur les procédures d'audit stockées pour les exécuter. Si un administrateur doit modifier les droits d'un auditeur pour l'accès aux procédures d'audit stockées, il doit utiliser les commandes GRANT
ou REVOKE
dans le client mysql
. Pour en savoir plus sur les droits des utilisateurs, consultez la page Droits d'utilisateur de MySQL. Par exemple, si un administrateur souhaite accorder à un auditeur nommé user
l'accès permettant de gérer les règles d'audit, il peut accorder les droits à l'aide de l'instruction suivante :
CREATE USER 'user'@'%' IDENTIFIED BY 'password'; GRANT EXECUTE ON PROCEDURE mysql.cloudsql_list_audit_rule TO 'user'@'%';
Si, par la suite, cet administrateur souhaite révoquer l'accès de l'auditeur, il peut révoquer les droits à l'aide de l'instruction suivante :
REVOKE ALL ON PROCEDURE mysql.cloudql_list_audit_rule FROM 'user'@'%';
Par défaut, les utilisateurs créés avec Cloud SQL (à l'exception des utilisateurs IAM) sont des administrateurs disposant de tous les droits, à l'exception de FILE
et de SUPER
, mais incluant tous les droits sur les procédures d'audit stockées. Par défaut, les utilisateurs de base de données IAM ne disposent d'aucun droit.
Activer le plug-in d'audit Cloud SQL pour MySQL
Le plug-in d'audit Cloud SQL pour MySQL (cloudsql_mysql_audit
) contrôle le comportement d'audit pour une instance de base de données spécifique. Pour utiliser le plug-in, vous devez d'abord l'activer sur l'instance Cloud SQL.
Pour activer le plug-in cloudsql_mysql_audit
, utilisez l'une des options suivantes :
--cloudsql_mysql_audit=ON
Indique au serveur d'activer le plug-in. Si l'initialisation du plug-in échoue, le serveur s'exécute avec le plug-in désactivé.
--cloudsql_mysql_audit=FORCE
Indique au serveur d'activer le plug-in, mais si l'initialisation du plug-in échoue, le serveur ne démarre pas. En d'autres termes, cette option impose au serveur de s'exécuter avec le plug-in activé ou pas du tout.
--cloudsql_mysql_audit=FORCE_PLUS_PERMANENT
Semblable à FORCE, mais empêche également le déchargement du plug-in lors de l'exécution. Si un utilisateur tente de décharger le plug-in avec UNINSTALL PLUGIN, une erreur se produit.
Les états d'activation du plug-in sont visibles dans la colonne PLUGIN_STATUS
de la table INFORMATION_SCHEMA.PLUGINS.
Console
-
Dans Google Cloud Console, accédez à la page Instances Cloud SQL.
- Ouvrez l'instance et cliquez sur Modifier.
- Faites défiler jusqu'à la section Options.
- Pour définir une nouvelle option sur l'instance, cliquez surAjouter une option, sélectionnez
cloudsql_mysql_audit
dans le menu déroulant, puis définissez sa valeur surON
. - Cliquez sur Enregistrer pour enregistrer les modifications.
- Confirmez les modifications effectuées dans la section Options à partir de la page de présentation.
gcloud
Remplacez les éléments suivants :
- INSTANCE_NAME : nom de l'instance sur laquelle vous définissez l'option.
gcloud sql instances patch INSTANCE_NAME \ --database-flags cloudsql_mysql_audit=ON
Cette commande écrase toutes les options de base de données précédemment définies. Pour les conserver et en ajouter d'autres, vous devez inclure les valeurs de toutes les options que vous souhaitez définir sur l'instance. Toute option non spécifiquement incluse est définie sur sa valeur par défaut.
Pour les options sans valeur, spécifiez le nom de l'option suivi d'un signe égal (=
).
REST v1beta4
Avant d'utiliser les données de requête ci-dessous, effectuez les remplacements suivants :
- project-id : ID du projet
- instance-id : ID de l'instance.
Méthode HTTP et URL :
PATCH https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id
Corps JSON de la requête :
{ "settings": { "databaseFlags": [ { "name": "cloudsql_mysql_audit", "value": "ON" } ] } }
Pour envoyer votre requête, développez l'une des options suivantes :
Vous devriez recevoir une réponse JSON de ce type :
REST v1
Avant d'utiliser les données de requête ci-dessous, effectuez les remplacements suivants :
- project-id : ID du projet
- instance-id : ID de l'instance.
Méthode HTTP et URL :
PATCH https://sqladmin.googleapis.com/sql/v1/projects/project-id/instances/instance-id
Corps JSON de la requête :
{ "settings": { "databaseFlags": [ { "name": "cloudsql_mysql_audit", "value": "ON" } ] } }
Pour envoyer votre requête, développez l'une des options suivantes :
Vous devriez recevoir une réponse JSON de ce type :
Paramètres du plug-in d'audit Cloud SQL pour MySQL
Vous pouvez affiner le comportement du plug-in d'audit Cloud SQL pour MySQL à l'aide des options ci-dessous. Toutes les options peuvent être modifiées sans redémarrer la base de données. Pour comprendre comment gérer les options, consultez la page Configurer des options de base de données.
cloudsql_mysql_audit_data_masking_regex
Une expression régulière utilisée pour le masquage de données et conforme aux expressions régulières compatibles avec celles du langage Perl.
Par défaut, dans le journal d'audit de sortie, les mots de passe utilisateur (
<psw>
) sont remplacés par un masque de mot de passe "***
".L'expression régulière n'est appliquée qu'aux instructions dont le type de commande est spécifié à l'aide de
cloudsql_mysql_audit_data_masking_cmds
. Lorsque vous utilisezgcloud
, vous devez utiliser un fichier d'options pour définir des valeurs comportant des caractères spéciaux complexes.Valeurs par défaut de cette option :
identified(?:/\*.*?\*/|\s)*?by(?:/\*.*?\*/|\s)*?(?:password)?(?:/\*.*?\*/| \s)*?['|"](?<psw>.*?)(?<!\\)['|"]|password(?:/\*.*?\*/|\s)*?\((?:/\*.*?\*/| \s)*?['|"](?<psw>.*?)(?<!\\)['|"](?:/\*.*?\*/|\s)*?\)|password(?:/\*.*?\*/| \s)*?(?:for(?:/\*.*?\*/|\s)*?\S+?)?(?:/\*.*?\*/|\s)*?=(?:/\*.*?\*/|\s)*?[ '|"](?<psw>.*?)(?<!\\)['|"]|password(?:/\*.*?\*/|\s)*?['|"](?<psw>.*?) (?<!\\)['|"]
Consultez les exemples suivants.
Sans expression régulière
cloudsql_mysql_audit_data_masking_regex
, une entrée de journal d'audit décrivant une commande de création d'utilisateur s'affiche comme suit :{..."cmd":"create_user","query":"create user user1@'localhost' identified by 'pw'"}
Avec la valeur par défaut
cloudsql_mysql_audit_data_masking_regex
, la même entrée de journal d'audit apparaît comme :{..."cmd":"create_user","query":"create user user1@'localhost' identified by '***'"}
Si vous définissez
cloudsql_mysql_audit_data_masking_regex
sur(?<psw>.*)
, Cloud SQL peut filtrer l'ensemble du contenu de la requête.{..."cmd":"create_user","query":"***"}
cloudsql_mysql_audit_data_masking_cmds
Liste des commandes séparées par des virgules auxquelles l'expression régulière de masquage de données (cloudsql_mysql_audit_data_masking_regex) est appliquée. Définissez une chaîne vide (
""
) pour arrêter le filtrage. Lorsque vous utilisezgcloud
, vous devez utiliser un fichier d'options pour définir une liste d'éléments séparés par des virgules. La valeur par défaut inclut les commandes MySQL avec la clause de mot de passe suivante :create_user,alter_user,grant,update
cloudsql_mysql_audit_max_query_length
Contrôle la longueur maximale des requêtes à enregistrer dans le journal d'audit. Si vous n'avez pas besoin de voir les détails de la requête, vous pouvez utiliser
0
, ce qui signifie que la requête n'est pas enregistrée dans le journal d'audit. Cela permet de réduire l'espace de stockage utilisé par le journal et de réduire les coûts.-1
signifie qu'il n'y a aucune limitation. La valeur par défaut est-1
.cloudsql_mysql_audit_log_write_period
Période d'écriture du journal : le thread d'écriture écrit le contenu du tampon sur le disque une fois que le nombre de millisecondes défini pour cette option est atteint ou lorsque le tampon est plein. Si vous définissez cette option sur
0
, le thread utilisateur est contraint d'attendre une notification du thread d'écriture indiquant que l'écriture est terminée. La valeur par défaut est500
(millisecondes).
Console
-
Dans Google Cloud Console, accédez à la page Instances Cloud SQL.
- Ouvrez l'instance et cliquez sur Modifier.
- Faites défiler jusqu'à la section Options.
- Pour définir une nouvelle option sur l'instance, cliquez sur Ajouter une option. Ensuite, choisissez une des options de base de données de la liste ci-dessus dans le menu déroulant et définissez ses paramètres.
- Cliquez sur Enregistrer pour enregistrer les modifications.
- Confirmez les modifications effectuées dans la section Options à partir de la page de présentation.
gcloud
Remplacez les éléments suivants :
- INSTANCE_NAME : nom de l'instance sur laquelle vous définissez l'option.
- FLAG_NAME : nom de l'option de configuration.
- FLAG_VALUE : valeur à utiliser pour l'option.
gcloud sql instances patch INSTANCE_NAME / --database-flags FLAG_NAME=FLAG_VALUE
REST v1beta4
Avant d'utiliser les données de requête ci-dessous, effectuez les remplacements suivants :
- project-id : ID du projet
- instance-id : ID de l'instance.
Méthode HTTP et URL :
PATCH https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id
Corps JSON de la requête :
{ "settings": { "databaseFlags": [ { "name": "flag_name", "value": "flag_value" } ] } }
Pour envoyer votre requête, développez l'une des options suivantes :
Vous devriez recevoir une réponse JSON de ce type :
REST v1
Avant d'utiliser les données de requête ci-dessous, effectuez les remplacements suivants :
- project-id : ID du projet
- instance-id : ID de l'instance.
Méthode HTTP et URL :
PATCH https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id
Corps JSON de la requête :
{ "settings": { "databaseFlags": [ { "name": "flag_name", "value": "flag_value" } ] } }
Pour envoyer votre requête, développez l'une des options suivantes :
Vous devriez recevoir une réponse JSON de ce type :
Configurer l'audit de base de données
Gérer les règles d'audit
Cloud SQL utilise un ensemble de procédures stockées pour gérer les règles d'audit du plug-in d'audit Cloud SQL pour MySQL. Quatre procédures stockées vous permettent de créer, répertorier, mettre à jour et supprimer des règles d'audit.
Chaque procédure stockée renvoie deux variables : @outval
et @outmsg
. Ces variables indiquent respectivement le code d'état et le message d'erreur de la procédure stockée. Vous pouvez utiliser un astérisque (*
) comme caractère générique pour rechercher des noms d'utilisateur, d'hôte, de base de données et de table. Utilisez l'astérisque comme suffixe, préfixe ou les deux. En outre, vous pouvez utiliser le caractère générique %
uniquement pour les hôtes. Vous pouvez utiliser l'accent grave (`
) pour indiquer qu'une chaîne doit être utilisée de manière littérale. Par exemple, `ta*ble`
doit correspondre littéralement.
Pour que les modifications prennent effet, vous devez soit exécuter les procédures stockées avec le paramètre d'entrée reload_mode=1
, soit appeler mysql.cloudsql_reload_audit_rule(1)
.
Créer des règles d'audit
Vous pouvez utiliser mysql.cloudsql_create_audit_rule
pour créer une règle d'audit.
Pour créer la règle d'audit et la charger en un seul appel, utilisez l'instruction suivante :
CALL mysql.cloudsql_create_audit_rule('user@host','db','obj','ops','op_result',1, @outval,@outmsg);
SELECT @outval, @outmsg;
Pour créer la règle et la charger dans des appels distincts, utilisez l'instruction suivante :
CALL mysql.cloudsql_create_audit_rule('user@host','db','obj','ops','op_result',0, @outval,@outmsg);
SELECT @outval, @outmsg;
CALL mysql.cloudsql_reload_audit_rule(1);
La commande précédente vous permet de créer plusieurs règles, puis de charger simultanément toutes les modifications.
Les tableaux suivants présentent les paramètres d'entrée et de sortie de la commande précédente.
Paramètres d'entrée | |||
---|---|---|---|
Nom | Type | Description | Exemple |
user@host ou user@ip |
chaîne |
Liste des utilisateurs de base de données à auditer, séparés par des virgules. Utilisez le format user@host ou user@ip . |
user1@localhost ,user1@* ,user1@% ,user@ip
|
db |
chaîne | Liste des bases de données à auditer, séparées par des virgules. | db1,db2,db3* |
obj |
chaîne | Liste des objets de base de données à auditer, séparés par des virgules. | table1,table2,table3* |
ops |
chaîne | Liste des actions de base de données à auditer, séparées par des virgules. | select,delete,insert |
op_result |
chaîne | Auditer les opérations ayant réussi (S), ayant échoué (U), ou les deux (B). | S ,U ou B |
reload_mode |
Entier | 0 pour ne pas recharger la règle et 1 pour la recharger. |
0 ou 1 |
Paramètres de sortie | |||
---|---|---|---|
Nom | Type | Description | Exemple |
@outval |
int | Code d'état de la procédure stockée. | 0 pour une réussite et 1 pour un échec. |
@outmsg |
chaîne | Message d'erreur de la procédure stockée. |
Les règles d'audit présentent les limites suivantes :
Limites | |
---|---|
Longueur de user , db , obj et ops . |
La taille maximale est de 2 048 caractères. |
Nombre de combinaisons de user , db , obj et ops . |
Le nombre maximum est de 1 000 combinaisons. Par exemple, une règle d'audit s'appliquant à user1,user2 , db1, db2 , table1,table2 et select,delete génère 2 x 2 x 2 x 2 = 16 combinaisons. |
Répertorier les règles d'audit
Les auditeurs peuvent utiliser mysql.cloudsql_list_audit_rule
pour répertorier les règles d'audit existantes.
Pour répertorier les règles d'audit 1 et 2, utilisez les commandes suivantes :
CALL mysql.cloudsql_list_audit_rule('1,2',@outval,@outmsg);
SELECT @outval, @outmsg;
Pour répertorier toutes les règles d'audit, procédez comme suit :
CALL mysql.cloudsql_list_audit_rule('*',@outval,@outmsg);
SELECT @outval, @outmsg;
Les tableaux suivants présentent les paramètres d'entrée et de sortie de la commande précédente.
Paramètres d'entrée | |||
---|---|---|---|
Nom | Type | Description | Exemple |
rule_id |
chaîne | Liste des ID de règle à supprimer, séparés par des virgules. | 1,2,3 |
Paramètres de sortie | |||
---|---|---|---|
Nom | Type | Description | Exemple |
@outval |
int | Code d'état de la procédure stockée. | 0 pour une réussite et 1 pour un échec. |
@outmsg |
chaîne | Message d'erreur de la procédure stockée. |
Mettre à jour les règles d'audit
Vous pouvez utiliser mysql.cloudsql_update_audit_rule
pour mettre à jour une règle d'audit existante.
Pour mettre à jour la règle d'audit et la recharger en un seul appel, utilisez l'instruction suivante :
CALL mysql.cloudsql_update_audit_rule(1,'user@host','db','obj','ops','op_result',1,@outval,@outmsg);
SELECT @outval, @outmsg;
Vous pouvez mettre à jour plusieurs règles d'audit au cours d'une session avant de les recharger. Vous pouvez utiliser la procédure stockée suivante pour mettre à jour des règles au cours d'une étape, puis les recharger lors d'une étape ultérieure.
CALL mysql.cloudsql_update_audit_rule(1,'user@host','db','obj','ops','op_result',0,@outval,@outmsg);
SELECT @outval, @outmsg;
CALL mysql.cloudsql_reload_audit_rule(1);
Les tableaux suivants présentent les paramètres d'entrée et de sortie de la commande précédente.
Paramètres d'entrée | |||
---|---|---|---|
Nom | Type | Description | Exemple |
rule_id |
int | ID de la règle à mettre à jour. | 5 |
user@host |
chaîne |
Liste des utilisateurs de base de données à auditer, séparés par des virgules. Utilisez le format user@host. |
user1@localhost,user1@* user1@%
|
db |
chaîne | Liste des bases de données à auditer, séparées par des virgules. | db1,db2,db3* |
obj |
chaîne | Liste des objets de base de données à auditer, séparés par des virgules. | table1,table2,table3* |
ops |
chaîne | Liste des actions de base de données à auditer, séparées par des virgules. | SELECT,DELETE,INSERT |
op_result |
chaîne | Auditer les opérations ayant réussi (S), ayant échoué (U), ou les deux (B). | S ,U ou B |
reload_mode |
Entier | 0 pour ne pas recharger la règle et 1 pour la recharger. |
0 ou 1 |
Paramètres de sortie | |||
---|---|---|---|
Nom | Type | Description | Exemple |
@outval |
int | Code d'état de la procédure stockée. | 0 pour une réussite et 1 pour un échec. |
@outmsg |
chaîne | Message d'erreur de la procédure stockée. |
Les règles d'audit présentent les limites suivantes :
Limites | |
---|---|
Longueur de user , db , obj et ops . |
La taille maximale est de 2 048 caractères. |
Nombre de combinaisons de user , db , obj et ops . |
Le nombre maximum est de 1 000 combinaisons. Par exemple, une règle d'audit s'appliquant à user1,user2 , db1, db2 , table1,table2 et select,delete génère 2 x 2 x 2 x 2 = 16 combinaisons. |
Supprimer des règles d'audit
Vous pouvez utiliser la commande mysql.cloudsql_delete_audit_rule
pour supprimer une règle d'audit existante.
Pour supprimer la règle d'audit et la recharger en un seul appel, utilisez l'instruction suivante :
CALL mysql.cloudsql_delete_audit_rule('1,2',1,@outval,@outmsg);
SELECT @outval, @outmsg;
Pour supprimer la règle et la recharger charger dans des appels distincts, utilisez l'instruction suivante :
CALL mysql.cloudsql_delete_audit_rule('1,2',0,@outval,@outmsg);
SELECT @outval, @outmsg;
CALL cloudsql_reload_audit_rule(1);
La commande précédente vous permet de supprimer plusieurs règles, puis de recharger simultanément toutes les modifications.
Les tableaux suivants présentent les paramètres d'entrée et de sortie de la commande précédente.
Paramètres d'entrée | |||
---|---|---|---|
Nom | Type | Description | Exemple |
rule_id |
chaîne | Liste des ID de règle à supprimer, séparés par des virgules. | 1,2,3 |
reload_mode |
Entier | 0 pour ne pas recharger la règle et 1 pour la recharger. |
0 ou 1 |
Paramètres de sortie | |||
---|---|---|---|
Nom | Type | Description | Exemple |
@outval |
int | Code d'état de la procédure stockée. | 0 pour une réussite et 1 pour un échec. |
@outmsg |
chaîne | Message d'erreur de la procédure stockée. |
Groupes d'opérations
Le plug-in d'audit Cloud SQL pour MySQL permet d'utiliser des groupes d'opérations dans les définitions de règles pour auditer des collections d'activités. Vous pouvez utiliser les groupes d'opérations suivants pour simplifier la création de règles d'audit.
Groupes d'opérations | Opérations incluses |
---|---|
dql |
select |
dml |
delete ,delete_multi ,
insert , insert_select ,
load , replace ,
replace_select , truncate ,
update , update_multi , |
ddl |
alter_db , alter_event ,
alter_function , alter_procedure ,
alter_table , alter_user ,
create_db , create_event ,
create_function , create_index ,
create_procedure , create_table ,
create_trigger , create_user ,
create_udf , create_view ,
drop_db , drop_event ,
drop_function , drop_index ,
drop_procedure , drop_table ,
drop_trigger , drop_user ,
drop_view , rename_table ,
rename_user
|
dcl |
grant , revoke ,
revoke_all |
show |
show_binlog_events ,
show_create_func , show_create_proc ,
show_procedure_code ,
show_create_event ,
show_create_trigger , show_events ,
show_function_code , show_grants ,
show_relaylog_events , show_triggers ,
|
call |
call_procedure |
Afficher les journaux d'audit de base de données Cloud SQL
Afficher les enregistrements des journaux d'audit de base de données dans Cloud Logging
Pour afficher les journaux d'audit de base de données, commencez par vous assurer que vous avez activé les journaux d'audit pour l'accès aux données dans votre projet. Les journaux d'audit MySQL générés pour une instance donnée sont envoyés à Cloud Logging en tant que journaux d'audit pour l'accès aux données. Vous pouvez afficher les journaux d'audit générés pour la base de données MySQL via l'application Explorateur de journaux.
Dans l'explorateur de journaux, vous pouvez afficher les journaux d'audit MySQL à l'aide de la requête suivante. Elle affiche tous les journaux d'audit de base de données MySQL d'un projet Cloud SQL donné via l'interface de filtrage avancé.
Remplacez les éléments suivants :
- PROJECT_NAME : nom du projet pour lequel vous souhaitez obtenir des journaux d'audit.
resource.type="cloudsql_database" logName="projects/PROJECT_NAME/logs/cloudaudit.googleapis.com%2Fdata_access" protoPayload.request.@type="type.googleapis.com/google.cloud.sql.audit.v1.MysqlAuditEntry"
Vous pouvez également sélectionner le filtre de journal cloudaudit.googleapis.com/data_access.
Format des journaux d'audit
Un journal d'audit comporte les champs suivants.
Nom du champ | Description | ||||||
---|---|---|---|---|---|---|---|
msgType |
Chaîne représentant le type de message du journal d'audit. La seule valeur possible pour msgType est activity . |
||||||
status |
État de l'opération, success ou unsuccessful . |
||||||
date |
Horodatage indiquant l'heure à laquelle l'événement d'audit a été généré. | ||||||
threadId |
ID du thread MySQL. | ||||||
queryId |
ID de la requête MySQL. | ||||||
user |
Chaîne représentant le nom d'utilisateur envoyé par le client. Elle peut être différente de la valeur "privUser". | ||||||
privUser |
Chaîne représentant le nom d'utilisateur sous lequel le serveur a authentifié le client. Il s'agit du nom d'utilisateur utilisé par le serveur pour la vérification des droits. Il peut différer de la valeur "user". | ||||||
gcpIamAccount |
Chaîne représentant le compte de service ou compte IAM GCP. | ||||||
ip |
Chaîne représentant l'adresse IP du client. | ||||||
host |
Chaîne représentant le nom d'hôte du client. | ||||||
errCode
|
Code d'erreur MySQL en cas d'échec d'une opération. Consultez la documentation de référence de MySQL sur les messages d'erreur du serveur. | ||||||
cmd |
Chaîne qui indique l'instruction SQL (type d'opération) à utiliser. Par exemple, INSERT , UPDATE ou DELETE . |
||||||
objects |
Objets de l'audit. Normalement, il s'agit d'une table. Ce champ inclut les informations suivantes concernant l'objet :
|
||||||
query |
Une instruction SQL (exécutée directement). | ||||||
chunkCount |
Nombre total de fragments si la taille de la requête de journal d'audit est supérieure au seuil cloudsql_mysql_audit_event_split_threshold (90 000). |
||||||
chunkIndex |
Index du fragment. chunk_index commence à 1. |
||||||
@type |
Le type est toujours type.googleapis.com/google.cloud.sql.audit.v1.MysqlAuditEntry . |
Voici un exemple d'entrée de journal d'audit.
{
"msgType":"activity",
"status":"unsuccessful",
"date":"2021-11-11T06:16:16.163603Z",
"threadId":"750",
"queryId":"26763",
"user":"root",
"priv_user":"root",
"ip":"",
"host":"localhost",
"errCode":"1146",
"cmd":"select",
"objects":[{"db":"test","name":"t4","obj_type":"TABLE"}],
"query":"select * from test.t4",
"chunkCount":2,
"chunkIndex":2,
"@type":"type.googleapis.com/google.cloud.sql.audit.v1.MysqlAuditEntry"
}
Désactiver l'audit de base de données
Pour désactiver le plug-in d'audit Cloud SQL pour MySQL, définissez l'option de base de données cloudsql_mysql_audit sur OFF ou supprimez-la.
Console
-
Dans Google Cloud Console, accédez à la page Instances Cloud SQL.
- Ouvrez l'instance et cliquez sur Modifier.
- Faites défiler jusqu'à la section Options.
- Pour définir une nouvelle option sur l'instance, cliquez surAjouter une option, sélectionnez
cloudsql_mysql_audit
dans le menu déroulant, puis définissez sa valeur surOFF
. - Cliquez sur Enregistrer pour enregistrer les modifications.
- Confirmez les modifications effectuées dans la section Options à partir de la page de présentation.
gcloud
Remplacez les éléments suivants :
- INSTANCE_NAME : nom de l'instance sur laquelle vous définissez l'option.
gcloud sql instances patch INSTANCE_NAME \ --database-flags cloudsql_mysql_audit=OFF
REST v1beta4
Avant d'utiliser les données de requête ci-dessous, effectuez les remplacements suivants :
- project-id : ID du projet
- instance-id : ID de l'instance.
Méthode HTTP et URL :
PATCH https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id
Corps JSON de la requête :
{ "settings": { "databaseFlags": [ { "name": "cloudsql_mysql_audit", "value": "OFF" } ] } }
Pour envoyer votre requête, développez l'une des options suivantes :
Vous devriez recevoir une réponse JSON de ce type :
REST v1
Avant d'utiliser les données de requête ci-dessous, effectuez les remplacements suivants :
- project-id : ID du projet
- instance-id : ID de l'instance.
Méthode HTTP et URL :
PATCH https://sqladmin.googleapis.com/sql/v1/projects/project-id/instances/instance-id
Corps JSON de la requête :
{ "settings": { "databaseFlags": [ { "name": "cloudsql_mysql_audit", "value": "OFF" } ] } }
Pour envoyer votre requête, développez l'une des options suivantes :
Vous devriez recevoir une réponse JSON de ce type :
Exemples de règles d'audit
Auditer toutes les activités pour tous les utilisateurs :
CALL mysql.cloudsql_create_audit_rule('*','*','*','*','B',1,@outval,@outmsg);
Auditer toutes les activités d'un seul utilisateur
user1
:CALL mysql.cloudsql_create_audit_rule('user1@*','*','*','*','B',1,@outval,@outmsg);
Auditer toutes les activités de tous les utilisateurs dont le nom commence par
user
:CALL mysql.cloudsql_create_audit_rule('user*@*','*','*','*','B',1, @outval,@outmsg);
Auditer toutes les opérations LMD pour tous les utilisateurs :
CALL mysql.cloudsql_create_audit_rule('*','*','*','dml','B',1,@outval,@outmsg);
Auditer l'opération "select" pour une base de données particulière
db1
:CALL mysql.cloudsql_create_audit_rule('*','db1','*','select','B',1,@outval,@outmsg);
Auditer toutes les activités d'une base de données comportant le caractère spécial
db~1
:CALL mysql.cloudsql_create_audit_rule('*','`db~1`','*','*','B',1,@outval,@outmsg);
Auditer les opérations "select" et "delete" pour la table
db1.table1
:CALL mysql.cloudsql_create_audit_rule('*','db1','table1','select,delete','B',1,@outval,@outmsg);
Auditer toutes les opérations ayant réussi :
CALL mysql.cloudsql_create_audit_rule('*','*','*','*','S',1,@outval,@outmsg);
Ne pas auditer toutes les activités de tous les utilisateurs dont le nom commence par
user
:CALL mysql.cloudsql_create_audit_rule('user*@*','*','*','*','E',1, @outval,@outmsg);
Résoudre les problèmes
Problème | Dépannage |
---|---|
Je ne vois pas cloudsql_mysql_audit lorsque j'appelle la commande : SHOW (global) variables
|
cloudsql_mysql_audit est le nom du plug-in. Pour vérifier s'il est actif, utilisez la commande suivante :
SHOW PLUGINS Vérifiez l'entrée status .
|
Pourquoi les journaux d'audit mysql ne s'affichent-ils pas après activation de cloudsql_mysql_audit ? |
Vous devez activer les journaux d'audit pour l'accès aux données, comme décrit dans la page Configurer les journaux d'audit pour l'accès aux données. En outre, des règles d'audit sont nécessaires pour que le plug-in d'audit Cloud SQL pour MySQL puisse auditer les journaux d'audit souhaités. Créez des règles d'audit à l'aide des procédures stockées avec "reload_mode=1", ou exécutez la commande suivante puis redémarrez la base de données pour que les règles d'audit nouvellement ajoutées prennent effet : CALL mysql.cloudsql_reload_audit_rule(1) |
L'erreur suivante s'affiche lors de la mise à jour de l'option de base de données : Error 1193: Unknown system variable 'cloudsql_mysql_audit_xxx' (Erreur 1193 : variable système 'cloudsql_mysql_audit_xxx' inconnue) |
Les options cloudsql_mysql_audit_xxx ne fonctionnent que lorsque le plug-in d'audit est actif. Supprimez toutes les options cloudsql_mysql_audit_xxx existantes de l'instance, puis activez le plug-in à l'aide de la commande suivante avant de mettre à jour les options cloudsql_mysql_audit_xxx : cloudsql_mysql_audit=ON |
Je peux voir des journaux d'audit générés même si je n'ai défini aucune règle d'audit. | Les modifications apportées aux tables des règles d'audit (mysql.audit_log_rules et mysql.audit_log_rules_expanded ) et aux procédures d'audit stockées (mysql.cloudsql_xxxx_audit_rule ) sont consignées par défaut. |
Après avoir modifié l'instance principale, je ne vois pas les journaux d'audit sur mes instances dupliquées. | Les threads de réplication et les threads de récupération après un plantage ne sont pas consignés. Cloud SQL audite les activités sur l'instance principale, mais pas sur l'instance dupliquée. |
J'ai tenté d'exécuter la commande suivante pour définir des valeurs dans une liste d'éléments séparés par des virgules, mais cela ne fonctionne pas.
gcloud instances patch --database-flags
|
Si vous spécifiez une liste de valeurs d'options séparées par des virgules à l'aide des commandes gcloud , utilisez l'argument --flags-file . Avant tout, vous devez créer un fichier contenant les informations suivantes : --database-flags: general_log: OFF cloudsql_mysql_audit_max_query_length: '20' cloudsql_mysql_audit_data_masking_cmds: select,update Exécutez ensuite la commande suivante : gcloud sql instances patch --flags-file=flagfile |
La commande suivante renvoie une erreur :
CALL mysql.cloudsql_create_canonical_rules
|
Cela est intentionnel. mysql.cloudsql_create_canonical_rules ne doit être appelé qu'en interne par mysql.cloudsql_create_audit_rule et mysql.cloudsql_update_audit_rule . |
Quelles opérations puis-je auditer ? |
Les opérations compatibles sont répertoriées dans la liste complète des opérations compatibles. Certaines opérations, comme celles répertoriées ci-dessous, ne sont pas auditées, car elles n'affectent pas la base de données :
USE db_name ou SHOW VARIABLES Par ailleurs, dans certains cas, les fonctions ne peuvent pas être auditées en tant qu'objets (fonctionnalités non compatibles). |
Je souhaite auditer toutes les opérations d'une table spécifique. J'ai donc créé la règle d'audit suivante :
mysql.cloudsql_create_audit_rule("user@*","db",
"table","*","B",1,@1,@2);
Toutefois, je peux voir des journaux d'audit qui ne sont pas associés à cette table, tels que disconnect et connect .
|
Certaines opérations, telles que la déconnexion ou la connexion, sont considérées comme globales. Elles ignorent les champs d'entrée db et object . |
Lorsque je crée, mets à jour ou supprime une règle d'audit à l'aide de procédures stockées, l'erreur suivante s'affiche.
Le serveur MySQL s'exécute avec l'option read-only et ne peut donc pas exécuter cette instruction.
|
Cloud SQL ne peut pas modifier les procédures stockées sur une instance en lecture seule. S'il s'agit de l'instance principale, supprimez les options read_only . S'il s'agit d'une instance dupliquée, effectuez les modifications sur l'instance principale associée. Une fois les modifications des règles répliquées sur l'instance dupliquée, exécutez la commande suivante sur l'instance dupliquée pour y actualiser les règles :
CALL mysql.cloudsql_reload_audit_rule(1) |
Lorsque je crée, mets à jour ou supprime une règle d'audit, l'erreur suivante s'affiche, même si la modification a réussi.
0 rows affected
|
La réponse 0 rows affected concerne la dernière instruction exécutée dans la procédure stockée, et non les tables. Pour vérifier si la règle d'audit a bien été modifiée, utilisez la commande suivante : mysql.cloudsql_list_audit_rule |
Je ne peux pas définir cloudsql_mysql_audit_data_masking_cmds et cloudsql_mysql_audit_data_masking_regexp avec gcloud . |
gcloud nécessite d'utiliser l'argument --flags-file pour définir des valeurs d'options complexes (options qui incluent des caractères spéciaux). |
J'ai créé une procédure stockée à l'aide de l'instruction CREATE USER , mais le mot de passe n'est pas masqué. |
Par défaut, le masquage ne fonctionne que pour les opérations cmds telles que : CREATE_USER , ALTER_USER , GRANT , UPDATE .
Pour filtrer le mot de passe à la création de la procédure stockée, ajoutez create_procedure à cloudsql_mysql_audit_data_masking_cmds .
|
J'ai reçu une erreur de dépassement du délai d'attente de verrouillage lors de la création, mise à jour ou suppression de règles d'audit. | Normalement, cette erreur est générée lorsque deux sessions ou plus tentent de modifier les règles d'audit en même temps. Si cela se produit fréquemment, augmentez la valeur de la variable innodb_lock_wait_timeout . Vous pouvez l'augmenter de manière globale (à l'aide de l'option de base de données) ou uniquement pour la session, par exemple à l'aide de la commande suivante :
SET innodb_lock_wait_timeout=120 |
Étapes suivantes
- En savoir plus sur l'audit de base de données MySQL.
- Consultez la liste complète des opérations pour l'audit de base de données.