「誰が、いつ、どのデータに、どのような操作をしたか」——この問いに即座に答えられなければ、 セキュリティインシデント発生時の原因究明もコンプライアンス監査への対応もできません。 DatabricksのAudit Logs(監査ログ)は、ワークスペース内のすべての操作を自動記録し、system.access.auditテーブル(System Tables)経由でSQLクエリによる分析を可能にします。
この記事では、監査ログの構造と主要イベント一覧、実務で使えるSQLクエリ例、 ログ配信設定(AWS S3 / Azure Event Hubs / GCS)、SOC 2 / ISO 27001対応のポイント、 そしてDatabricks認定試験で出題されるパターンを整理します。
Databricksの監査ログはSystem Tablesの一部として提供されます。 System Tablesはsystemカタログ配下のスキーマで、Databricksが自動的にデータを収集・更新する 読み取り専用のDelta Tableです。監査ログはsystem.access.auditに格納されます。
-- 監査ログテーブルの構造確認
DESCRIBE TABLE system.access.audit;
-- 主要カラム
-- event_time TIMESTAMP イベント発生時刻
-- event_date DATE イベント日付(パーティションキー)
-- workspace_id BIGINT ワークスペースID
-- action_name STRING 操作の種類(例: createCluster, getTable)
-- user_identity STRUCT 操作を行ったユーザー/SP情報
-- service_name STRING サービス名(例: clusters, unityCatalog, jobs)
-- request_params MAP リクエストパラメータ(操作対象の詳細)
-- response STRUCT レスポンス情報(ステータスコード、エラーメッセージ)
-- source_ip_address STRING リクエスト元IPアドレス
-- audit_level STRING ログレベル(ACCOUNT_LEVEL / WORKSPACE_LEVEL)| カテゴリ | service_name | 代表的なaction_name | 説明 |
|---|---|---|---|
| ワークスペース | accounts | login, logout, tokenLogin | ユーザーのログイン/ログアウト、PATによる認証 |
| クラスタ | clusters | create, start, permanentDelete, resize | クラスタの作成・起動・削除・リサイズ |
| ノートブック | notebook | createNotebook, runCommand, attachNotebook | ノートブックの作成・コマンド実行・クラスタへのアタッチ |
| ジョブ | jobs | create, runNow, runSucceeded, runFailed | ジョブの作成・実行・成功/失敗 |
| Unity Catalog | unityCatalog | createTable, getTable, grantPermission, revokePermission | テーブルの作成/アクセス、権限の付与/取り消し |
| Secrets | secrets | getSecret, putSecret, createScope | シークレットの読み取り/書き込み、Scopeの作成 |
| SQL Warehouse | databrickssql | createEndpoint, startEndpoint, executeStatement | SQL Warehouseの作成/起動、SQLの実行 |
| ファイル | dbfs | addBlock, create, delete | DBFSファイルの作成/削除 |
| リポジトリ | repos | createRepo, updateRepo, deleteRepo | Git連携リポジトリの操作 |
SELECT
event_time,
user_identity.email AS user_email,
source_ip_address,
response.status_code,
response.error_message
FROM system.access.audit
WHERE action_name = 'login'
AND response.status_code != 200
AND event_date >= current_date() - INTERVAL 7 DAYS
ORDER BY event_time DESC;SELECT
event_date,
user_identity.email AS user_email,
action_name,
request_params['full_name_arg'] AS table_name,
COUNT(*) AS access_count
FROM system.access.audit
WHERE service_name = 'unityCatalog'
AND action_name IN ('getTable', 'createTable', 'deleteTable')
AND event_date >= current_date() - INTERVAL 30 DAYS
GROUP BY event_date, user_identity.email, action_name,
request_params['full_name_arg']
ORDER BY event_date DESC, access_count DESC;SELECT
event_time,
user_identity.email AS triggered_by,
request_params['jobId'] AS job_id,
request_params['runId'] AS run_id,
action_name,
CASE
WHEN action_name = 'runSucceeded' THEN 'SUCCESS'
WHEN action_name = 'runFailed' THEN 'FAILED'
ELSE action_name
END AS status
FROM system.access.audit
WHERE service_name = 'jobs'
AND action_name IN ('runSucceeded', 'runFailed', 'runNow')
AND event_date >= current_date() - INTERVAL 14 DAYS
ORDER BY event_time DESC;SELECT
event_time,
user_identity.email AS granted_by,
action_name,
request_params['securable_type'] AS object_type,
request_params['full_name_arg'] AS object_name,
request_params['principal'] AS granted_to,
request_params['privileges'] AS privileges
FROM system.access.audit
WHERE service_name = 'unityCatalog'
AND action_name IN ('grantPermission', 'revokePermission', 'updatePermissions')
AND event_date >= current_date() - INTERVAL 90 DAYS
ORDER BY event_time DESC;SELECT
event_date,
user_identity.email AS creator,
request_params['cluster_name'] AS cluster_name,
request_params['node_type_id'] AS instance_type,
request_params['num_workers'] AS num_workers,
request_params['autotermination_minutes'] AS auto_terminate_min
FROM system.access.audit
WHERE service_name = 'clusters'
AND action_name = 'create'
AND event_date >= current_date() - INTERVAL 30 DAYS
ORDER BY event_date DESC;System Tables経由でのSQL分析に加えて、監査ログを外部ストレージやSIEMツールに配信できます。 ログ配信はAccount Console(またはAccount API)から設定し、アカウントレベルで有効化します。
| クラウド | 配信先 | 形式 | 主な用途 |
|---|---|---|---|
| AWS | S3バケット | JSON(gzip圧縮) | 長期アーカイブ、Athena分析、Splunk取り込み |
| Azure | Azure Event Hubs / Azure Monitor | JSON | Azure Sentinel連携、リアルタイム監視 |
| GCP | GCS / Cloud Logging | JSON | BigQuery分析、Cloud SIEMとの統合 |
# AWS: Account APIでログ配信を設定
curl -X POST "https://accounts.cloud.databricks.com/api/2.0/accounts/<account_id>/log-delivery" \
-H "Authorization: Bearer <admin_token>" \
-H "Content-Type: application/json" \
-d '{
"log_type": "AUDIT_LOGS",
"output_format": "JSON",
"credentials_id": "<credential_config_id>",
"storage_configuration_id": "<storage_config_id>",
"delivery_path_prefix": "databricks/audit-logs"
}'| 比較項目 | System Tables(system.access.audit) | ログ配信(S3/Event Hubs/GCS) |
|---|---|---|
| セットアップ | 追加設定不要(有効化のみ) | ストレージ/認証情報の設定が必要 |
| クエリ方法 | Databricks SQL / Notebookから直接SQL | 外部ツール(Athena, Sentinel, Splunk) |
| データ形式 | Delta Table(最適化済み) | JSON(gzip圧縮) |
| 保持期間 | 365日(プランにより変動) | ストレージの設定次第(無期限も可能) |
| コスト | DBU消費(クエリ実行時) | クラウドストレージの保管・転送コスト |
| リアルタイム性 | 数分〜数十分の遅延 | Event Hubsで準リアルタイム可能 |
| Databricks外からのアクセス | 不可(Databricks内でのみクエリ) | 可能(外部ツールから直接アクセス) |
Databricksの監査ログは、主要なコンプライアンスフレームワークへの対応に活用できます。
| フレームワーク | 監査ログの活用ポイント |
|---|---|
| SOC 2(Type II) | アクセス制御の有効性証明(ログインイベント、権限変更、異常アクセス検知)。監査人にクエリ結果をエビデンスとして提出 |
| ISO 27001 | A.12.4「ログ取得」要件への対応。イベントログの記録・保護・レビューの証跡 |
| GDPR | 個人データへのアクセスログ。「誰がいつ個人データを含むテーブルにアクセスしたか」の追跡 |
| HIPAA | PHI(保護対象保健情報)へのアクセス監査。アクセスログの最低6年保持 |
コンプライアンス対応のベストプラクティスとして、以下を推奨します。
Audit LogsはData Engineer Associate / Professional、およびAdministration関連の出題範囲に含まれます。
system.access.auditData Engineer / Administration / Security
問題 1
セキュリティチームが「過去30日間でUnity Catalogの権限変更(GRANT/REVOKE)を行ったユーザーとその対象オブジェクト」を調査したい。最も適切なアプローチはどれか。
正解: A
system.access.auditテーブルにはUnity Catalogのすべての権限変更イベント(grantPermission / revokePermission)が自動記録されます。service_nameとaction_nameでフィルタし、request_paramsから対象オブジェクトと付与先プリンシパルを抽出するのが最も効率的で正確な方法です。Notebook履歴の手動検索は網羅性がなく、API経由の権限変更を検出できません。リネージグラフはデータフローの追跡であり権限変更の追跡ではありません。クラスタログはSpark実行ログであり、Unity Catalogの権限変更は記録されません。
System Tables(system.access.audit)とログ配信(Audit Log Delivery)はどちらを使うべきですか?
system.access.auditはDatabricks SQL/Notebookから直接SQLでクエリでき、追加設定なしで利用できるため、日常的な監査クエリやダッシュボード構築に最適です。一方、ログ配信(S3/Azure Event Hubs/GCSへの配信)は、Databricks外のSIEMツール(Splunk、Sentinel、Datadogなど)にログを統合したい場合や、長期アーカイブ・コンプライアンスで外部ストレージへの保存が必須な場合に必要です。両方を併用するのがベストプラクティスです。
監査ログにはどのイベントが記録されますか?
主要なイベントカテゴリとして、ワークスペース操作(ログイン/ログアウト、設定変更)、クラスタ操作(作成/起動/終了/削除)、ノートブック操作(作成/実行/共有/エクスポート)、ジョブ操作(作成/実行/成功/失敗)、Unity Catalogイベント(GRANT/REVOKE/テーブルアクセス/リネージ)、Secrets操作(シークレットの読み取り/書き込み)が記録されます。各イベントにはタイムスタンプ、ユーザーID、アクション名、リクエストパラメータ、レスポンスコードが含まれます。
監査ログの保持期間はどのくらいですか?
System Tables(system.access.audit)の保持期間はDatabricksのプランにより異なり、デフォルトでは365日間です。コンプライアンス要件でそれ以上の保持が必要な場合は、ログ配信を設定してS3/ADLS/GCSにアーカイブするか、System Tablesのデータを定期的にDelta Tableにコピーして長期保存する方法があります。SOC 2やISO 27001の監査では通常1〜3年の保持が求められるため、外部ストレージへのアーカイブが推奨されます。
NicheeLab編集部
データエンジニアリング・クラウド資格の専門家。Databricks・Snowflake等の認定資格を保有し、実務経験に基づいた問題作成・解説を行っています。NicheeLab運営。
Databricks資格一覧|全7試験・難易度・勉強法
Databricks認定資格全7試験の一覧・難易度・出題範囲・合格ラインを徹底解説。2026年最新版の公式試験ガイドに準...
Databricks試験の難易度ランキング|全7資格を徹底比較
Databricks認定全7試験の難易度をランキング形式で徹底比較。合格率・学習時間・出題傾向から難易度を分析。...
Databricks資格の勉強方法|最短合格ルートと学習時間の目安
Databricks認定資格に最短で合格するための勉強方法を完全ガイド。公式リソース・問題集・学習スケジュールを徹底解説...
Databricks Data Engineer Associate完全解説|出題範囲・問題例・合格戦略
Databricks Certified Data Engineer Associate試験を徹底解説。5つの出題ドメイ...
Databricks Data Engineer Professional完全解説|上級試験の攻略法
Databricks Certified Data Engineer Professional試験を徹底解説。10の出題...