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

如何不使用连接字符串/主键,通过托管标识连接Azure Cosmos DB?

可行:用系统托管标识连接Azure Cosmos DB(无需连接字符串/主键)

完全可以实现类似Azure Blob Storage的连接方式——仅通过URI、依赖注入结合系统分配的托管标识完成连接,不需要依赖连接字符串、主键,也不用从Key Vault读取连接字符串。

实现步骤

1. 给Cosmos DB账户配置托管标识权限

  • 登录Azure门户,进入你的Cosmos DB账户
  • 切换到「访问控制(IAM)」页面,点击「添加角色分配」
  • 角色选择Cosmos DB Built-in Data Contributor(如果仅需只读权限,选「Cosmos DB Built-in Data Reader」即可)
  • 成员类型选择「托管标识」,然后选择你已配置的系统分配托管标识(对应你的应用服务、虚拟机等资源),完成角色分配

2. 依赖注入配置(以.NET为例)

  • 先安装必要的NuGet包:
    Install-Package Microsoft.Azure.Cosmos
    Install-Package Microsoft.Azure.Cosmos.Extensions.AspNetCore
    
  • 在Program.cs中配置Cosmos客户端注入:
    builder.Services.AddCosmosClient(
        accountEndpoint: "https://你的cosmos账户名.documents.azure.com:443/",
        tokenCredential: new DefaultAzureCredential()
    );
    
    DefaultAzureCredential会自动识别并使用系统分配的托管标识获取认证令牌,无需手动处理密钥。

3. 在业务代码中使用Cosmos客户端

直接注入CosmosClient后,即可操作指定的数据库和容器:

public class ProductService
{
    private readonly Container _productContainer;

    public ProductService(CosmosClient cosmosClient)
    {
        // 指定数据库和容器名称
        _productContainer = cosmosClient.GetContainer("ProductDB", "Products");
    }

    // 示例:读取文档
    public async Task<Product> GetProductAsync(string productId)
    {
        return await _productContainer.ReadItemAsync<Product>(
            productId, 
            new PartitionKey(productId) // 根据你的分区键策略调整
        );
    }
}

补充说明

  • 这种方式完全基于Azure AD身份认证,和Blob Storage的托管标识授权逻辑一致,安全性更高,避免了密钥泄露风险
  • 不需要将连接字符串存入Key Vault,除非你有混合使用密钥认证的场景,否则托管标识是更优方案

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 19:06:20