在Databricks中通过Key Vault读取Azure Blob存储(替代SAS令牌)
用Azure Key Vault存储账户密钥替代SAS令牌,实现Databricks每日任务稳定读取数据
可行方案
- 把存储账户密钥存入Azure Key Vault,给Databricks配置好访问该密钥的权限
- 在Databricks中创建对应Key Vault的机密范围,通过这个范围安全拉取密钥,杜绝硬编码
- 用存储账户密钥配置Spark的Blob存储访问参数,替换原有的SAS令牌配置
代码示例
前提:已在Databricks中创建指向目标Key Vault的机密范围(示例命名为my-keyvault-scope),且存储账户密钥已存入Key Vault(机密名称示例为storage-account-key)。
替换原SAS令牌配置的代码如下:
# 从Key Vault机密范围读取存储账户密钥 storage_account_key = dbutils.secrets.get(scope="my-keyvault-scope", key="storage-account-key") storage_account_name = "storageaccount" container_name = "mycontainer" # 配置Spark使用存储账户密钥访问Blob存储 spark.conf.set( f"fs.azure.account.key.{storage_account_name}.blob.core.windows.net", storage_account_key ) # 验证存储容器访问权限 dbutils.fs.ls(f"wasbs://{container_name}@{storage_account_name}.blob.core.windows.net/") # 流式读取数据并写入指定表 file_path = f"wasbs://{container_name}@{storage_account_name}.blob.core.windows.net/topics/logs" (spark.readStream .format("cloudFiles") .option("cloudFiles.format", "json") .schema(schema) .load(file_path) .writeStream .option("checkpointLocation", checkpoint_path) .trigger(availableNow=True) .toTable(table_name))
关键注意事项
- 确保Databricks集群使用的服务主体(或托管身份)拥有Key Vault的
机密用户权限,能够读取目标密钥 - 通过机密范围获取密钥时,密钥明文不会在Notebook或运行日志中泄露,安全性更高
- 存储账户密钥的权限范围比容器级SAS令牌更广,需严格控制密钥的访问权限,避免权限过度扩散
内容的提问来源于stack exchange,提问作者ZZZSharePoint
相关产品推荐
相关产品推荐

