Aller au contenu principal

Audit et surveillance du Data Sharing

Cet article décrit comment les fournisseurs de données et les destinataires peuvent utiliser les logs d'audit pour surveiller les événements OpenSharing. Les logs d'audit du fournisseur enregistrent les actions entreprises par le fournisseur et les actions entreprises par les destinataires sur les données partagées du fournisseur. Les logs d'audit des destinataires enregistrent les événements liés à l'accès aux partages et à la gestion des objets du fournisseur.

Exigences

Pour accéder aux logs d'audit, un administrateur de compte doit activer la table système des logs d'audit pour votre compte Databricks. Consultez Activer les tables système. Pour information sur la table système des logs d'audit, consultez Référence de la table système des logs d'audit.

Si vous n'êtes pas administrateur de compte ou administrateur de métastore, vous devez avoir accès à system.access.audit pour lire les Logs d'audit.

Affichez les événements OpenSharing dans le Log d’audit

Si votre compte a activé les tables système, les Logs d'audit sont stockés dans system.access.audit. Si, alternativement, votre compte a une configuration de livraison de journaux d'audit, vous devez connaître le compartiment et le chemin où les Logs sont livrés.

Événements enregistrés

Pour afficher la liste des événements de journal d'audit OpenSharing, consultez les événements OpenSharing.

Afficher les détails du résultat de la query d'un destinataire

OpenSharing prend en charge le partage de types d’assets tels que les tables, les vues, les vues matérialisées, les tables de streaming et les volumes. OpenSharing fournit un accès en lecture temporaire aux données sous-jacentes à partir d’URL pré-signées ou de jetons STS à portée réduite. Le tableau suivant décrit comment le type de partage correspond aux événements de log d’audit enregistrés :

Scénario

Événements du log d'audit

Tables partagées avec des destinataires ouverts (accès URL pré-signé) et tables sans historique partagées avec des destinataires Databricks

  • deltaSharingQueriedTable (pour les queries de table) - deltaSharingQueriedTableChanges (pour les query CDF)

