このトピックでは、Cloud SQL for MySQL 監査プラグインを有効にして使用する方法について説明します。概要については、MySQL データベースの監査をご覧ください。MySQL プラグインの詳細については、MySQL プラグインの読み込みをご覧ください。
始める前に
データアクセス監査ログ
データアクセス監査ログを有効にして構成します。データアクセス監査ログの構成をご覧ください。
監査ユーザーに必要な権限
監査ストアド プロシージャを実行するための EXECUTE
権限が必要です。監査者のアクセス権を監査ストアド プロシージャに変更する場合は、mysql
クライアントで GRANT
コマンドまたは REVOKE
コマンドを使用する必要があります。ユーザー権限の詳細については、MySQL のユーザー権限をご覧ください。たとえば、管理者が user
という名前の監査者にアクセス権を付与し、監査ルールを管理する場合は、次のステートメントを使用して権限を付与します。
CREATE USER 'user'@'%' IDENTIFIED BY 'password'; GRANT EXECUTE ON PROCEDURE mysql.cloudsql_list_audit_rule TO 'user'@'%';
監査者が後でアクセス権を取り消す場合は、次のステートメントを使用して権限を取り消すことができます。
REVOKE ALL ON PROCEDURE mysql.cloudql_list_audit_rule FROM 'user'@'%';
デフォルトでは、Cloud SQL を使用して作成されたユーザー(IAM ユーザーを除く)は、FILE
と SUPER
を除いて、すべての権限(監査ストアド プロシージャに対するすべての権限を含む)を持つ管理者です。デフォルトでは、IAM データベース ユーザーには権限が付与されません。
Cloud SQL for MySQL 監査プラグインを有効にする
Cloud SQL for MySQL 監査プラグイン(cloudsql_mysql_audit
)は、特定のデータベース インスタンスの監査動作を制御します。このプラグインを使用するには、まず Cloud SQL インスタンスでプラグインを有効にする必要があります。
cloudsql_mysql_audit
プラグインを有効にするには、次のいずれかのオプションを使用します。
--cloudsql_mysql_audit=ON
プラグインを有効にするようサーバーに指示する。プラグインの初期化に失敗すると、プラグインを無効にしてサーバーが実行されます。
--cloudsql_mysql_audit=FORCE
プラグインを有効にするようサーバーに指示するが、プラグインの初期化に失敗した場合はサーバーを起動しない。このオプションを有効にすると、プラグインが有効な場合にサーバーを実行し、無効の場合は実行しません。
--cloudsql_mysql_audit=FORCE_PLUS_PERMANENT
FORCE と似ていますが、実行時にプラグインはアンロードされません。ユーザーが UNINSTALL PLUGIN を使用してプラグインをアンロードしようとすると、エラーが発生します。
プラグインが有効かどうかは、INFORMATION_SCHEMA.PLUGINS テーブルの PLUGIN_STATUS
列に表示されます。
Console
-
Google Cloud コンソールで Cloud SQL の [インスタンス] ページに移動します。
- インスタンスを開き、[編集] をクリックします。
- 下方向にスクロールして [フラグ] セクションを表示します。
- インスタンスで設定したことのないフラグを設定するには、[フラグを追加] をクリックし、
cloudsql_mysql_audit
をプルダウン メニューから選択して、その値をON
に設定します。 - [保存] をクリックして、変更を保存します。
- [概要] ページの [フラグ] で、変更を確認します。
gcloud
次のように置き換えます。
- INSTANCE_NAME: フラグを設定するインスタンスの名前。
gcloud sql instances patch INSTANCE_NAME \ --database-flags cloudsql_mysql_audit=ON
このコマンドでは、以前に設定されたすべてのデータベース フラグが上書きされます。これらを保持し、新しいフラグを追加するには、インスタンスに設定するすべてのフラグの値を含めます。具体的に含まれていないフラグはデフォルト値に設定されます。フラグに値がない場合は、フラグ名の後に等号(=
)を付けてください。
REST v1beta4
リクエストのデータを使用する前に、次のように置き換えます。
- project-id: プロジェクト ID
- instance-id: インスタンス ID
HTTP メソッドと URL:
PATCH https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id
リクエストの本文(JSON):
{ "settings": { "databaseFlags": [ { "name": "cloudsql_mysql_audit", "value": "ON" } ] } }
リクエストを送信するには、次のいずれかのオプションを開きます。
次のような JSON レスポンスが返されます。
REST v1
リクエストのデータを使用する前に、次のように置き換えます。
- project-id: プロジェクト ID
- instance-id: インスタンス ID
HTTP メソッドと URL:
PATCH https://sqladmin.googleapis.com/sql/v1/projects/project-id/instances/instance-id
リクエストの本文(JSON):
{ "settings": { "databaseFlags": [ { "name": "cloudsql_mysql_audit", "value": "ON" } ] } }
リクエストを送信するには、次のいずれかのオプションを開きます。
次のような JSON レスポンスが返されます。
Cloud SQL for MySQL 監査プラグインの設定
以下のフラグを使用して、Cloud SQL for MySQL 監査プラグインの動作を調整できます。これらのフラグはすべて、データベースを再起動せずに変更できます。フラグの管理方法については、データベース フラグを構成するをご覧ください。
cloudsql_mysql_audit_data_masking_regex
Perl 互換正規表現(PCRE)に準拠したデータ マスキングに使用される正規表現。
デフォルトでは、出力の監査ログではユーザー パスワード(
<psw>
)が***
のパスワード マスクに置き換えられます。正規表現は、
cloudsql_mysql_audit_data_masking_cmds
で指定したコマンドタイプを含むステートメントにのみ適用されます。gcloud
を使用する場合は、フラグファイルを使用して、複雑な特殊文字を含む値を設定する必要があります。このフラグのデフォルト値:
identified(?:/\*.*?\*/|\s)*?by(?:/\*.*?\*/|\s)*?(?:password)?(?:/\*.*?\*/| \s)*?['|"](?<psw>.*?)(?<!\\)['|"]|password(?:/\*.*?\*/|\s)*?\((?:/\*.*?\*/| \s)*?['|"](?<psw>.*?)(?<!\\)['|"](?:/\*.*?\*/|\s)*?\)|password(?:/\*.*?\*/| \s)*?(?:for(?:/\*.*?\*/|\s)*?\S+?)?(?:/\*.*?\*/|\s)*?=(?:/\*.*?\*/|\s)*?[ '|"](?<psw>.*?)(?<!\\)['|"]|password(?:/\*.*?\*/|\s)*?['|"](?<psw>.*?) (?<!\\)['|"]
次の例をご覧ください。
cloudsql_mysql_audit_data_masking_regex
を使用しないと、ユーザーの作成コマンドを記述する監査ログエントリが次のように記録されます。{..."cmd":"create_user","query":"create user user1@'localhost' identified by 'pw'"}
デフォルト値の
cloudsql_mysql_audit_data_masking_regex
を使用すると、同じ監査ログが次のように変更されます。{..."cmd":"create_user","query":"create user user1@'localhost' identified by '***'"}
cloudsql_mysql_audit_data_masking_regex
を(?<psw>.*)
に設定すると、Cloud SQL はすべてのクエリの内容をフィルタリングできます。{..."cmd":"create_user","query":"***"}
cloudsql_mysql_audit_data_masking_cmds
データ マスキングの正規表現(cloudsql_mysql_audit_data_masking_regex)が適用されるコマンドのカンマ区切りリスト。フィルタリングを停止するには、空の文字列(
""
)を設定します。gcloud
を使用する場合は、フラグファイルを使用してカンマ区切りリストを設定する必要があります。デフォルト値には、次のパスワード句を含む MySQL コマンドが含まれます。create_user,alter_user,grant,update
cloudsql_mysql_audit_max_query_length
監査ログに記録するクエリの最大長を制御します。クエリの詳細を表示する必要がない場合は、
0
を使用できます。その場合、クエリは監査ログに記録されません。これにより、ログの容量を節約でき、コストも削減できます。-1
は、制限がないことを意味します。デフォルトは-1
です。cloudsql_mysql_audit_log_write_period
ログの書き込み期間。ライター スレッドは、このフラグ オプションに設定したミリ秒数に達した後、またはバッファがいっぱいになったときに、バッファの内容をディスクに書き込みます。このフラグ オプションを
0
に設定すると、ライター スレッドから書き込みの完了通知が届くまでユーザー スレッドは待機状態になります。デフォルトは500
(ミリ秒)です。
Console
-
Google Cloud コンソールで Cloud SQL の [インスタンス] ページに移動します。
- インスタンスを開き、[編集] をクリックします。
- 下方向にスクロールして [フラグ] セクションを表示します。
- インスタンスで設定したことのないフラグを設定するには、[フラグを追加] をクリックし、プルダウン メニューのリストからデータベース フラグを選択して、その値を設定します。
- [保存] をクリックして、変更を保存します。
- [概要] ページの [フラグ] で、変更を確認します。
gcloud
次のように置き換えます。
- INSTANCE_NAME: フラグを設定するインスタンスの名前。
- FLAG_NAME: 構成フラグの名前。
- FLAG_VALUE: フラグに使用する値。
gcloud sql instances patch INSTANCE_NAME / --database-flags FLAG_NAME=FLAG_VALUE
REST v1beta4
リクエストのデータを使用する前に、次のように置き換えます。
- project-id: プロジェクト ID
- instance-id: インスタンス ID
HTTP メソッドと URL:
PATCH https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id
リクエストの本文(JSON):
{ "settings": { "databaseFlags": [ { "name": "flag_name", "value": "flag_value" } ] } }
リクエストを送信するには、次のいずれかのオプションを開きます。
次のような JSON レスポンスが返されます。
REST v1
リクエストのデータを使用する前に、次のように置き換えます。
- project-id: プロジェクト ID
- instance-id: インスタンス ID
HTTP メソッドと URL:
PATCH https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id
リクエストの本文(JSON):
{ "settings": { "databaseFlags": [ { "name": "flag_name", "value": "flag_value" } ] } }
リクエストを送信するには、次のいずれかのオプションを開きます。
次のような JSON レスポンスが返されます。
データベース監査を構成する
監査ルールを管理する
Cloud SQL は、ストアド プロシージャのセットを使用して、Cloud SQL for MySQL 監査プラグインの監査ルールを管理します。監査ルールの作成、一覧表示、更新、削除に使用できるストアド プロシージャは 4 つあります。
ストアド プロシージャはそれぞれ、@outval
と @outmsg
の 2 つの変数を返します。これらの変数には、それぞれストアド プロシージャのステータス コードとエラー メッセージが格納されます。ユーザー名、ホスト、データベース、テーブル名を検索する場合は、ワイルドカードとしてアスタリスク(*
)を使用できます。アスタリスクをサフィックス、プレフィックス、またはその両方で使用します。また、ワイルドカード文字 %
はホストにのみ使用できます。文字列をリテラルで使用する必要がある場合は、バッククォート(`
)を使用します。たとえば、`ta*ble`
は文字どおり一致します。
新しい変更を有効にするには、入力パラメータ reload_mode=1
を使用してストアド プロシージャを実行するか、mysql.cloudsql_reload_audit_rule(1)
を呼び出して新しい変更を有効にする必要があります。
監査ルールを作成する
mysql.cloudsql_create_audit_rule
を使用すると、新しい監査ルールを作成できます。
監査ルールを作成して 1 回の呼び出しで再読み込みを行うには、次のステートメントを使用します。
CALL mysql.cloudsql_create_audit_rule('user@host','db','obj','ops','op_result',1, @outval,@outmsg);
SELECT @outval, @outmsg;
ルールを作成して別の呼び出しで再読み込みを行うには、次のステートメントを使用します。
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);
上記のコマンドを使用すると、複数のルールを作成してから、すべての変更を同時に再読み込みできます。
次の表に、前のコマンドの入力パラメータと出力パラメータを示します。
入力パラメータ | |||
---|---|---|---|
名前 | 型 | 説明 | 例 |
user@host または user@ip |
文字列 |
監査するデータベース ユーザーのカンマ区切りのリスト。user@host または user@ip 形式を使用します。 |
user1@localhost 、user1@* 、user1@% 、user@ip
|
db |
文字列 | 監査するデータベースのカンマ区切りのリスト。 | db1,db2,db3* |
obj |
文字列 | 監査するデータベース オブジェクトのカンマ区切りのリスト。 | table1,table2,table3* |
ops |
文字列 | 監査するデータベース アクションのカンマ区切りのリスト。 | select,delete,insert |
op_result |
文字列 | 監査の成功(S)、失敗(U)、または成功と失敗の両方のオペレーション(B)。 | S 、U 、または B |
reload_mode |
整数 | ルールを再読み込みしない場合は 0 、再読み込みする場合は 1 。 |
0 または 1 |
出力パラメータ | |||
---|---|---|---|
名前 | 型 | 説明 | 例 |
@outval |
整数 | ストアド プロシージャのステータス コード。 | 0 (成功の場合)、1 (失敗の場合)。 |
@outmsg |
文字列 | ストアド プロシージャのエラー メッセージ。 |
監査ルールには次の制限があります。
制限事項 | |
---|---|
user 、db 、obj 、ops の長さ。 |
最大サイズは 2,048 文字です。 |
user 、db 、obj 、ops の組み合わせの数。 |
最大 1,000 の組み合わせ。たとえば、user1,user2 、db1, db2 、table1,table2 、select,delete を監査する監査ルールでは、2 x 2 x 2 x 2 = 16 の組み合わせが生成されます。 |
監査ルールを一覧表示する
監査者は、mysql.cloudsql_list_audit_rule
を使用して既存の監査ルールを一覧表示できます。
監査ルール 1 と 2 を一覧表示するには、次のコマンドを使用します。
CALL mysql.cloudsql_list_audit_rule('1,2',@outval,@outmsg);
SELECT @outval, @outmsg;
すべての監査ルールを一覧表示するには、次のようにします。
CALL mysql.cloudsql_list_audit_rule('*',@outval,@outmsg);
SELECT @outval, @outmsg;
次の表に、前のコマンドの入力パラメータと出力パラメータを示します。
入力パラメータ | |||
---|---|---|---|
名前 | 型 | 説明 | 例 |
rule_id |
文字列 | 削除するルール ID のカンマ区切りのリスト。 | 1,2,3 |
出力パラメータ | |||
---|---|---|---|
名前 | 型 | 説明 | 例 |
@outval |
整数 | ストアド プロシージャのステータス コード。 | 0 (成功の場合)、1 (失敗の場合)。 |
@outmsg |
文字列 | ストアド プロシージャのエラー メッセージ。 |
監査ルールを更新する
mysql.cloudsql_update_audit_rule
を使用すると、既存の監査ルールを更新できます。
監査ルールを更新して 1 回の呼び出しで再読み込みを行うには、次のステートメントを使用します。
CALL mysql.cloudsql_update_audit_rule(1,'user@host','db','obj','ops','op_result',1,@outval,@outmsg);
SELECT @outval, @outmsg;
ルールを再読み込みする前に、1 つのセッションで複数の監査ルールを更新することをおすすめします。次のストアド プロシージャを使用すると、1 つのステップでルールを更新し、後のステップでルールを再読み込みできます。
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);
次の表に、前のコマンドの入力パラメータと出力パラメータを示します。
入力パラメータ | |||
---|---|---|---|
名前 | 型 | 説明 | 例 |
rule_id |
整数 | 更新するルールの ID。 | 5 |
user@host |
文字列 |
監査するデータベース ユーザーのカンマ区切りのリスト。user@host の形式を使用します。 |
user1@localhost,user1@* user1@%
|
db |
文字列 | 監査するデータベースのカンマ区切りのリスト。 | db1,db2,db3* |
obj |
文字列 | 監査するデータベース オブジェクトのカンマ区切りのリスト。 | table1,table2,table3* |
ops |
文字列 | 監査するデータベース アクションのカンマ区切りのリスト。 | SELECT,DELETE,INSERT |
op_result |
文字列 | 監査の成功(S)、失敗(U)、または成功と失敗の両方のオペレーション(B)。 | S 、U 、または B |
reload_mode |
整数 | ルールを再読み込みしない場合は 0 、再読み込みする場合は 1 。 |
0 または 1 |
出力パラメータ | |||
---|---|---|---|
名前 | 型 | 説明 | 例 |
@outval |
整数 | ストアド プロシージャのステータス コード。 | 0 (成功の場合)、1 (失敗の場合)。 |
@outmsg |
文字列 | ストアド プロシージャのエラー メッセージ。 |
監査ルールには次の制限があります。
制限事項 | |
---|---|
user 、db 、obj 、ops の長さ。 |
最大サイズは 2,048 文字です。 |
user 、db 、obj 、ops の組み合わせの数。 |
最大 1,000 の組み合わせ。たとえば、user1,user2 、db1, db2 、table1,table2 、select,delete を監査する監査ルールでは、2 x 2 x 2 x 2 = 16 の組み合わせが生成されます。 |
監査ルールを削除する
mysql.cloudsql_delete_audit_rule
を使用すると、既存の監査ルールを削除できます。
監査ルールを削除して 1 回の呼び出しで再読み込みを行うには、次のステートメントを使用します。
CALL mysql.cloudsql_delete_audit_rule('1,2',1,@outval,@outmsg);
SELECT @outval, @outmsg;
ルールを削除して別の呼び出しで再読み込みを行うには、次のステートメントを使用します。
CALL mysql.cloudsql_delete_audit_rule('1,2',0,@outval,@outmsg);
SELECT @outval, @outmsg;
CALL cloudsql_reload_audit_rule(1);
上記のコマンドを使用すると、複数のルールを削除してから、すべての変更を同時に再読み込みできます。
次の表に、前のコマンドの入力パラメータと出力パラメータを示します。
入力パラメータ | |||
---|---|---|---|
名前 | 型 | 説明 | 例 |
rule_id |
文字列 | 削除するルール ID のカンマ区切りのリスト。 | 1,2,3 |
reload_mode |
整数 | ルールを再読み込みしない場合は 0 、再読み込みする場合は 1 。 |
0 または 1 |
出力パラメータ | |||
---|---|---|---|
名前 | 型 | 説明 | 例 |
@outval |
整数 | ストアド プロシージャのステータス コード。 | 0 (成功の場合)、1 (失敗の場合)。 |
@outmsg |
文字列 | ストアド プロシージャのエラー メッセージ。 |
オペレーション グループ
Cloud SQL for MySQL 監査プラグインは、ルール定義でオペレーション グループを使用してアクティビティのコレクションを監査できます。次のオペレーション グループを使用すると、監査ルールの作成を簡素化できます。
オペレーション グループ | 含まれるオペレーション |
---|---|
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 |
Cloud SQL データベースの監査ログを表示する
Cloud Logging でデータベースの監査ログレコードを表示する
データベース監査ログを表示するには、まず、プロジェクトでデータアクセス監査ログを有効にします。特定のインスタンスに生成された MySQL 監査ログは、データアクセス監査ログとして Cloud Logging に送信されます。生成された MySQL データベースの監査ログは、ログ エクスプローラ アプリケーションで表示できます。
ログ エクスプローラで、次のクエリを実行し、高度なフィルタ インターフェースを使用すると、特定の Cloud SQL プロジェクトのすべての MySQL データベース監査ログを表示できます。これにより、MySQL 監査ログを確認できます。
次のように置き換えます。
- PROJECT_NAME: 監査ログを取得するプロジェクトの名前。
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"
また、cloudaudit.googleapis.com/data_access ログフィルタを選択することもできます。
監査ログ形式
監査ログには次のフィールドがあります。
フィールド名 | 説明 | ||||||
---|---|---|---|---|---|---|---|
msgType |
監査ログのメッセージ タイプを表す文字列。msgType の値は activity のみです。 |
||||||
status |
オペレーションのステータス(success または unsuccessful )。 |
||||||
date |
監査イベントの生成時刻を示すタイムスタンプ。 | ||||||
threadId |
MySQL スレッドの ID。 | ||||||
queryId |
MySQL クエリの ID。 | ||||||
user |
クライアントによって送信されたユーザー名を表す文字列。privUser 値と異なる場合があります。 | ||||||
privUser |
サーバーがクライアントを認証したユーザーを示す文字列。これは、サーバーが権限チェックに使用するユーザー名です。ユーザー値と異なる場合があります。 | ||||||
gcpIamAccount |
GCP IAM アカウントまたはサービス アカウントを表す文字列。 | ||||||
ip |
クライアント IP アドレスを表す文字列。 | ||||||
host |
クライアントのホスト名を表す文字列。 | ||||||
errCode
|
オペレーションの失敗に関する MySQL エラーコード。MySQL Server のエラー メッセージのリファレンスをご覧ください。 | ||||||
cmd |
使用する SQL ステートメント(オペレーション タイプ)を示す文字列。たとえば、INSERT 、UPDATE 、DELETE です。 |
||||||
objects |
監査オブジェクト。通常はテーブルです。このフィールドには、オブジェクトに関する次の情報が含まれます。
|
||||||
query |
SQL ステートメント(直接実行)。 | ||||||
chunkCount |
監査ログのクエリサイズが cloudsql_mysql_audit_event_split_threshold (90,000)を超える場合のチャンクの合計。 |
||||||
chunkIndex |
チャンクのインデックス。chunk_index は 1 から開始します。 |
||||||
@type |
タイプは常に type.googleapis.com/google.cloud.sql.audit.v1.MysqlAuditEntry です。 |
監査ログエントリの例を次に示します。
{
"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"
}
データベース監査を無効にする
Cloud SQL for MySQL 監査プラグインを無効にするには、データベース フラグ cloudsql_mysql_audit を OFF に設定するか、フラグを削除します。
Console
-
Google Cloud コンソールで Cloud SQL の [インスタンス] ページに移動します。
- インスタンスを開き、[編集] をクリックします。
- 下方向にスクロールして [フラグ] セクションを表示します。
- インスタンスで設定したことのないフラグを設定するには、[フラグを追加] をクリックし、
cloudsql_mysql_audit
をプルダウン メニューから選択して、その値をOFF
に設定します。 - [保存] をクリックして、変更を保存します。
- [概要] ページの [フラグ] で、変更を確認します。
gcloud
次のように置き換えます。
- INSTANCE_NAME: フラグを設定するインスタンスの名前。
gcloud sql instances patch INSTANCE_NAME \ --database-flags cloudsql_mysql_audit=OFF
REST v1beta4
リクエストのデータを使用する前に、次のように置き換えます。
- project-id: プロジェクト ID
- instance-id: インスタンス ID
HTTP メソッドと URL:
PATCH https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id
リクエストの本文(JSON):
{ "settings": { "databaseFlags": [ { "name": "cloudsql_mysql_audit", "value": "OFF" } ] } }
リクエストを送信するには、次のいずれかのオプションを開きます。
次のような JSON レスポンスが返されます。
REST v1
リクエストのデータを使用する前に、次のように置き換えます。
- project-id: プロジェクト ID
- instance-id: インスタンス ID
HTTP メソッドと URL:
PATCH https://sqladmin.googleapis.com/sql/v1/projects/project-id/instances/instance-id
リクエストの本文(JSON):
{ "settings": { "databaseFlags": [ { "name": "cloudsql_mysql_audit", "value": "OFF" } ] } }
リクエストを送信するには、次のいずれかのオプションを開きます。
次のような JSON レスポンスが返されます。
監査ルールの例
すべてのユーザーのすべてのアクティビティを監査します。
CALL mysql.cloudsql_create_audit_rule('*','*','*','*','B',1,@outval,@outmsg);
1 人のユーザー(
user1
)に関するすべてのアクティビティを監査します。CALL mysql.cloudsql_create_audit_rule('user1@*','*','*','*','B',1,@outval,@outmsg);
user
で始まるすべてのユーザーのアクティビティをすべて監査します。CALL mysql.cloudsql_create_audit_rule('user*@*','*','*','*','B',1, @outval,@outmsg);
すべてのユーザーのすべての DML オペレーションを監査します。
CALL mysql.cloudsql_create_audit_rule('*','*','*','dml','B',1,@outval,@outmsg);
特殊なデータベース
db1
の選択オペレーションを監査します。CALL mysql.cloudsql_create_audit_rule('*','db1','*','select','B',1,@outval,@outmsg);
特殊文字
db~1
を含むデータベースのすべてのアクティビティを監査します。CALL mysql.cloudsql_create_audit_rule('*','`db~1`','*','*','B',1,@outval,@outmsg);
テーブル
db1.table1
の選択オペレーションと削除オペレーションを監査します。CALL mysql.cloudsql_create_audit_rule('*','db1','table1','select,delete','B',1,@outval,@outmsg);
成功したすべてのオペレーションを監査します。
CALL mysql.cloudsql_create_audit_rule('*','*','*','*','S',1,@outval,@outmsg);
user
で始まるすべてのユーザーのすべてのアクティビティを監査しません。CALL mysql.cloudsql_create_audit_rule('user*@*','*','*','*','E',1, @outval,@outmsg);
トラブルシューティング
問題 | トラブルシューティング |
---|---|
次のコマンドを呼び出したときに、cloudsql_mysql_audit が表示されません。
SHOW (global) variables |
cloudsql_mysql_audit はプラグインの名前です。有効になっているかどうかを確認するには、次のコマンドを使用します。
SHOW PLUGINS status エントリを確認します。 |
cloudsql_mysql_audit を有効にした後、MySQL 監査ログが表示されません。 |
データアクセス監査ログを有効にする必要があります(データアクセス監査ログを構成するを参照)。また、Cloud SQL for MySQL 監査プラグインで目的の監査ログを監査するには、監査ルールが必要です。ストアド プロシージャと reload_mode=1 を使用して監査ルールを作成します。または、次のコマンドを実行するか、データベースを再起動して、新たに追加された監査ルールを有効にします。
CALL mysql.cloudsql_reload_audit_rule(1) |
データベース フラグを更新すると、次のエラーが表示されます。
Error 1193: Unknown system variable 'cloudsql_mysql_audit_xxx' |
cloudsql_mysql_audit_xxx フラグは、監査プラグインがアクティブな場合にのみ機能します。インスタンスから既存の cloudsql_mysql_audit_xxx フラグを削除し、cloudsql_mysql_audit_xxx フラグを更新する前に、次のコマンドを使用してプラグインを有効にします。
cloudsql_mysql_audit=ON |
監査ログを設定していないにもかかわらず、監査ログが生成されています。 | デフォルトでは、監査ルールテーブル(mysql.audit_log_rules と mysql.audit_log_rules_expanded )と監査ストアド プロシージャ(mysql.cloudsql_xxxx_audit_rule )への変更が記録されます。 |
プライマリ インスタンスに変更を加えた後、レプリカ インスタンスの監査ログが表示されません。 | レプリケーション スレッドとクラッシュ リカバリ スレッドがログに記録されません。Cloud SQL は、プライマリ インスタンスのアクティビティを監査しますが、レプリカ インスタンスのアクティビティは監査しません。 |
次のコマンドでカンマ区切りリストから値を設定しようとしましたが、機能しません。gcloud instances patch --database-flags
|
gcloud コマンドを使用してフラグ値のカンマ区切りリストを指定する場合は、--flags-file 引数を使用します。まず、次の情報を含むファイルを作成します。
--database-flags: general_log: OFF cloudsql_mysql_audit_max_query_length: '20' cloudsql_mysql_audit_data_masking_cmds: select,update その後、次のコマンドを実行します。 gcloud sql instances patch --flags-file=flagfile |
次のコマンドがエラーを返します。
CALL mysql.cloudsql_create_canonical_rules |
これは想定どおりの動作です。mysql.cloudsql_create_canonical_rules は、mysql.cloudsql_create_audit_rule と mysql.cloudsql_update_audit_rule によって内部でのみ呼び出す必要があります。 |
どのオペレーションを監査できますか? |
サポートされているオペレーションは、サポートされているオペレーションのリストに記載されています。次のようなオペレーションはデータベースに影響しないため、監査されません。
USE db_name または SHOW VARIABLES また、関数がオブジェクトとして監査できない場合もあります(サポートされていない機能)。 |
特定のテーブルに対するすべてのオペレーションを監査するため、次の監査ルールを作成しました。
mysql.cloudsql_create_audit_rule("user@*","db",
"table","*","B",1,@1,@2);
しかし、 disconnect や connect など、このテーブルに関係のない監査ログが表示されます。 |
切断や接続などの一部のオペレーションはグローバルとみなされます。入力の db フィールドと object フィールドは無視されます。 |
ストアド プロシージャを使用して監査ルールを作成、更新、または削除すると、次のエラーが表示されます。 MySQL サーバーは read-only オプションで実行されているため、このステートメントを実行できません。 |
Cloud SQL では、読み取り専用インスタンスのストアド プロシージャは変更できません。インスタンスがプライマリの場合は、read_only フラグを削除します。インスタンスがレプリカ インスタンスの場合、プライマリ インスタンスで変更を行います。ルールの変更がレプリカ インスタンスに複製された後、レプリカ インスタンスで次のコマンドを実行して、ルールをレプリカに再度読み込みます。CALL mysql.cloudsql_reload_audit_rule(1) |
監査ルールを作成、更新、または削除すると、変更が成功しても、次のエラーが表示されます。0 rows affected
|
0 rows affected レスポンスは、テーブルではなく、ストアド プロシージャで最後に実行されたステートメントに対するものです。監査ルールが変更されたかどうかを確認するには、次のコマンドを使用します。mysql.cloudsql_list_audit_rule |
gcloud で cloudsql_mysql_audit_data_masking_cmds と cloudsql_mysql_audit_data_masking_regexp を設定できません。 |
gcloud では、--flags-file フラグを使用して複雑なフラグ値(特殊文字を含むフラグ)を設定する必要があります。 |
CREATE USER ステートメントを使用してストアド プロシージャを作成しましたが、パスワードがマスキングされていません。 |
デフォルトでは、マスキングは以下のような cmds (オペレーション)に対してのみ機能します。
CREATE_USER 、ALTER_USER 、GRANT 、UPDATE ストアド プロシージャの作成時にパスワードをフィルタリングするには、 create_procedure を cloudsql_mysql_audit_data_masking_cmds に追加します。 |
監査ルールを作成、更新、または削除しようとしたときに、ロック待機のタイムアウト超過エラーが発生しました。 | 通常、このエラーは、2 つ以上のセッションが監査ルールを同時に変更しようとした場合に発生します。この状況が頻繁に発生する場合は、innodb_lock_wait_timeout 変数の値を増やしてください。グローバルに増やすことも(データベース フラグを使用)、セッションでのみ増やすこともできます(たとえば、次のコマンドを使用)。SET innodb_lock_wait_timeout=120 |
次のステップ
- MySQL データベースの監査について学習する。
- データベース監査のオペレーションの完全なリストを確認する。