配置审计日志记录

请注意

此特性可在优质及以上计划

Databricks提供了对Databricks用户执行的活动的审计日志的访问,允许您的企业监视详细的Databricks使用模式。

日志有两种类型:

  • 带有工作区级事件的工作区级审计日志。

  • 包含帐户级事件的帐户级审计日志。

有关每种类型的事件和相关服务的列表,请参见审计事件

配置详细审计日志

除了默认值事件,您可以配置工作空间以通过启用来生成其他事件详细审计日志

要启用详细审计日志,您的帐户和工作空间必须位于平台的E2版本上。bob体育客户端下载要确认您使用的平台版本,请与Databricks代表联系。bob体育客户端下载

开启/关闭详细审计日志

  1. 作为管理员,去数据库管理控制台

  2. 点击工作空间设置

  3. 旁边详细审计日志,启用或禁用该特性。

启用或禁用详细日志记录时,将在类别中发出可审计事件工作空间用行动workspaceConfKeys.的workspaceConfKeys请求参数为enableVerboseAuditLogs.请求参数workspaceConfValues真正的(功能启用)或(功能禁用)。

额外的详细笔记本操作

审计日志类别中的额外详细操作笔记本

行动

描述

请求参数

runCommand

在Databricks在笔记本中运行命令后触发。命令对应于笔记本中的单元格。

[" notebookId ", " executionTime ", " status ", " commandId ", " commandText "]

额外的verbose Databricks SQL操作

审计日志类别中的其他操作databrickssql

行动

描述

请求参数

commandSubmit

当命令提交到Databricks SQL时运行。

[" commandText ", " warehouseId ", " commandId "]

commandFinish

当命令完成或取消命令时运行。