Tables éligibles partagées avec des destinataires ouverts (accès par jeton cloud, mode d'accès basé sur le répertoire). Consultez Jetons cloud et accès basé sur le répertoire.

  • generateTemporaryTableCredential

Tables avec historique partagé avec les destinataires Databricks

  • generateTemporaryTableCredential

Partage de volume (accès basé sur des jetons STS)

  • generateTemporaryVolumeCredential

Scénario

Événements du log d'audit

Tables partagées avec des destinataires ouverts (accès URL pré-signé) et tables sans historique partagées avec des destinataires Databricks

  • deltaSharingQueriedTable (pour les queries de table) - deltaSharingQueriedTableChanges (pour les query CDF)

Tables éligibles partagées avec des destinataires ouverts (accès par jeton cloud, mode d'accès basé sur le répertoire). Consultez Jetons cloud et accès basé sur le répertoire.

  • generateTemporaryTableCredential

Tables avec historique partagé avec les destinataires Databricks

  • generateTemporaryTableCredential

Partage de volume (accès basé sur des jetons STS)

  • generateTemporaryVolumeCredential

Afficher les détails sur les partages d'URL pré-signées

Dans les logs du fournisseur, les événements deltaSharingQueriedTableChanges et deltaSharingQueriedTable sont enregistrés après qu'une query du destinataire des données reçoit une réponse pour le partage basé sur une URL pré-signée. Les fournisseurs peuvent consulter le champ response.result de ces logs pour voir plus de détails sur ce qui a été partagé avec le destinataire. Le champ peut inclure les valeurs suivantes. Cette liste n'est pas exhaustive.

JSON
"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"

Afficher les détails concernant les partages de jetons STS

Dans les logs du fournisseur, les événements generateTemporaryTableCredentials et generateTemporaryVolumeCredentials sont enregistrés après qu'une query du destinataire des données ait reçu une réponse pour le partage basé sur les jetons STS. Les fournisseurs peuvent consulter la colonne request_params de ces logs pour voir plus de détails sur ce qui a été partagé avec le destinataire. Le champ peut inclure les valeurs suivantes. Cette liste n'est pas exhaustive.

JSON
"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"

Erreurs enregistrées

Si une tentative d'action OpenSharing échoue, l'action est consignée avec le message d'erreur dans le champ response.error_message du log. Les éléments entre < et > caractères représentent un texte d'espace réservé.

Messages d'erreur dans les logs du fournisseur

OpenSharing Logs les erreurs suivantes pour les fournisseurs de données :

  • OpenSharing n'est pas activé sur le metastore sélectionné.

    DatabricksServiceException: FEATURE_DISABLED:
    Delta Sharing is not enabled
  • Une opération a été tentée sur un catalogue qui n'existe pas.

    DatabricksServiceException: CATALOG_DOES_NOT_EXIST:
    Catalog '<catalog>' does not exist.
  • Un utilisateur qui n'est pas administrateur de compte ou administrateur de metastore a tenté d'effectuer une opération privilégiée.

    DatabricksServiceException: PERMISSION_DENIED:
    Only administrators can <operation-name> <operation-target>
  • Une opération a été effectuée sur un metastore à partir d'un workspace auquel le metastore n'est pas attribué.

    DatabricksServiceException: INVALID_STATE:
    Workspace <workspace-name> is no longer assigned to this metastore
  • Une requête ne contenait pas le nom du destinataire ou le nom du partage.

    DatabricksServiceException: INVALID_PARAMETER_VALUE: CreateRecipient/CreateShare Missing required field: <recipient-name>/<share-name>
  • Une requête incluait un nom de destinataire ou un nom de partage non valide.

    DatabricksServiceException: INVALID_PARAMETER_VALUE: CreateRecipient/CreateShare <recipient-name>/<share-name> is not a valid name
  • Un utilisateur a tenté de partager une table qui ne se trouve pas dans un métastore Unity Catalog.

    DatabricksServiceException: INVALID_PARAMETER_VALUE: Only managed or external table on Unity Catalog can be added to a share
  • Un utilisateur a tenté de renouveler le jeton d'un destinataire qui était déjà dans un état de renouvellement et dont le jeton précédent n'avait pas encore expiré.

    DatabricksServiceException: INVALID_PARAMETER_VALUE: There are already two active tokens for recipient <recipient-name>
  • Un utilisateur a tenté de créer un nouveau destinataire ou de partager avec le même nom qu'un destinataire existant.

    DatabricksServiceException: RECIPIENT_ALREADY_EXISTS/SHARE_ALREADY_EXISTS: Recipient/Share <name> already exists`
  • Un utilisateur a tenté d'effectuer une opération sur un destinataire ou un partage qui n'existe pas.

    DatabricksServiceException: RECIPIENT_DOES_NOT_EXIST/SHARE_DOES_NOT_EXIST: Recipient/Share '<name>' does not exist
  • Un utilisateur a tenté d'ajouter une table à un partage, mais la table avait déjà été ajoutée.

    DatabricksServiceException: RESOURCE_ALREADY_EXISTS: Shared Table '<name>' already exists
  • Un utilisateur a tenté d'effectuer une opération qui référençait une table inexistante.

    DatabricksServiceException: TABLE_DOES_NOT_EXIST: Table '<name>' does not exist
  • Un utilisateur a tenté d'effectuer une Opérations faisant référence à un schéma qui n'existait pas.

    DatabricksServiceException: SCHEMA_DOES_NOT_EXIST: Schema '<name>' does not exist
  • Un utilisateur a tenté d'accéder à un partage qui n'existe pas.

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

Messages d’erreur dans les Logs des destinataires

OpenSharing enregistre les Logs suivants pour les destinataires des données :

  • L'utilisateur a tenté d'accéder à un partage pour lequel il n'a pas l'autorisation.

    DatabricksServiceException: PERMISSION_DENIED:
    User does not have SELECT on Share <share-name>
  • L’utilisateur a tenté d’accéder à un partage qui n’existe pas.

    DatabricksServiceException: SHARE_DOES_NOT_EXIST: Share <share-name> does not exist.
  • L’utilisateur a tenté d’accéder à une table qui n’existe pas dans le partage.

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