データ共有の監査と監視

この記事では、データ プロバイダーと受信者が監査ログを使用して OpenSharing イベントを監視する方法について説明します。 プロバイダー監査ログには、プロバイダーによって実行されたアクションと、プロバイダーの共有データに対して受信者が実行したアクションが記録されます。 受信者監査ログには、共有へのアクセスとプロバイダー オブジェクトの管理に関連するイベントが記録されます。

必要条件

監査ログにアクセスするには、アカウント管理者が Azure Databricks アカウントの監査ログ システム テーブルを有効にする必要があります。 「システム テーブルを有効にする」を参照してください。 監査ログ・システム表の詳細については、 監査ログ・システム表のリファレンスを参照してください

アカウント管理者でもメタストア管理者でもない場合、監査ログを読むため、system.access.audit へのアクセス権が付与される必要があります。

監査ログで OpenSharing イベントを表示する

アカウントでシステム テーブルが有効になっている場合、監査ログは system.access.auditに格納されます。 または、アカウントに 監査ログ配信の設定がある場合は、ログが配信されるバケットとパスを把握する必要があります。

ログに記録されたイベント

OpenSharing 監査ログ イベントの一覧を表示するには、「 OpenSharing イベント」を参照してください。

受信者のクエリ結果の詳細を表示する

OpenSharing では、テーブル、ビュー、具体化されたビュー、ストリーミング 可能なリソース、ボリュームなどの資産の種類の共有がサポートされています。 OpenSharing では、署名済み URL またはスコープダウン STS トークンから、基になるデータへの一時的な読み取りアクセスが提供されます。 次の表は、共有の種類がログに記録された監査ログ イベントにどのように対応するかを示しています。

シナリオ 監査ログイベント
開いている受信者と共有されているテーブル (署名済みの URL アクセス) と、Databricks 受信者と共有された履歴のないテーブル
  • deltaSharingQueriedTable (テーブル クエリの場合)
  • deltaSharingQueriedTableChanges (CDF クエリの場合)
開いている受信者と共有される対象テーブル (クラウド トークン アクセス、ディレクトリ ベースのアクセス モード)。 クラウド トークンとディレクトリ ベースのアクセスを参照してください。
  • generateTemporaryTableCredential
Databricks 受信者と共有された履歴を含むテーブル
  • generateTemporaryTableCredential
ボリューム共有 (STS トークン ベースのアクセス)
  • generateTemporaryVolumeCredential

署名済み URL 共有の詳細を表示する

プロバイダー ログでは、データ受信者のクエリが署名済みの URL ベースの共有に対する応答を取得した後、 deltaSharingQueriedTableChangesdeltaSharingQueriedTable のイベントがログに記録されます。 プロバイダーは、これらのログの response.result フィールドを表示して、受信者と共有された内容の詳細を表示できます。 このフィールドには、次の値を含めることができます。 このリストは全てを網羅しているわけではありません。

"checkpointBytes": "0",
"earlyTermination": "false",
"maxRemoveFiles": "0",
"path": "file: example/s3/path/golden/snapshot-data0/_delta_log",
"deltaSharingPartitionFilteringAccessed": "false",
"deltaSharingRecipientId": "<redacted>",
"deltaSharingRecipientIdHash": "<recipient-hash-id>",
"jsonLogFileNum": "1",
"scannedJsonLogActionNum": "5",
"numRecords": "3",
"deltaSharingRecipientMetastoreId": "<redacted>",
"userAgent": "Delta-Sharing-Unity-Catalog-Databricks-Auth/1.0 Linux/4.15.0-2068-azure-fips OpenJDK_64-Bit_Server_VM/11.0.7+10-jvmci-20.1-b02 java/11.0.7 scala/2.12.15 java_vendor/GraalVM_Community",
"jsonLogFileBytes": "2846",
"checkpointFileNum": "0",
"metastoreId": "<redacted>",
"limitHint": "Some(1)",
"tableName": "cookie_ingredients",
"tableId": "1234567c-6d8b-45fd-9565-32e9fc23f8f3",
"activeAddFiles": "2", // number of AddFiles returned in the query
"numAddFiles": "2", // number of AddFiles returned in the query
"numAddCDCFiles": "2", // number of AddFiles returned in the CDF query
"numRemoveFiles": "2", // number of RemoveFiles returned in the query
"numSeenAddFiles": "3",
"scannedAddFileSize": "1300", // file size in bytes for the AddFile returned in the query
"scannedAddCDCFileSize": "1300", // file size in bytes for the AddCDCFile returned in the CDF query
"scannedRemoveFileSize": "1300", // file size in bytes for the RemoveFile returned in the query
"scannedCheckpointActionNum": "0",
"tableVersion": "0"

STS トークン共有の詳細を表示する

