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

Synapse中如何从KeyVault获取证书实现Kusto证书认证?

在Synapse中通过KeyVault链接服务获取证书用于Kusto认证

可以通过KeyVault链接服务获取存储在KeyVault中的证书,用于KustoConnectionStringBuilder的应用证书认证,以下是具体实现方案:

前提准备

  • 已在Synapse工作区配置KeyVault链接服务,且该链接服务对应的托管标识在KeyVault访问策略中拥有证书获取和机密获取权限(证书的私钥会以同名机密存储在KeyVault中,需读取该机密)。
  • KeyVault中已存入包含私钥的证书(上传时需选择允许导出私钥)。

实现步骤(Python,Synapse Spark)

1. 安装依赖库

在Synapse Spark notebook中先安装所需依赖:

%pip install pyopenssl azure-keyvault-certificates azure-keyvault-secrets azure-synapse-artifacts azure-identity

2. 读取并转换证书为PEM格式

from azure.synapse.artifacts import ArtifactsClient
from azure.identity import ManagedIdentityCredential
from azure.keyvault.certificates import CertificateClient
from azure.keyvault.secrets import SecretClient
import base64
import OpenSSL
from azure.kusto.data import KustoConnectionStringBuilder

# 配置参数
SYNAPSE_ENDPOINT = "https://<你的Synapse工作区>.dev.azuresynapse.net"
LINKED_SERVICE_NAME = "<你的KeyVault链接服务名称>"
CERT_NAME = "<KeyVault中的证书名称>"
KUSTO_CLUSTER = "<你的Kusto集群URL>"
AAD_CLIENT_ID = "<你的AAD应用客户端ID>"
TENANT_ID = "<你的租户ID>"

# 初始化Synapse Artifacts客户端(使用托管标识认证)
credential = ManagedIdentityCredential()
artifacts_client = ArtifactsClient(
    endpoint=SYNAPSE_ENDPOINT,
    credential=credential
)

# 获取KeyVault链接服务的基础URL
linked_service = artifacts_client.linked_service.get_linked_service(LINKED_SERVICE_NAME)
keyvault_url = linked_service.properties.type_properties.base_url

# 从KeyVault获取证书元数据(用于获取指纹)
cert_client = CertificateClient(vault_url=keyvault_url, credential=credential)
cert = cert_client.get_certificate(CERT_NAME)
thumbprint = cert.properties.x509_thumbprint.hex()

# 从KeyVault获取证书私钥(以机密形式存储)
secret_client = SecretClient(vault_url=keyvault_url, credential=credential)
cert_secret = secret_client.get_secret(CERT_NAME)
pfx_data = base64.b64decode(cert_secret.value)

# 将PFX格式转换为PEM格式(包含私钥和证书)
p12 = OpenSSL.crypto.load_pkcs12(pfx_data)
pem_private = OpenSSL.crypto.dump_privatekey(OpenSSL.crypto.FILETYPE_PEM, p12.get_privatekey()).decode()
pem_cert = OpenSSL.crypto.dump_certificate(OpenSSL.crypto.FILETYPE_PEM, p12.get_certificate()).decode()
full_pem = pem_private + pem_cert

# 构建Kusto连接字符串
kcsb = KustoConnectionStringBuilder.with_aad_application_certificate_authentication(
    KUSTO_CLUSTER, AAD_CLIENT_ID, full_pem, thumbprint, TENANT_ID
)

关键注意事项

  • 确保Synapse托管标识(或链接服务使用的托管标识)在KeyVault访问策略中配置正确权限,否则会出现权限不足错误。
  • 如果证书上传到KeyVault时未选择允许导出私钥,将无法获取到私钥,需重新上传证书并勾选导出选项。
  • 所有敏感配置参数建议通过Synapse的工作区配置或KeyVault引用传入,避免硬编码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 01:52:06