[" warehouseId”、“commandId”)

检查响应字段显示与命令结果相关的附加信息。

  • statusCode—HTTP响应码。这将是错误400如果它是一个一般错误。

    • errorMessage—错误提示。在某些情况下,对于某些长时间运行的命令errorMessage字段不能在失败时填充。

    • 结果此字段为空

配置审计日志传递

作为Databricks帐户所有者(或帐户管理员,如果您在E2帐户),您可以配置将JSON文件格式的审计日志低延迟交付到AWS S3存储桶,在该存储桶中,您可以将数据用于使用情况分析.Databricks为帐户中的每个工作空间提供一个单独的JSON文件,并为帐户级事件提供一个单独的文件。

在初始设置或其他日志交付配置更改后,预计将延迟最多一小时,直到更改生效。日志传递开始后,可审计事件通常在15分钟内被记录。有关文件命名、下发规则和模式,请参见审核交付细节和格式

用于配置审计日志低延迟交付的API是帐户API 2.0,这与用于配置的API相同计费使用日志交付

您可以选择将日志发送到AWS帐户,而不是您为日志传递而创建的IAM角色所使用的帐户。这提供了灵活性,例如从多个AWS帐户设置工作区,以交付到相同的S3桶。该选项需要配置一个引用跨帐户IAM角色的S3桶策略。本文提供了说明和策略模板。

对日志的访问取决于您如何设置S3桶。Databricks将日志发送到AWS内置的S3桶BucketOwnerFullControl屏蔽ACL因此,帐户所有者和指定人员可以直接下载日志。要为新创建的对象支持桶的所有权,必须设置桶的所有权S3对象所有权设置为值桶主优先

重要的

如果你设置你的桶的S3对象所有权设置为对象的作家,新的对象,如您的日志仍然属于上传帐户,默认情况下,这是您创建并指定访问您的桶的IAM角色。这可能会使访问日志变得困难,因为您无法从AWS控制台或作为桶所有者进行身份验证的自动化工具访问它们。

Databricks建议您复习一下S3的安全最佳实践有关如何保护bucket中的数据免受不必要的访问的指导。

配置选项

如果需要配置审计日志下发,您可以选择以下选项。

  • 如果Databricks帐户中有一个工作空间,请按照以下部分中的说明,为您的工作空间创建一个具有公共配置的单个配置对象。

  • 如果您在同一个Databricks帐户中有多个工作区,您可以执行以下任何操作:

    • 帐户中的所有工作空间共享相同的配置(日志传递S3桶和IAM角色)。这是唯一可以交付帐户级审计日志的配置选项。这是默认选项。

    • 为帐户中的每个工作空间使用单独的配置。

    • 为不同的工作空间组使用单独的配置,每个组共享一个配置。

  • 如果您有多个工作区,每个工作区都与一个单独的Databricks帐户相关联,那么您必须为每个帐户创建唯一的存储和凭据配置对象,但是您可以在这些配置对象之间重用S3桶或IAM角色。

请注意

即使您使用Account API来配置日志传递,您也可以为任何工作空间配置日志传递,包括不是使用Account API创建的工作空间。

高级流

审计日志传递的高层流程:

  1. 配置存储:“AWS”下,新建AWS S3桶。使用Databricks API,调用Account API创建一个使用桶名的存储配置对象。

    请注意

    如果需要将日志发送到已创建的IAM角色帐户以外的AWS帐户,则需要添加S3桶策略。本步骤不需要添加策略。

  2. 配置的凭证:在AWS中,创建相应的AWS IAM角色。使用Databricks API,调用Account API来创建使用IAM角色的ARN的凭据配置对象。角色策略可以为S3桶中的日志传递指定一个路径前缀。如果您希望为共享S3桶但使用不同路径前缀的不同工作区配置日志传递,则可以选择定义一个IAM角色以包含多个路径前缀。

  3. 可选的跨帐户支持如果需要将日志发送到已创建的IAM角色帐户以外的AWS帐户,则需要添加S3桶策略。该策略引用您在上一步中创建的跨帐户IAM角色的id。

  4. 调用日志传递API:调用Account API来创建日志传递配置,该配置使用前面步骤中的凭据和存储配置对象。此步骤允许您指定是否希望为帐户中的所有工作区(当前和未来的工作区)或特定的一组工作区关联日志传递配置。有关帐户级事件的列表,请参见审计事件

完成这些步骤后,就可以访问JSON文件了。送货地点为:

-的名字>/<交付-路径-前缀>/workspaceId= <workspaceId>/日期= <yyyy-毫米-dd>/auditlogs_<内部-id>。json

如果为整个帐户配置审计日志传递,则未与任何单一工作空间相关联的帐户级审计事件将被传递到workspaceId = 0分区。

每隔几分钟就会交付新的JSON文件,可能会覆盖每个工作区的现有文件。当您最初设置审计日志传递时,可能需要一个小时才能开始日志传递。审计日志交付开始后,可审计事件通常在15分钟内被记录。额外的配置更改通常需要一个小时才能生效。

有关访问这些文件并使用Databricks分析它们的详细信息,请参见审计日志分析

重要的

每个帐户可用的日志传递配置的数量有一个限制(每个限制分别适用于每种日志类型,包括计费使用和审计日志)。每种类型最多可以创建两个启用的帐户级交付配置(没有工作区筛选器的配置)。此外,您可以为每个日志类型的每个工作空间创建并启用两个工作空间级别的交付配置,这意味着对于每种日志类型,相同的工作空间ID可以出现在工作空间过滤器中,而不超过两个交付配置。日志下发配置不能删除,但可以禁用。您可以重新启用已禁用的配置,但如果它违反了前面描述的限制,则请求将失败。

需求

  • 帐户所有者(或帐户管理员,如果您在E2帐户)电邮地址及密码,以进行api认证。邮箱地址和密码均区分大小写。

  • 帐户ID。对于E2版本平台上的帐户,请从bob体育客户端下载使用帐户控制台管理您的帐户对于非e2帐户,从您的帐户中获取帐户ID“使用概述”页签.如果找不到您的帐户ID,请联系您的Databricks代表。

如何验证api

本文中描述的api发布在accounts.cloud.www.neidfyre.com所有AWS区域部署的基本端点。

使用下面的API请求基URL:https://accounts.cloud.www.neidfyre.com/api/2.0/

这个REST API需要HTTP基本身份验证,这涉及到设置HTTP报头授权.在本文中,用户名指您的帐户所有者(如果您在E2帐户)电邮地址。邮件地址区分大小写。有几种方法可以向curl等工具提供凭据。

  • 在每个请求的头中分别传递您的用户名和帐户密码<用户名>:<密码>语法。

    例如:

    curl -X GET -u<用户名>:<密码>- h“application / json内容类型:“https://accounts.cloud.www.neidfyre.com/api/2.0/accounts/ <帐户id > / <端点>”
  • 应用base64编码到您的<用户名>:<密码>字符串,并直接在HTTP头文件中提供它:

    curl -X GET -H“application / json内容类型:- h授权:Basic “https://accounts.cloud.www.neidfyre.com/api/2.0/accounts/ <帐户id > / <端点>”
  • 创建一个. netrc文件,登录,密码属性:

    机器accounts.cloud.www.neidfyre.com登录<用户名>密码<密码>

    调用. netrc文件,使用- n在你的旋度命令:

    curl -n -X GET“https://accounts.cloud.www.neidfyre.com/api/2.0/accounts/ <帐户id > /工作区”

    本文的示例使用这种身份验证样式。

有关完整的API参考,请参见帐户API 2.0

步骤1:配置存储

Databricks将日志发送到您帐户中的S3桶。您可以配置多个工作空间来使用单个S3存储桶,也可以定义不同的工作空间(或工作空间组)来使用不同的存储桶。

此过程描述如何为帐户中的一个或多个工作区设置具有公共配置的单个配置对象。要为不同的工作空间使用不同的存储位置,请为每个工作空间或工作空间组重复本文中的过程。

  1. 中的说明创建S3桶配置AWS存储

    重要的

    若要将日志发送到Databricks工作空间以外的AWS帐户,必须添加S3桶策略。本步骤不需要添加桶策略。看到步骤3:可选的跨帐户支持

  2. 创建Databricks存储配置记录,表示新的S3桶。方法指定S3桶创建新的存储配置API帖子/账户/ <帐户id > /存储配置).

    通过以下内容:

    • storage_configuration_name:新的唯一存储配置名称。

    • root_bucket_info对象的JSON对象bucket_name字段,包含您的S3桶名。

    复制storage_configuration_id值在响应体中返回。您将在后面的步骤中使用它来创建日志传递配置。

    例如:

    curl -X POST -n“https://accounts.cloud.www.neidfyre.com/api/2.0/accounts/ < databricks-account-id > /存储配置- d”{:“storage_configuration_name databricks-workspace-storageconf-v1”," root_bucket_info ": {:“bucket_name my-company-example-bucket”} '

    回应:

    “storage_configuration_id”“< databricks-storage-config-id >”“account_id”“< databricks-account-id >”“root_bucket_info”“bucket_name”“my-company-example-bucket”},“storage_configuration_name”“databricks-workspace-storageconf-v1”“creation_time”1579754875555

步骤2:配置凭证

此过程描述如何为帐户中的一个或多个工作区设置具有公共配置的单个配置对象。要对不同的工作空间使用不同的凭据,请对每个工作空间或工作空间组重复本文中的过程。

请注意

