BigQueryのクエリ履歴を保存しておき、後々調査できるようにするために、Stackdriver LoggingのBigQuery関連ログをBigQueryにエクスポートする方法をまとめました。
##BigQueryのデータセットを作成
Stackdriver Loggingからエクスポートしたログテーブルを格納するためのデータセットを作成しておきます。
##シンクの作成
以下コマンドで、エクスポートするログエントリのフィルタとエクスポート先を設定するシンクを作成します。
下記コマンドではログのresource-typeをbigquery_resourceで絞っています。
gcloud logging sinks create <sink名> bigquery.googleapis.com/projects/<project-id>/datasets/<dataset> --log-filter='resource.type="bigquery_resource"'
##シンクの確認
コンソール画面のオペレーションロギング → ログルーターからシンクが作成されたことを確認します。
また、シンクの詳細を表示し、writerIdentifyからサービスアカウントを表示し、コピーしておきます。
以下コマンドでも同様の確認ができます。
gcloud logging sinks list
gcloud logging sinks describe <sink名>
##BigQueryのデータセットの権限設定
先ほど作成したデータセットへサービスアカウントが書込みをできるように権限設定を行います。
BigQueryのデータセットの権限設定画面で、先ほどコピーしたサービスアカウントを貼り付け、BigQueryデータ編集者とし、追加を行います。
##テーブルにデータが書き込まれていることを確認
テーブルにデータが書き込まれるまで少し時間がかかります。
データが書き込まれたら、例として以下のSQLで、どのアカウントがどのクエリを発行したかを確認できます。
SELECT
protopayload_auditlog.authenticationInfo.principalEmail AS email,
protopayload_auditlog.servicedata_v1_bigquery.jobCompletedEvent.job.jobConfiguration.query AS query
FROM `<project-id>.<dataset>.cloudaudit_googleapis_com_data_access_20201012` LIMIT 1000
###参考
BigQuery audit logs overview
ログビューアによるエクスポート
BigQueryでクソクエリを検知する
Stackdriver Loggingのログを失う前にエクスポートしておく方法