You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Databricks中如何安全授权用户执行含Secret的函数且不暴露Secret

解决方案与最佳实践

1. 使用所有者权限模式的函数(SECURITY DEFINER)

这是Databricks中解决这类问题的核心方案:创建函数时指定以函数所有者的权限执行,而非调用者权限,这样函数访问Secret时用的是创建者的权限,调用者无需拥有Secret访问权。

操作步骤

  • 创建函数时添加SECURITY DEFINER关键字(默认是SECURITY INVOKER,会使用调用者权限)
  • 示例代码(Python UDF):
CREATE OR REPLACE FUNCTION anonymize_pii(pii_col STRING)
RETURNS STRING
SECURITY DEFINER
AS $$
from pyspark.sql.functions import sha2
# 以函数所有者权限读取Secret
secret_key = dbutils.secrets.get(scope="pii_secret_scope", key="anonymization_key")
# PII匿名化逻辑(示例:加盐哈希)
return sha2(pii_col + secret_key, 256)
$$ LANGUAGE PYTHON;
  • 权限配置:仅需给目标用户授予该函数的USAGE权限,无需分配任何Secret范围的访问权限。
  • 安全提示:严格控制SECURITY DEFINER函数的逻辑范围,避免包含危险操作;同时给函数所有者分配最小化的Secret权限(仅必要的READ权限即可),降低权限滥用风险。

2. 用Databricks作业做代理执行(批量场景)

如果是批量处理PII数据的场景,可以把匿名化逻辑封装为Databricks作业,让用户触发作业而非直接调用函数:

  • 用拥有Secret访问权限的服务主体创建作业,作业内部执行匿名化逻辑
  • 给用户授予作业的RUN权限,允许他们触发作业、查看执行结果,但无法接触到Secret
  • 作业接收输入数据路径,处理后输出到用户可访问的路径,全程隔离Secret访问

3. 封装为受控API服务(实时场景)

如果需要实时调用匿名化能力,可以把逻辑封装为Databricks托管的API服务:

  • 用拥有Secret权限的服务主体部署API(比如通过MLflow模型服务或自定义REST API)
  • 给用户分配API调用的身份凭证(如Databricks个人访问令牌),让他们通过API提交PII数据、获取处理结果
  • API内部完成Secret读取和匿名化操作,用户全程无法接触Secret

关键安全原则

  • 最小权限:给函数所有者、服务主体分配的Secret权限仅保留必要的READ权限,避免过度授权
  • 审计监控:开启Databricks审计日志,监控函数、作业、API的调用记录,及时发现异常访问
  • 禁止硬编码:所有Secret必须通过dbutils.secrets.get读取,绝对不能硬编码在代码中

内容的提问来源于stack exchange,提问作者NRLV

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 09:39:58