如果需要使用不同的S3桶名,则需要创建不同的IAM角色。

  1. 以具有管理员权限的用户登录AWS控制台,然后转到服务。

  2. 单击角色选项卡。

  3. 点击创建角色

    1. 选择受信任实体类型,点击AWS服务

    2. 常用用例,点击EC2

    3. 单击下一个:权限按钮。

    4. 单击下一个:标签按钮。

    5. 单击下一个:审查按钮。

    6. 角色名字段,输入角色名。

      角色名
    7. 点击创建角色.将显示角色列表。

  4. 在角色列表中,单击已创建的角色。

  5. 添加内联策略。

    1. 在“权限”页签中,单击添加内联策略

      内联政策
    2. 在策略编辑器中,单击JSON选项卡。

      JSON编辑器
    3. 复制此访问策略并修改它。请将策略中的以下值替换为自己的配置值:

      • < s3-bucket-name >: AWS S3桶的桶名。

      • < s3-bucket-path-prefix >:(可选)到S3桶中交付位置的路径。如果不指定,则将日志下发到桶的根目录。路径必须匹配delivery_path_prefix争论的时候调用日志传递API

      “版本”“2012-10-17”“声明”:【“效应”“允许”“行动”:【“s3: GetBucketLocation”),“资源”:【“攻击:aws: s3::: < s3-bucket-name >”},“效应”“允许”“行动”:【“s3: propertynames”“s3: GetObject”“s3: DeleteObject”“s3: PutObjectAcl”“s3: AbortMultipartUpload”),“资源”:【“攻击:aws: s3::: < s3-bucket-name > / < s3-bucket-path-prefix > /”“攻击:aws: s3::: < s3-bucket-name > / < s3-bucket-path-prefix > / *”},“效应”“允许”“行动”:【“s3: ListBucket”“s3: ListMultipartUploadParts”“s3: ListBucketMultipartUploads”),“资源”“攻击:aws: s3::: < s3-bucket-name >”“条件”: {“StringLike”: {“s3:前缀”:【“< s3-bucket-path-prefix >”“< s3-bucket-path-prefix > / *”

      用户可以自定义路径前缀的策略用法:

      • 如果不想使用桶路径前缀,请删除< s3-bucket-path-prefix > /(包括最后的斜杠)。

      • 如果需要为共享S3桶的不同工作区配置不同的日志传递配置,但使用不同的路径前缀,可以通过定义IAM角色来包含多个路径前缀。该策略有两个单独的引用部分< s3-bucket-path-prefix >.在每种情况下,复制引用路径前缀的两个相邻行。为每个新的路径前缀重复每对行,例如:

      “资源”:【“攻击:aws: s3::: < mybucketname > /现场小组”“攻击:aws: s3::: < mybucketname > /现场小组/ *”“攻击:aws: s3::: < mybucketname > /财务团队/”“攻击:aws: s3::: < mybucketname > /财务团队/ *”
    4. 点击审查政策

    5. 的名字字段,输入策略名称。

    6. 点击创建政策

    7. 如果你使用业务控制策略以拒绝AWS帐户级别的某些操作,确保sts: AssumeRole白名单,这样Databricks可以承担跨帐号角色。

  6. 在角色摘要页面,单击信任关系选项卡。

  7. 将该访问策略粘贴到编辑器中,并将策略中的以下值替换为您自己的配置值:

    < databricks-account-id >-您的Databricks帐户ID。

    “版本”“2012-10-17”“声明”:【“效应”“允许”“校长”: {“AWS”“攻击:aws:我::414351767826:角色/ SaasUsageDeliveryRole-prod-IAMRole-3PLHICCRR1TK”},“行动”“sts: AssumeRole”“条件”: {“StringEquals”: {“sts: ExternalId”:【“< databricks-account-id >”
  8. 在角色摘要中,复制的角色是并将其保存到后面的步骤。

    的角色是
  9. 为您的AWS角色创建Databricks凭据配置ID。调用创建凭证配置API帖子/账户/ <帐户id > /凭证).此请求建立跨帐户信任,并返回一个引用ID,以便在创建新工作空间时使用。

    取代<帐户id >与您的Databricks帐户ID。在请求体中:

    • credentials_name到帐户中唯一的名称。

    • aws_credentials属性的对象sts_role财产。对象必须指定role_arn为你创建的角色。

    响应体将包括credentials_id字段,它是创建新工作空间所需的Databricks凭据配置ID。复制此字段,以便在后面的步骤中使用它创建日志传递配置。

    例如:

    curl -X POST -n“https://accounts.cloud.www.neidfyre.com/api/2.0/accounts/ < databricks-account-id > /凭证”- d”{:“credentials_name databricks-credentials-v1”," aws_credentials ": {" sts_role ": {:“role_arn攻击:aws:我::< aws-account-id >: / my-company-example-role”角色} '

    示例响应:

    “credentials_id”“< databricks-credentials-id >”“account_id”“< databricks-account-id >”“aws_credentials”“sts_role”“role_arn”“攻击:aws:我::< aws-account-id >: / my-company-example-role”角色“external_id”“< databricks-account-id >”},“credentials_name”“databricks-credentials-v1”“creation_time”1579753556257

    复制credentials_id字段,以供以后使用。

步骤3:可选的跨帐户支持

如果您的S3桶与用于日志传递的IAM角色在同一个AWS帐户中,请跳过此步骤。

要将日志发送到Databricks工作空间以外的AWS帐户,必须添加此步骤中提供的S3桶策略。该策略引用您在上一步中创建的跨帐户IAM角色的id。

  1. 在AWS控制台中,打开S3服务。

  2. 单击桶名。

  3. 单击权限选项卡。

  4. 单击桶的政策按钮。

    桶策略按钮
  5. 复制并修改此桶策略。

    取代< s3-bucket-name >使用S3桶名。取代< customer-iam-role-id >使用您新创建的IAM角色的角色ID。取代< s3-bucket-path-prefix >使用您想要的桶路径前缀。有关自定义路径前缀的信息,请参阅策略示例后面的说明。

    “版本”“2012-10-17”“声明”“效应”“允许”“校长”“AWS”“攻击:aws:我::< customer-iam-role-id >”},“行动”“s3: GetBucketLocation”“资源”“攻击:aws: s3::: < s3-bucket-name >”},“效应”“允许”“校长”“AWS”“攻击:aws:我::< customer-iam-role-id >”},“行动”“s3: propertynames”“s3: GetObject”“s3: DeleteObject”“s3: PutObjectAcl”“s3: AbortMultipartUpload”“s3: ListMultipartUploadParts”),“资源”“攻击:aws: s3::: < s3-bucket-name > / < s3-bucket-path-prefix > /”“攻击:aws: s3::: < s3-bucket-name > / < s3-bucket-path-prefix > / *”},“效应”“允许”“校长”“AWS”“攻击:aws:我::< customer-iam-role-id >”},“行动”“s3: ListBucket”“资源”“攻击:aws: s3::: < s3-bucket-name >”“条件”“StringLike”“s3:前缀”“< s3-bucket-path-prefix >”“< s3-bucket-path-prefix > / *”

    您可以自定义路径前缀的策略使用:

    • 如果不想使用桶路径前缀,请删除< s3-bucket-path-prefix > /(包括最后的斜杠)。

    • 如果需要多个工作区共享同一个S3桶,但使用不同的路径前缀进行日志传递配置,可以通过定义IAM角色来包含多个路径前缀。策略引用分为两部分< s3-bucket-path-prefix >.在每个地方,复制引用路径前缀的相邻两行。为每个新的路径前缀重复每对行。例如:

      “资源”:【“攻击:aws: s3::: < mybucketname > /现场小组”“攻击:aws: s3::: < mybucketname > /现场小组/ *”“攻击:aws: s3::: < mybucketname > /财务团队/”“攻击:aws: s3::: < mybucketname > /财务团队/ *”

