使用 Spark 配置属性或环境变量中的机密

本文详细介绍了如何在 Spark 配置属性或环境变量中引用机密。 检索到的机密是从笔记本的输出以及 Spark 驱动程序和执行器的日志中修订的。

重要

此功能目前以公共预览版提供。

安全注意事项

如果不能对群集上的所有用户使用机密,Databricks 不建议将机密存储在群集环境变量中。 引用 Spark 配置属性或环境变量中的机密时,请牢记以下安全隐患:

  • 任何对群集具有 CAN ATTACH TO 权限或对笔记本运行权限的用户都可以从笔记本中读取群集环境变量。

  • 如果未在群集上启用表访问控制,则任何对群集具有 CAN ATTACH TO 权限或对笔记本运行权限的用户都可以从笔记本中读取 Spark 配置属性。 这包括没有读取机密的直接权限的用户。

  • 不会从 Spark 驱动程序日志 stdoutstderr 流中修订机密。 为了保护敏感数据,默认情况下,只有由对作业、单用户访问模式和共享访问模式群集具有“CAN MANAGE”权限的用户才能查看 Spark 驱动程序日志。

    在“无隔离共享”访问模式群集上,具有“CAN ATTACH TO”或“CAN MANAGE”权限的用户可以查看 Spark 驱动程序日志。 若要限制只有具有“CAN MANAGE”权限的用户才能读取日志,请将 spark.databricks.acl.needAdminPermissionToViewLogs 设置为 true

要求

以下要求适用于在 Spark 配置属性和环境变量中引用机密:

  • 群集所有者需要具有机密范围内的“可读取”权限。
  • 必须是群集所有者才能在 Spark 配置属性或环境变量中添加或编辑机密。
  • 如果更新了机密,则必须重启群集才能再次提取机密。
  • 必须具有群集的 CAN MANAGE 权限才能删除机密 Spark 配置属性或环境变量。

使用 Spark 配置属性引用机密

按以下格式指定 Spark 配置属性中对机密的引用:

spark.<property-name> {{secrets/<scope-name>/<secret-name>}}

将:

  • <scope-name> 包含机密范围的名称。
  • <secret-name> 具有作用域中机密的唯一名称。
  • <property-name> 使用 Spark 配置属性

每个 Spark 配置属性只能引用一个机密,但可以配置多个 Spark 属性来引用机密。

例如:

spark.password {{secrets/scope1/key1}}

若要获取笔记本中的机密并使用它,请运行以下内容:

Python

spark.conf.get("spark.password")

SQL

SELECT ${spark.password};

引用环境变量中的机密

按以下格式指定环境变量中的机密路径:

<variable-name>={{secrets/<scope-name>/<secret-name>}}

引用机密时,可以使用任何有效的变量名称。 对环境变量中引用的机密的访问权限由配置群集的用户的权限确定。 尽管存储在环境变量中的机密可供所有群集用户访问,但它们通过纯文本显示进行修订,类似于其他机密引用。

可以从群集范围的初始化脚本访问引用机密的环境变量。 请参阅通过初始化脚本设置和使用环境变量

例如:

设置环境变量以引用机密:

SPARKPASSWORD={{secrets/scope1/key1}}

若要提取 init 脚本中的机密,请使用以下模式访问 $SPARKPASSWORD

if [ -n "$SPARKPASSWORD" ]; then
  # code to use ${SPARKPASSWORD}
fi