BigQuery でクエリの結果をローカルPCにダウンロードされたか操作履歴を追えるか調査を行いました。
結論は、現状は難しそうです。
Cloud Audit Logs に操作ログがあると思ったのですが、ダウンロードを特定する情報が見つかりませんでした。
一応推測できそうな情報はあったので、ここにメモを残します。
Cloud Audit Logs に残る情報
methodName: jobservice.getqueryresults
methodName を jobservice.getqueryresults にした場合はダウンロードのログは残るのですが、以下の問題点があります。
- クエリ結果がサーバから返されるとログに残る。(クエリを実行したりダウンロードしたり)
- ただし、その結果がユーザのローカルに保存されたかを判断する手段がない。(クエリの実行 or ローカルダウンロード)
jobService.getQueryResults は、BigQuery でクエリの結果を取得するために使用される API メソッドです。しかし、このメソッド自体は、クエリ結果を取得する機能を提供するものであり、クエリ結果がその後どこにダウンロードされたか(ローカルPCや特定のクラウドストレージ)を追跡する機能はないとのことです。
jobService.getQueryResults は、results セット返すだけで、その結果がどこに保存されたかや、誰がどこにダウンロードしたかといった履歴情報はありませんでした。
jobservice.insert
methodName をjobservice.insert にした場合は以下の問題点があります。
- destinationUris で書き込み先が把握できる。
- ただし、ローカルにダウンロードした際にログが残らない。
jobService.insert を使用してジョブを実行した後に、その結果がローカルPCや特定のクラウドストレージにダウンロードされたかどうかという履歴を直接取得することはできませんでした。jobService.insert のジョブそのものは、ジョブの状態や結果に関するメタデータはありますが、ダウンロード操作の詳細までは追跡できませんでした。
ローカルPCにダウンロードしたという履歴は、BigQuery や jobService.insert のジョブメタデータでは記録されないとのことです。ローカルPCへのダウンロードは、通常クライアント側の操作(ブラウザのダウンロードやAPI呼び出し)で行われるため、これを直接的に追跡することはできないとのことです。
ローカルPCに「結果を保存」する場合に残るログ
ローカルPCに「結果を保存」する場合に残るログは以下の2つでした。
- jobservice.getqueryresults
- tabledataservice.list
上記のログのみでは、ローカルPCにダウンロードしたかどうか判断が難しそうです。
短時間に同じユーザで同じ内容の jobservice.getqueryresults が複数回実行されていたらダウンロードの疑いがあるくらいの推測しかできませんでした。
うーむ