步骤4:调用日志传递API

要配置日志传递,请调用日志传递配置API帖子/账户/ <帐户id > /日志交付).

你需要以下你在前面步骤中复制的值:

  • credentials_id:您的Databricks凭据配置ID,它表示您的跨帐户角色凭据。

  • storage_configuration_id:您的Databricks存储配置ID,它表示您的根S3桶。

还要设置以下字段:

  • log_type:始终设置为AUDIT_LOGS

  • output_format:始终设置为JSON.有关模式,请参见审计日志模式

  • delivery_path_prefix:(可选)设置为路径前缀。这必须与您在角色策略中使用的路径前缀匹配。交付路径为< bucket名> / < delivery-path-prefix > / workspaceId = < workspaceId > /日期= < yyyy-mm-dd > / auditlogs_ <内部id > . json.如果为整个帐户配置审计日志传递,则未与任何单一工作空间相关联的帐户级审计事件将被传递到workspaceId = 0分区。

  • workspace_ids_filter:(可选)设置为需要发送日志的工作区id的数组。默认情况下,工作区筛选字段为空,并且日志传递应用于帐户级别,为帐户中的所有工作区传递工作区级别的日志,以及帐户级别的日志。您可以选择将此字段设置为工作区id的数组(每个字段都是一个int64),日志传递应该应用到其中,在这种情况下,只有与指定的工作空间相关的工作空间级别的日志被传递。有关帐户级事件的列表,请参见审计事件

    如果您计划为不同的工作空间使用不同的日志传递配置,请显式地设置此字段。请注意,提到特定工作区的交付配置将不会应用于将来创建的新工作区,并且交付将不包括帐户级别的日志。

    对于某些类型的Databricks部署,每个帐户ID只有一个工作空间,因此这个字段是不必要的。

重要的

每个帐户可用的日志传递配置的数量有一个限制(每个限制分别适用于每种日志类型,包括计费使用和审计日志)。每种类型最多可以创建两个启用的帐户级交付配置(没有工作区筛选器的配置)。此外,您可以为每个日志类型的每个工作空间创建两个启用的工作空间级交付配置,这意味着对于每种日志类型,相同的工作空间ID可以出现在工作空间过滤器中,而不超过两个交付配置。日志下发配置不能删除,但可以禁用。您可以重新启用已禁用的配置,但如果它违反了前面描述的限制,则请求将失败。

例如:

curl -X POST -n“https://accounts.cloud.www.neidfyre.com/api/2.0/accounts/ < databricks-account-id > /日志交付”- d”{" log_delivery_configuration ": {:“log_type AUDIT_LOGS”,"config_name": "审计日志配置":“output_format JSON”,:“credentials_id < databricks-credentials-id >”,:“storage_configuration_id < databricks-storage-config-id >”,:“delivery_path_prefix auditlogs-data”,“workspace_ids_filter”:(6383650456894062,4102272838062927} '

示例响应:

“log_delivery_configuration”“config_id”“< config-id >”“config_name”“审计日志配置”“log_type”“AUDIT_LOGS”“output_format”“JSON”“account_id”“<帐户id >”“credentials_id”“< databricks-credentials-id >”“storage_configuration_id”“< databricks-storage-config-id >”“workspace_ids_filter”63836504568940624102272838062927),“delivery_path_prefix”“auditlogs-data”“状态”“启用”“creation_time”1591638409000“update_time”1593108904000“log_delivery_status”“状态”“创建”“消息”“日志下发配置”创建成功。状态将在第一次交付尝试后更新。”

日志传递api的其他特性

日志传递api有额外的功能。有关详细信息,请参阅API参考文档。

其他操作包括:

日志传递配置状态可以在API响应中找到log_delivery_status对象。与log_delivery_status,您可以查看状态(成功或失败)和最后一次尝试或成功交付的时间。

重要的

每个帐户可用的日志传递配置的数量有一个限制(每个限制分别适用于每种日志类型,包括计费使用和审计日志)。每种类型最多可以创建两个启用的帐户级交付配置(没有工作区筛选器的配置)。此外,您可以为每个日志类型的每个工作空间创建两个启用的工作空间级交付配置,这意味着对于每种日志类型,相同的工作空间ID可以出现在工作空间过滤器中,而不超过两个交付配置。日志下发配置不能删除,但可以禁用。您可以重新启用已禁用的配置,但如果它违反了前面描述的限制,则请求将失败。

审核交付细节和格式

一旦为您的帐户启用了日志记录,Databricks就会自动开始以人类可读的格式定期向您的交付位置发送审计日志。

  • 延迟:在初始设置或其他配置更改之后,更改生效前预计会有一些延迟。对于审计日志交付的初始设置,开始日志交付最多需要一个小时。在日志交付开始后,可审计事件通常在15分钟内被记录。额外的配置更改通常需要一个小时才能生效。

  • 加密: Databricks采用Amazon S3服务端加密方式对审计日志进行加密。

  • 格式: Databricks提供JSON格式的审计日志。

  • 位置:送货地点为< bucket名> / < delivery-path-prefix > / workspaceId = < workspaceId > /日期= < yyyy-mm-dd > / auditlogs_ <内部id > . json.每隔几分钟就会交付新的JSON文件,可能会覆盖现有文件。交付路径被定义为配置的一部分。未与任何单一工作空间相关联的帐户级审计事件将被交付到workspaceId = 0分区,如果您配置审计日志交付整个帐户。

    • 数据库可以随时覆盖桶中已下发的日志文件。如果文件被覆盖,则保留现有内容,但可能会有更多可审计事件的额外行。

    • 覆盖确保语义只发生一次,而不需要对帐户进行读取或删除访问。

