如何在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
相关产品推荐
相关产品推荐