プロバイダー ログでは、データ受信者のクエリが STS トークンベースの共有に対する応答を取得した後、イベント generateTemporaryTableCredentialsgenerateTemporaryVolumeCredentials がログに記録されます。 プロバイダーは、これらのログの request_params 列を表示して、受信者と共有された内容の詳細を表示できます。 このフィールドには、次の値を含めることができます。 このリストは全てを網羅しているわけではありません。

"recipient_name": "someRecipientName"
"share_id": "ea7a4555-43d9-4cbd-a5df-f4f5193f297e"
"credential_type": "StorageCredential"
"is_permissions_enforcing_client": "true"
"table_full_name": "someTableName"
"operation": "READ"
"share_name": "someShareName"
"table_id": "someTableId"
"share_owner": "someShareOwner"
"recipient_id": "someRecipientId"
"table_url": "s3://somePath"
"metastore_id": "someMetastoreId"

ログに記録されたエラー

OpenSharing アクションの試行が失敗した場合、アクションはログの response.error_message フィールドにエラー メッセージと共に記録されます。 <> の文字間の項目はプレースホルダー テキストを表します。

プロバイダー ログのエラー メッセージ

OpenSharing では、データ プロバイダーに関する次のエラーがログに記録されます。

  • 選択したメタストアで OpenSharing が有効になっていません。

    DatabricksServiceException: FEATURE_DISABLED:
    Delta Sharing is not enabled
    
  • 存在しないカタログで操作を実行しようとしました。

    DatabricksServiceException: CATALOG_DOES_NOT_EXIST:
    Catalog '<catalog>' does not exist.
    
  • アカウント管理者またはメタストア管理者ではないユーザーが権限が必要な操作を実行しようとしました。

    DatabricksServiceException: PERMISSION_DENIED:
    Only administrators can <operation-name> <operation-target>
    
  • メタストアが割り当てられていないワークスペースからメタストアに操作を実行しようとしました。

    DatabricksServiceException: INVALID_STATE:
    Workspace <workspace-name> is no longer assigned to this metastore
    
  • 要求に受信者名または共有名がありませんでした。

    DatabricksServiceException: INVALID_PARAMETER_VALUE: CreateRecipient/CreateShare Missing required field: <recipient-name>/<share-name>
    
  • 要求に無効な受信者名または共有名が含まれていました。

    DatabricksServiceException: INVALID_PARAMETER_VALUE: CreateRecipient/CreateShare <recipient-name>/<share-name> is not a valid name
    
  • ユーザーが Unity Catalog メタストアにないテーブルを共有しようとしました。

    DatabricksServiceException: INVALID_PARAMETER_VALUE: Only managed or external table on Unity Catalog can be added to a share
    
  • すでにローテーションした状態にあり、以前のトークンの期限がまだ切れていない受信者をユーザーがローテーションしようとしました。

    DatabricksServiceException: INVALID_PARAMETER_VALUE: There are already two active tokens for recipient <recipient-name>
    
  • ユーザーが既存のものと同じ名前で新しい受信者または共有を作成しようとしました。

    DatabricksServiceException: RECIPIENT_ALREADY_EXISTS/SHARE_ALREADY_EXISTS: Recipient/Share <name> already exists`
    
  • ユーザーが存在しない受信者または共有に対して操作を実行しようとしました。

    DatabricksServiceException: RECIPIENT_DOES_NOT_EXIST/SHARE_DOES_NOT_EXIST: Recipient/Share '<name>' does not exist
    
  • ユーザーがテーブルを共有に追加しようとしましたが、そのテーブルはすでに追加されています。

    DatabricksServiceException: RESOURCE_ALREADY_EXISTS: Shared Table '<name>' already exists
    
  • ユーザーが存在しないテーブルを参照する操作を実行しようとしました。

    DatabricksServiceException: TABLE_DOES_NOT_EXIST: Table '<name>' does not exist
    
  • ユーザーが存在しないテーブルを参照する操作を実行しようとしました。

    DatabricksServiceException: SCHEMA_DOES_NOT_EXIST: Schema '<name>' does not exist
    
  • ユーザーが存在しない共有にアクセスしようとしました。

    DatabricksServiceException: SHARE_DOES_NOT_EXIST: Share <share-name> does not exist.
    

受信者ログのエラー メッセージ

OpenSharing では、データ受信者に関する次のエラーがログに記録されます。

  • ユーザーがアクセス許可のない共有にアクセスしようとしました。

    DatabricksServiceException: PERMISSION_DENIED:
    User does not have SELECT on Share <share-name>
    
  • ユーザーが存在しない共有にアクセスしようとしました。

    DatabricksServiceException: SHARE_DOES_NOT_EXIST: Share <share-name> does not exist.
    
  • ユーザーが、共有に存在しないテーブルにアクセスしようとしました。

    DatabricksServiceException: TABLE_DOES_NOT_EXIST: <table-name> does not exist.