审计日志模式

审计日志记录模式如下所示。

  • 版本:审计日志格式的schema版本。

  • 时间戳:动作的UTC时间戳。

  • workspaceId:此事件关联的工作区ID。对于应用于任何工作区的帐户级事件,可以将其设置为“0”。

  • sourceIPAddress:源请求IP地址。

  • userAgent:用于发出请求的浏览器或API客户端。

  • sessionId:动作的会话ID。

  • userIdentity:发起请求的用户信息。

    • 电子邮件:用户邮箱地址。

  • :记录请求的服务。

  • actionName:操作,如登录、注销、读、写等。

  • requestId:请求的唯一ID。

  • requestParams:被审计事件使用的参数键值对。

  • 响应:响应请求。

    • errorMessage:发生错误时的错误信息。

    • 结果:请求的结果。

    • statusCode:表示请求是否成功的HTTP状态码。

  • auditLevel:指定这是否是工作区级事件(WORKSPACE_LEVEL)或帐户级事件(ACCOUNT_LEVEL).

  • accountId:该Databricks帐户的帐户ID。

审计事件

而且actionName属性标识审计日志记录中的审计事件。命名约定遵循Databricks REST API参考

工作空间级审计日志可用于以下服务:

  • 账户

  • 集群

  • clusterPolicies

  • dbfs

  • 精灵

  • gitCredentials

  • globalInitScripts

  • iamRole

  • instancePools

  • 工作

  • mlflowExperiment

  • 笔记本

  • 回购

  • 秘密

  • serverlessRealTimeInference

  • databrickssql

  • sqlPermissions,其中包含启用表acl时所有的表访问审计日志。

  • ssh

  • webTerminal

  • 工作空间

帐户级审计日志可用于以下服务:

  • accountBillableUsage:帐户的计费使用权限。

  • logDelivery:计费使用、审计日志等日志下发配置。

  • ssoConfigBackend:帐户的单点登录设置。

  • accountsManager:在帐户控制台中执行的操作。

帐户级事件具有workspaceId字段设置为有效的工作空间ID,如果他们引用工作空间相关的事件,如创建或删除工作空间。如果它们没有与任何工作区相关联,则workspaceId字段设置为0。帐户级审计日志仅针对具有空工作空间过滤字段的帐户级交付配置(为帐户中的所有事件交付审计日志)交付。

审计事件注意事项

  • 如果操作花费了很长时间,则请求和响应将单独记录,但请求和响应对具有相同的记录requestId

    • 除mount相关操作外,Databricks审计日志中不包含dbfs相关操作。我们建议您在S3中设置服务器访问日志,它可以记录与IAM角色关联的对象级操作。如果您将IAM角色映射给Databricks用户,则您的Databricks用户将无法共享IAM角色。

    • 自动操作,例如由于自动伸缩而调整集群大小或由于调度而启动作业,由用户执行系统用户

请求参数

字段中的请求参数requestParams对于每个受支持的服务和操作,将在以下部分中列出,并按工作空间级事件和帐户级事件进行分组。

requestParams字段会被截断。如果其JSON表示的大小超过100 KB,值将被截断,字符串将被截断...截断附加到截断的项。在极少数情况下,截断的映射仍然大于100 KB,单个截断键的值为空。

工作空间级审计日志事件

服务

行动

请求参数

账户

添加

[" targetUserName ", " endpoint ", " targetUserId "]

addPrincipalToGroup

[" targetGroupId ", " endpoint ", " targetUserId ", " targetGroupName ", " targetUserName "]

removePrincipalFromGroup

[" targetGroupId ", " endpoint ", " targetUserId ", " targetGroupName ", " targetUserName "]

changePassword

[" newPasswordSource ", " targetUserId ", " serviceSource ", " wasPasswordChanged ", " userId "]

createGroup

[" endpoint ", " targetGroupId ", " targetGroupName "]

删除

[" targetUserId ", " targetUserName ", " endpoint "]

garbageCollectDbToken

