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

如何在Google Dataproc集群上用Python从Azure应用保管库获取DB密码?

在Google Dataproc上从Azure Key Vault获取MySQL密码的Python实现

前置准备

  • Azure Key Vault已创建,目标MySQL密码已存入,DATAREF为该密码对应的密钥ID
  • 配置Azure服务主体,赋予其Key Vault的机密读取权限(Secrets/Get)
  • Google Dataproc集群已完成网络配置,可正常访问Azure Key Vault(公网Vault无需额外配置,私有Vault需打通VNet或设置防火墙白名单)

安装依赖包

在Dataproc集群节点上安装Azure密钥管理相关的Python库:

pip install azure-keyvault-secrets azure-identity

Python代码实现

from azure.identity import ClientSecretCredential
from azure.keyvault.secrets import SecretClient
from pyspark.sql import SparkSession

# 从环境变量读取Azure身份信息(避免硬编码,推荐在Dataproc集群配置全局环境变量)
tenant_id = "<Azure租户ID>"
client_id = "<Azure服务主体ID>"
client_secret = "<Azure服务主体密钥>"
key_vault_url = "https://<你的Key Vault名称>.vault.azure.net/"
secret_name = "DATAREF"  # 对应你的密码标识ID

# 构建Azure身份凭证与密钥客户端
credential = ClientSecretCredential(tenant_id=tenant_id, client_id=client_id, client_secret=client_secret)
secret_client = SecretClient(vault_url=key_vault_url, credential=credential)

# 从Key Vault获取MySQL密码
mysql_password = secret_client.get_secret(secret_name).value

# 初始化Spark会话
spark = SparkSession.builder.appName("MySQLToSparkDF").getOrCreate()

# 读取MySQL表生成Spark DataFrame
df = spark.read.format("jdbc") \
    .option("url", "jdbc:mysql://<MySQL服务器地址>:<端口>/<目标数据库名>") \
    .option("dbtable", "<目标表名>") \
    .option("user", "<MySQL用户名>") \
    .option("password", mysql_password) \
    .option("driver", "com.mysql.cj.jdbc.Driver") \
    .load()

# 验证数据加载结果
df.show()

关键注意事项

  • 安全存储身份信息:绝对不要在代码中硬编码Azure服务主体的密钥,建议通过Dataproc集群的自定义环境变量、Google Cloud Secret Manager托管这些敏感信息
  • 权限控制:确保Azure服务主体仅拥有Key Vault的最小必要权限(仅机密读取),避免过度授权
  • JDBC驱动配置:若Dataproc集群未预装MySQL JDBC驱动,需通过初始化动作提前安装,或在代码中指定驱动Jar包路径

内容的提问来源于stack exchange,提问作者Big data Pyspark

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 08:25:17