監査ログの配信を構成する
Databricks では、アカウントの監査ログにアクセスするために、監査ログ システムテーブル (system.access.audit) の使用を推奨しています。「監査ログシステムテーブルリファレンス」を参照してください。Databricks は、機密データが公開されたり、デプロイメントが危険にさらされたりする可能性があるため、このデータをプラットフォーム外に移動することはお勧めしません。監査ログの内容の性質上、エクスポートされた監査ログのセキュリティを維持し、悪用を防止する責任があることにご留意ください。
この記事では、監査ログを JSON ファイル形式で Amazon S3 ストレージバケットに低レイテンシーで配信するように設定する方法について説明します。
監査ログが S3 ストレージバケットに配信されると、データを使用状況分析に利用できるようになります。 Databricks は、アカウント内のワークスペースごとに個別の JSON ファイルと、アカウント レベルのイベント用に個別のファイルを提供します。 ファイル スキーマと監査イベントの詳細については、「 監査ログのリファレンス」を参照してください。
オプションで、ログ配信用に作成する AWSロールに使用したアカウント以外の アカウントにログを配信できます。IAMこれにより、たとえば、複数の AWS アカウントのワークスペースを同じ S3 バケットに配信するように設定するなど、柔軟性が得られます。 S3このオプションでは、クロスアカウントIAM ロールを参照する bucket ポリシーを設定する必要があります。手順とポリシーテンプレートについては、「 ステップ 3: クロスアカウントサポート」を参照してください。
実行中のワークスペースのログの配信に加えて、 キャンセルされたワークスペース のログも配信され、ワークスペースの最終日を表すログが適切に配信されるようになります。
必要条件
これらの手順を使用して監査ログの配信を設定するには、次の操作を行う必要があります。
- アカウント管理者になる。
- Databricks CLI を認証して、アカウント レベルのコマンドを実行します。「Databricks CLI の認証」を参照してください。
高レベルのフロー
このセクションでは、監査ログ配信のフローの概要について説明します。
- ステップ 1: ストレージの設定: AWS で、新しい S3 バケットを作成します。Databricks APIを使用して、バケット名を使用するストレージ設定オブジェクトを作成します。
- ステップ 2: 資格情報の構成: AWSで、適切な AWS IAMロールを作成します。 Databricks APIを使用して、IAMロールのARNを使用する資格情報設定オブジェクトを作成します。
- (オプション)ステップ3:クロスアカウントサポート:ログ配信用に作成した AWSロールのアカウント以外の アカウントにログを配信するには、IAM S3バケットポリシーを追加します。このポリシーは、前の手順で作成したクロスアカウント IAMロールの ID を参照します。
- 手順 4: ログ配信 API を呼び出す: 前の手順の資格情報とストレージ構成オブジェクトを使用するログ配信構成を作成します。
これらの手順を完了すると、JSON ファイルにアクセスできるようになります。 配送場所は次の形式です。
<bucket-name>/<delivery-path-prefix>/workspaceId=<workspaceId>/date=<yyyy-mm-dd>/auditlogs_<internal-id>.json
アカウント全体に対して監査ログ配信を設定すると、1 つのワークスペースに関連付けられていないアカウントレベルの監査イベントが workspaceId=0 パーティションに配信されます。
ワークスペースの数に基づく考慮事項
配信設定は、ワークスペースの数と配置場所によって異なる場合があります。
-
Databricks アカウントにワークスペースが 1 つある場合: 大まかなフローで説明されている指示に従い、ワークスペースの 1 つの構成オブジェクトを作成します。
-
同じ Databricks アカウントに複数のワークスペースがある場合: 次のいずれかの操作を行います。
- アカウント内のすべてのワークスペースで同じ構成 (バケットとS3 ロール ログ配信) を共有します。IAMこれは、アカウントレベルの監査ログも配信する唯一の設定オプションです。 これはデフォルトのオプションです。
- アカウント内の各ワークスペースに個別の構成を使用する。
- ワークスペースのグループごとに個別の構成を使用し、グループ内で構成を共有する。
-
複数のワークスペースがあり、それぞれが個別の Databricks アカウントに関連付けられている場合: アカウントごとに一意のストレージと資格情報の設定オブジェクトを作成します。 これらの設定オブジェクト間で S3 バケットまたは IAMロールを再利用できます。
ワークスペースがアカウント APIを使用して作成されていない場合でも、アカウント API を使用してログ配信を設定できます。
監査配信の詳細
アカウントでログ記録を有効にすると、Databricks は定期的に監査ログを人間が読める形式で配信場所に自動的に送信します。
- レイテンシー : 初期設定またはその他の設定変更後、変更が有効になるまでに多少の遅延が予想されます。 監査ログ配信の初期設定では、ログ配信が開始されるまでに最大 1 時間かかります。 ログの配信が開始されると、通常、監査可能なイベントは 15 分以内に記録されます。 追加の設定変更が有効になるまでには、通常 1 時間かかります。
- 暗号化 : Databricks は、Amazon S3 サーバー側の暗号化を使用して監査ログを暗号化します。
- 形式 : Databricks は監査ログを JSON 形式で配信します。
- 場所 :配送場所は
<bucket-name>/<delivery-path-prefix>/workspaceId=<workspaceId>/date=<yyyy-mm-dd>/auditlogs_<internal-id>.jsonです。 新しい JSON ファイルは数分ごとに配信されるため、既存のファイルが上書きされる可能性があります。 配信パスは、構成の一部として定義されます。 単一のワークスペースに関連付けられていないアカウントレベルの監査イベントは、アカウント全体に対して監査ログの配信を構成している場合、workspaceId=0パーティションに配信されます。- Databricks は、バケット内の配信されたログファイルをいつでも上書きできます。 ファイルが上書きされた場合、既存のコンテンツは残りますが、監査可能なイベントのために追加の行が存在する可能性があります。
- 上書きにより、アカウントへの読み取りまたは削除アクセス権を必要とせずに、正確に一度のセマンティクスが保証されます。
ログ配信APIを使用する
ログ配信APIには、次の追加機能があります。
ログ配信の設定ステータスは、API レスポンスの log_delivery_status オブジェクトで確認できます。log_delivery_statusでは、配信の試行または成功の最終時間(成功または失敗)と、配信の試行または成功の時間を確認できます。
監査ログの配信制限
アカウントごとに利用可能なログ配信設定の数には制限があります(各制限は、課金利用や監査ログなど、各ログタイプに個別に適用されます)。 タイプごとに最大 2 つの有効なアカウントレベルの配信設定 (ワークスペースフィルターなしの設定) を作成できます。 さらに、ログの種類ごとにワークスペースごとに 2 つのワークスペース レベルの配信構成を作成して有効にできるため、ログの種類ごとに 2 つ以下の配信構成のワークスペース フィルターに同じワークスペース ID を含めることができます。
ログ配信設定を削除することはできませんが、無効にすることはできます。無効にした構成を再度有効にすることはできますが、前述の制限に違反するとリクエストが失敗します。
監査ログ スキーマに関する考慮事項
- アクションに時間がかかる場合、リクエストとレスポンスは別々にログに記録されますが、リクエストとレスポンスのペアの
requestIdは同じものになります。 - オートスケーリングによるクラスターのサイズ変更やスケジューリングによるジョブの起動などの自動アクションは、
System-Userユーザーによって実行されます。 requestParamsフィールドは切り捨てられます。JSON表現のサイズが100 KBを超えると、値は切り捨てられ、切り捨てられたエントリに文字列... truncatedが追加されます。まれに、切り捨て後のマップが100 KBを超える場合がありますが、その場合は代わりに空の値を持つ1つのTRUNCATEDキーが設定されます。
監査ログのスキーマの例
クラウドストレージに配信される監査ログは、JSON でイベントを出力します。serviceName プロパティと actionName プロパティは、イベントを識別します。名前付け規則は、Databricks REST API に従います。
次の例は、createMetastoreAssignmentイベントのものです。
{
"version": "2.0",
"auditLevel": "ACCOUNT_LEVEL",
"timestamp": 1629775584891,
"orgId": "3049056262456431186970",
"shardName": "test-shard",
"accountId": "77636e6d-ac57-484f-9302-f7922285b9a5",
"sourceIPAddress": "10.2.91.100",
"userAgent": "curl/7.64.1",
"sessionId": "f836a03a-d360-4792-b081-baba525324312",
"userIdentity": {
"email": "someone@example.com",
"subjectName": null
},
"serviceName": "unityCatalog",
"actionName": "createMetastoreAssignment",
"requestId": "ServiceMain-da7fa5878f40002",
"requestParams": {
"workspace_id": "30490590956351435170",
"metastore_id": "abc123456-8398-4c25-91bb-b000b08739c7",
"default_catalog_name": "main"
},
"response": {
"statusCode": 200,
"errorMessage": null,
"result": null
},
"MAX_LOG_MESSAGE_LENGTH": 16384
}