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

如何配置Azure Cosmos DB Spark OLTP Connector使用托管标识认证?

问题

计划将DataLake中的数据摄入至Azure Cosmos DB,经评估Spark OLTP Connector是易用性最高的接入方案。受公司安全策略约束,服务接入禁止使用主密钥,所有应用常规采用托管标识完成认证。已知Cosmos DB Java客户端构建器提供TokenCredential配置选项,示例代码如下:

CosmosAsyncClient client = CosmosClientBuilder
 .credential(new DefaultAzureCredentialBuilder().build())
 .buildAsyncClient();

咨询是否有可行方法配置该连接器,使其通过托管标识采用相同认证机制完成接入。

回答

完全支持,Azure Cosmos DB Spark OLTP Connector 从4.10.0版本开始原生兼容Azure Identity体系的TokenCredential认证链路,可以直接对接托管标识,不需要使用主密钥,和示例中Java SDK的认证逻辑完全对齐。

核心基础配置

所有认证场景都需要先配置以下基础参数,不要配置spark.cosmos.accountKey参数:

  • spark.cosmos.accountEndpoint:填写目标Cosmos DB账号终结点,格式为https://<你的Cosmos账号名>.documents.azure.com:443/
  • spark.cosmos.auth.type:固定设置为Custom

场景1:作业运行在Azure托管环境

如果Spark作业运行在已开启托管标识的Azure服务上(包括AKS、Synapse Spark、Azure Databricks、Azure VM/VMSS等),不需要额外开发,直接使用连接器内置的默认凭据提供方即可,追加配置:

  • spark.cosmos.auth.aadTokenProvider:固定值为com.azure.cosmos.spark.DefaultAzureCredentialTokenProvider
    该内置实现的认证逻辑和示例代码中new DefaultAzureCredentialBuilder().build()的逻辑完全一致,会自动遍历认证链,识别当前环境绑定的系统分配托管标识完成认证。
    如果需要使用用户分配托管标识,额外追加一项配置即可:
  • spark.cosmos.auth.aadTokenProvider.clientId:填写待使用的用户分配托管标识的客户端ID。

场景2:需要自定义凭据逻辑

如果内置的默认凭据链不满足需求(比如需要定制认证源排除规则、指定特殊的认证参数),可以自定义凭据提供方:

  1. 编写类实现com.azure.cosmos.spark.AadTokenProvider接口,在实现逻辑中构造需要的TokenCredential实例返回即可,写法和原生Java SDK构造客户端的逻辑无差异
  2. 将实现类打包为JAR包,作为Spark作业依赖提交
  3. 将spark.cosmos.auth.aadTokenProvider配置项的值改为自定义实现类的全限定名

注意事项:使用托管标识接入前,必须提前在Cosmos DB账号的访问控制(IAM)面板给对应托管标识分配对应的数据操作角色,例如内置的Cosmos DB Built-in Data Contributor角色,否则认证成功后也会因权限不足无法读写数据。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 14:33:27