使用 Spark 配置属性或环境变量中的机密
本文提供了有关如何在 Spark 配置属性或环境变量中引用机密的详细信息。 检索到的机密是从笔记本的输出以及 Spark 驱动程序和执行器的日志中修订的。
重要
此功能目前以公共预览版提供。
安全注意事项
如果不能对群集上的所有用户使用机密,Databricks 不建议将机密存储在群集环境变量中。 引用 Spark 配置属性或环境变量中的机密时,请牢记以下安全隐患:
对群集具有“可附加到”权限或对笔记本具有“运行”权限的任何用户可以从笔记本内读取群集环境变量。
如果在群集上未启用表访问控制,对群集具有“可附加到”权限或对笔记本具有“运行”权限的任何用户可以从笔记本内读取 Spark 配置属性。 这包括没有读取机密的直接权限的用户。
不会从 Spark 驱动程序日志
stdout
和stderr
流编修机密。 为了保护敏感数据,默认情况下,只有由对作业、单用户访问模式和共享访问模式群集具有“CAN MANAGE”权限的用户才能查看 Spark 驱动程序日志。在“无隔离共享”访问模式群集上,具有“CAN ATTACH TO”或“CAN MANAGE”权限的用户可以查看 Spark 驱动程序日志。 若要限制只有具有“CAN MANAGE”权限的用户才能读取日志,请将
spark.databricks.acl.needAdminPermissionToViewLogs
设置为true
。
要求
下面的要求适用于在 Spark 配置属性和环境变量中引用机密:
- 群集所有者需要具有机密范围内的“可读取”权限。
- 必须是群集所有者,才能在 Spark 配置属性或环境变量中添加或编辑机密。
- 如果某机密已更新,则必须重启群集才能再次提取该机密。
- 必须对群集具有“可管理”权限才能删除机密 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