[" tokenExpirationTime”、“标识”)

generateDbToken

(“标识”、“tokenExpirationTime”)

jwtLogin

(“用户”)

登录

(“用户”)

注销

(“用户”)

removeAdmin

[" targetUserName ", " endpoint ", " targetUserId "]

removeGroup

[" targetGroupId ", " targetGroupName ", " endpoint "]

resetPassword

[" serviceSource ", " userId ", " endpoint ", " targetUserId ", " targetUserName ", " wasPasswordChanged ", " newPasswordSource "]

revokeDbToken

["标识"]

samlLogin

(“用户”)

setAdmin

[" endpoint ", " targetUserName ", " targetUserId "]

tokenLogin

[" tokenId”、“用户”)

validateEmail

[" endpoint ", " targetUserName ", " targetUserId "]

集群

changeClusterAcl

[" shardName ", " aclPermissionSet ", " targetUserId ", " resourceId "]

创建

[" cluster_log_conf "、" num_workers "、" enable_elastic_disk "、" driver_node_type_id "、" start_cluster "、" docker_image "、" ssh_public_keys "、" aws_attributes "、" acl_path_prefix "、" node_type_id "、" instance_pool_id "、" spark_env_vars "、" init_scripts "、" spark_version "、" cluster_source "、" autotermination_minutes "、" cluster_name "、" autoscale "、" custom_tags "、" cluster_creator "、" enable_local_disk_encryption "、" idempotency_token "、" spark_conf "、" organization_id "、" no_driver_daemon "、" user_id "]

createResult

[" clusterName ", " clusterState ", " clusterId ", " clusterWorkers ", " clusterOwnerUserId "]

删除

[" cluster_id "]

deleteResult

[" clusterWorkers ", " clusterState ", " clusterId ", " clusterOwnerUserId ", " clusterName "]

编辑

[" spark_env_vars "、" no_driver_daemon "、" enable_elastic_disk "、" aws_attributes "、" driver_node_type_id "、" custom_tags "、" cluster_name "、" spark_conf "、" ssh_public_keys "、" autotermination_minutes "、" cluster_source "、" docker_image "、" enable_local_disk_encryption "、" cluster_id "、" spark_version "、" autoscale "、" cluster_log_conf "、" instance_pool_id "、" num_workers "、" init_scripts "、" node_type_id "]

permanentDelete

[" cluster_id "]

调整

[" cluster_id ", " num_workers ", " autoscale "]

resizeResult

[" clusterWorkers ", " clusterState ", " clusterId ", " clusterOwnerUserId ", " clusterName "]

重新启动

[" cluster_id "]

restartResult

[" clusterId ", " clusterState ", " clusterName ", " clusterOwnerUserId ", " clusterWorkers "]

开始

[" init_scripts_safe_mode”、“cluster_id”)

startResult

[" clusterName ", " clusterState ", " clusterWorkers ", " clusterOwnerUserId ", " clusterId "]

clusterPolicies

创建

["名称")

编辑

[" policy_id”、“名称”)

删除

[" policy_id "]

changeClusterPolicyAcl

[" shardName ", " targetUserId ", " resourceId ", " aclPermissionSet "]

dbfs

addBlock

(“处理”、“data_length”)

创建

[" path ", " bufferSize ", " overwrite "]

删除

(“递归”、“路径”)

getSessionCredentials

(“挂载点”)

mkdir

(“路径”)

(“挂载点”、“所有者”)

移动

[" dst ", " source_path ", " src ", " destination_path "]

(“路径”,“覆盖”)

卸载

(“挂载点”)

精灵

databricksAccess

[" duration ", " approver ", " reason ", " authType ", " user "]

gitCredentials

getGitCredential

[" id "]

listGitCredentials

[]

deleteGitCredential

[" id "]

updateGitCredential

[" id ", " git_provider ", " git_username "]

createGitCredential

[" git_provider”、“git_username”)

globalInitScripts

创建

[" name ", " position ", " script-SHA256 ", " enabled "]

更新

[" script_id ", " name ", " position ", " script-SHA256 ", " enabled "]

删除

[" script_id "]

addPrincipalToGroup

[" user_name”、“parent_name”)

createGroup

[" group_name "]

getGroupMembers

[" group_name "]

removeGroup

[" group_name "]

iamRole

changeIamRoleAcl

[" targetUserId ", " shardName ", " resourceId ", " aclPermissionSet "]

instancePools

changeInstancePoolAcl

[" shardName ", " resourceId ", " targetUserId ", " aclPermissionSet "]

创建

[" enable_elastic_disk ", " preloaded_spark_versions ", " idle_instance_autotermination_minutes ", " instance_pool_name ", " node_type_id ", " custom_tags ", " max_capacity ", " min_idle_instances ", " aws_attributes "]

删除

[" instance_pool_id "]

编辑

[" instance_pool_name ", " idle_instance_autotermination_minutes ", " min_idle_instances ", " preloaded_spark_versions ", " max_capacity ", " enable_elastic_disk ", " node_type_id ", " instance_pool_id ", " aws_attributes "]

工作

取消

[" run_id "]

cancelAllRuns

[" job_id "]

changeJobAcl

[" shardName ", " aclPermissionSet ", " resourceId ", " targetUserId "]

创建

[" spark_jar_task ", " email_notifications ", " notebook_task ", " spark_submit_task ", " timeout_seconds ", " libraries ", " name ", " spark_python_task ", " job_type ", " new_cluster ", " existing_cluster_id ", " max_retries ", " schedule "]

删除

[" job_id "]

deleteRun

[" run_id "]

重置

[" job_id”、“new_settings”)

resetJobAcl

(“拨款”、“job_id”)

runFailed

[" jobClusterType ", " jobTriggerType ", " jobId ", " jobTaskType ", " runId ", " jobTerminalState ", " idInJob ", " orgId "]

runNow

[" notebook_params ", " job_id ", " jar_params ", " workflow_context "]

runSucceeded

[" idInJob ", " jobId ", " jobTriggerType ", " orgId ", " runId ", " jobClusterType ", " jobTaskType ", " jobTerminalState "]

setTaskValue

[" run_id”、“关键”)

submitRun

[" shell_command_task ", " run_name ", " spark_python_task ", " existing_cluster_id ", " notebook_task ", " timeout_seconds ", " libraries ", " new_cluster ", " spark_jar_task "]

更新

[" fields_to_remove ", " job_id ", " new_settings "]

mlflowExperiment

deleteMlflowExperiment

[" experimentId ", " path ", " experimentName "]

moveMlflowExperiment

[" newPath ", " experimentId ", " oldPath "]

restoreMlflowExperiment

[" experimentId ", " path ", " experimentName "]

mlflowModelRegistry

listModelArtifacts

[" name ", " version ", " path ", " page_token "]

getModelVersionSignedDownloadUri

[" name ", " version ", " path "]

createRegisteredModel

(“名字”、“标签”)

deleteRegisteredModel

["名称")

renameRegisteredModel

(“名字”,“new_name”)

setRegisteredModelTag

[" name ", " key ", " value "]

deleteRegisteredModelTag

(“名字”,“关键”)

createModelVersion

[" name ", " source ", " run_id ", " tags ", " run_link "]

deleteModelVersion

(“名字”、“版本”)

getModelVersionDownloadUri

(“名字”、“版本”)

setModelVersionTag

[" name ", " version ", " key ", " value "]

deleteModelVersionTag

[" name ", " version ", " key "]

createTransitionRequest

[" name ", " version ", " stage "]

deleteTransitionRequest

[" name ", " version ", " stage ", " creator "]

approveTransitionRequest

[" name ", " version ", " stage ", " archive_existing_versions "]

rejectTransitionRequest

[" name ", " version ", " stage "]

transitionModelVersionStage

[" name ", " version ", " stage ", " archive_existing_versions "]

transitionModelVersionStageDatabricks

[" name ", " version ", " stage ", " archive_existing_versions "]

createComment

(“名字”、“版本”)

updateComment

[" id "]

deleteComment

[" id "]

笔记本

attachNotebook

[" path ", " clusterId ", " notebookId "]

createNotebook

[" notebookId”、“路径”)

deleteFolder

(“路径”)

deleteNotebook

[" notebookkid ", " notebookName ", " path "]

detachNotebook

[" notebookId ", " clusterId ", " path "]

downloadLargeResults

[" notebookId”、“notebookFullPath”)

downloadPreviewResults

[" notebookId”、“notebookFullPath”)

importNotebook

(“路径”)

moveNotebook

[" newPath ", " oldPath ", " notebookId "]

renameNotebook

[" newName ", " oldName ", " parentPath ", " notebookId "]

restoreFolder

(“路径”)

restoreNotebook

[" path ", " notebookkid ", " notebookName "]

runCommand(仅用于详细审计日志

[" notebookId ", " executionTime ", " status ", " commandId ", " commandText "(参见细节)]

takeNotebookSnapshot

(“路径”)

回购

createRepo

[" url ", " provider ", " path "]

updateRepo

[" id ",“分支”,“标签”,“git_url”,“git_provider”)

getRepo

[" id "]

listRepos

[" path_prefix”、“next_page_token”)

deleteRepo

[" id "]

[" id "]

commitAndPush

[" id ", " message ", " files ", " checkSensitiveToken "]

checkoutBranch

[" id ",“分支”]

丢弃

[" id ",“file_paths”]

秘密

createScope

["范围"]

deleteScope

["范围"]

deleteSecret

(“关键”、“范围”)

getSecret

(“范围”、“关键”)

listAcls

["范围"]

listSecrets

["范围"]

putSecret

[" string_value ", " scope ", " key "]

serverlessRealTimeInference

启用

[" registered_model_name”、“request_response_log_conf”)

禁用

[" registered_model_name "]

updateEndpointComputeConfig

[" registered_model_name ", " stage ", " desired_workload_config_spec "]

restartComputeConfigUpdate

[" registered_model_name”、“endpoint_version_name”)

databrickssql

addDashboardWidget

[" dashboardId”、“widgetId”)

cancelQueryExecution

[" queryExecutionId "]

changeWarehouseAcls

[" aclpermission ", " resourceId ", " shardName ", " targetUserId "]

changePermissions

[" granteeAndPermission ", " objectId ", " objectType "]

cloneDashboard

[" dashboardId "]

commandSubmit(只详细审计日志

[" orgId ", " sourceIpAddress ", " timestamp ", " userAgent ", " userIdentity ", " shardName "(见细节)]

commandFinish(仅用于详细审计日志

[" orgId ", " sourceIpAddress ", " timestamp ", " userAgent ", " userIdentity ", " shardName "(见细节)]

createAlertDestination

[" alertDestinationId”、“alertDestinationType”)

createDashboard

[" dashboardId "]

createDataPreviewDashboard

[" dashboardId "]

createWarehouse

[" auto_resume ", " auto_stop_mins ", " channel ", " cluster_size ", " conf_pairs ", " custom_cluster_confs ", " enable_databricks_compute ", " enable_photon ", " enable_serverless_compute ", " instance_profile_arn ", " max_num_clusters ", " min_num_clusters ", " name ", " size ", " spot_instance_policy ", " tags ", " test_overrides "]

createQuery

[" queryId "]

createQueryDraft

[" queryId "]

createQuerySnippet

[" querySnippetId "]

createRefreshSchedule

[" alertId ", " dashboardId ", " refreshScheduleId "]

createSampleDashboard

[" sampleDashboardId "]

createSubscription

[" dashboardId ", " refreshScheduleId ", " subscriptionId "]

createVisualization

[" queryId”、“visualizationId”)

deleteAlert

[" alertId "]

deleteAlertDestination

[" alertDestinationId "]

deleteDashboard

[" dashboardId "]

deleteDashboardWidget

[" widgetId "]

deleteWarehouse

[" id "]

deleteExternalDatasource

[" dataSourceId "]

deleteQuery

[" queryId "]

deleteQueryDraft

[" queryId "]

deleteQuerySnippet

[" querySnippetId "]

deleteRefreshSchedule

[" alertId ", " dashboardId ", " refreshScheduleId "]

deleteSubscription

[" subscriptionId "]

deleteVisualization

[" visualizationId "]

downloadQueryResult

[" fileType ", " queryId ", " queryResultId "]

editWarehouse

[" auto_stop_mins ", " channel ", " cluster_size ", " confs ", " enable_photon ", " enable_serverless_compute ", " id ", " instance_profile_arn ", " max_num_clusters ", " min_num_clusters ", " name ", " spot_instance_policy ", " tags "]

executeAdhocQuery

[" dataSourceId "]

executeSavedQuery

[" queryId "]

executeWidgetQuery

[" widgetId "]

favoriteDashboard

[" dashboardId "]

favoriteQuery

[" queryId "]

forkQuery

[" originalQueryId”、“queryId”)

listQueries

[" filter_by ", " include_metrics ", " max_results ", " page_token "]

moveDashboardToTrash

[" dashboardId "]

moveQueryToTrash

[" queryId "]

muteAlert

[" alertId "]

publishBatch

["状态")

publishDashboardSnapshot

[" dashboardId ", " hookId ", " subscriptionId "]

restoreDashboard

[" dashboardId "]

restoreQuery

[" queryId "]

setWarehouseConfig

[" data_access_config ", " enable_serverless_compute ", " instance_profile_arn ", " security_policy ", " serverless_agreement ", " sql_configuration_parameters ", " try_create_databricks_managed_starter_warehouse "]

snapshotDashboard

[" dashboardId "]

startWarehouse

[" id "]

stopWarehouse

[" id "]

subscribeAlert

[" alertId”、“destinationId”)

transferObjectOwnership

[" newOwner ", " objectId ", " objectType "]

unfavoriteDashboard

[" dashboardId "]

unfavoriteQuery

[" queryId "]

unmuteAlert

[" alertId "]

unsubscribeAlert

[" alertId”、“subscriberId”)

updateAlert

[" alertId”、“queryId”)

updateAlertDestination

[" alertDestinationId "]

updateDashboard

[" dashboardId "]

updateDashboardWidget

[" widgetId "]

updateOrganizationSetting

[" has_configured_data_access ", " has_explored_sql_warehousing ", " has_granted_permissions "]

updateQuery

[" queryId "]

updateQueryDraft

[" queryId "]

updateQuerySnippet

[" querySnippetId "]

updateRefreshSchedule

[" alertId ", " dashboardId ", " refreshScheduleId "]

updateVisualization

[" visualizationId "]

sqlPermissions

createSecurable

(“可获得的”)

grantPermission

(“许可”)

removeAllPermissions

(“可获得的”)

requestPermissions

["请求"]

revokePermission

(“许可”)

showPermissions

["可到手的”、“主要”)

ssh

登录

[" containerId ", " userName ", " port ", " publicKey ", " instanceId "]

注销

[" userName ", " containerId ", " instanceId "]

webTerminal

startSession

[" socketGUID ", " clusterId ", " serverPort ", " ProxyTargetURI "]

closeSession

[" socketGUID ", " clusterId ", " serverPort ", " ProxyTargetURI "]

工作空间

changeWorkspaceAcl

[" shardName ", " targetUserId ", " aclPermissionSet ", " resourceId "]

fileCreate

(“路径”)

fileDelete

(“路径”)

moveWorkspaceNode

[" destinationPath”、“路径”)

purgeWorkspaceNodes

[" treestoreId "]

workspaceConfEdit(工作区级别设置更改)

[" workspaceConfKeys "(例如,详细审计日志使用价值enableVerboseAuditLogs),“workspaceConfValues”(例如,对于详细审计日志这是真正的

workspaceExport

[" workspaceExportFormat”、“notebookFullPath”)

帐户级审计日志事件

服务

行动

请求参数

accountBillableUsage

getAggregatedUsage

[" account_id ", " window_size ", " start_time ", " end_time ", " meter_name ", " workspace_ids_filter "]

getDetailedUsage

[" account_id”、“start_month”、“end_month”、“with_pii”)

账户

登录

(“用户”)

gcpWorkspaceBrowserLogin

(“用户”)

oidcBrowserLogin

(“用户”)

注销

(“用户”)

accountsManager

updateAccount

[" account_id”、“账户”)

changeAccountOwner

[" account_id”、“first_name”、“last_name”,“电子邮件”)

consolidateAccounts

[" target_account_id”、“account_ids_to_consolidate”)

updateSubscription

[" account_id ", " subscription_id ", " subscription "]

listSubscriptions

[" account_id "]

createWorkspaceConfiguration

(“工作区”)

getWorkspaceConfiguration

[" account_id”、“workspace_id”)

listWorkspaceConfigurations

[" account_id "]

updateWorkspaceConfiguration

[" account_id”、“workspace_id”)

deleteWorkspaceConfiguration

[" account_id”、“workspace_id”)

acceptTos

[" workspace_id "]

发送到

[" account_id”、“workspace_id”)

createCredentialsConfiguration

(“凭证”)

getCredentialsConfiguration

[" account_id”、“credentials_id”)

listCredentialsConfigurations

[" " account_id“”)

deleteCredentialsConfiguration

[" account_id”、“credentials_id”)

createStorageConfiguration

[" " storage_configuration“”)

getStorageConfiguration

[" account_id”、“storage_configuration_id”)

listStorageConfigurations

[" account_id "]

deleteStorageConfiguration

[" account_id”、“storage_configuration_id”)

createNetworkConfiguration

(“网络”)

getNetworkConfiguration

[" account_id”、“network_id”)

listNetworkConfigurations

[" account_id "]

deleteNetworkConfiguration

[" account_id”、“network_id”)

createCustomerManagedKeyConfiguration

[" " customer_managed_key“”)

getCustomerManagedKeyConfiguration

[" account_id”、“customer_managed_key_id”)

listCustomerManagedKeyConfigurations

[" account_id "]

deleteCustomerManagedKeyConfiguration

[" account_id”、“customer_managed_key_id”)

listWorkspaceEncryptionKeyRecords

[" account_id”、“workspace_id”)

listWorkspaceEncryptionKeyRecordsForAccount

[" account_id "]

createVpcEndpoint

[" vpc_endpoint "]

getVpcEndpoint

[" account_id”、“vpc_endpoint_id”)

listVpcEndpoints

[" account_id "]

deleteVpcEndpoint

[" account_id”、“vpc_endpoint_id”)

createPrivateAccessSettings

[" private_access_settings "]

getPrivateAccessSettings

[" account_id”、“private_access_settings_id”)

listPrivateAccessSettingss

[" account_id "]

deletePrivateAccessSettings

[" account_id”、“private_access_settings_id”)

logDelivery

createLogDeliveryConfiguration

[" account_id”、“config_id”)

updateLogDeliveryConfiguration

[" config_id ", " account_id ", " status "]

getLogDeliveryConfiguration

[" log_delivery_configuration "]

listLogDeliveryConfigurations

[" account_id ", " storage_configuration_id ", " credentials_id ", " status "]

ssoConfigBackend

创建

[" account_id ", " sso_type ", " config "]

更新

[" account_id ", " sso_type ", " config "]

得到

[" account_id”、“sso_type”)

审计日志分析

通过“Databricks”分析审计日志。下面以日志报告Databricks访问和Apache Spark版本为例。

将审计日志加载为DataFrame,并将DataFrame注册为临时表。看到在Amazon S3中处理数据有关详细指南。

瓦尔df火花格式“json”).负载“s3a: / / bucketName /道路/ / auditLogs”dfcreateOrReplaceTempView“audit_logs”

列出访问Databricks的用户及其访问位置。

sql选择截然不同的userIdentity电子邮件sourceIPAddressaudit_logs在哪里“账户”actionName就像登录“% %”

检查使用的Apache Spark版本。

sql选择requestParamsspark_versionaudit_logs在哪里“集群”actionName“创造”集团通过requestParamsspark_version

检查表数据访问。

sql选择audit_logs在哪里“sqlPermissions”actionName“requestPermissions”