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

Azure基于托管标识的访问控制配置及相关问题咨询

Azure托管标识配置相关问题解答

已完成操作及前置疑问

  • 创建托管标识,其访问控制(IAM)角色分配包含拥有参与者/所有者角色的用户,需确认:托管标识是否是指向用户/角色集合的间接指针,权限由配置位置赋予?
  • 在应用服务「标识 | 用户分配」中添加该托管标识(用于访问数据库和密钥保管库),询问是否无需系统分配标识?
  • 在SQL服务器「标识」中添加该托管标识并设为主要标识,询问是否同样无需系统分配标识?

问题1:应用服务和SQL数据库已分配同一托管标识,是否需要遵循官方文档的所有步骤?是否有简单连接字符串直接使用共享托管标识?

  • 核心步骤不能省略:必须为托管标识在SQL服务器IAM中分配对应的数据访问角色(比如SQL DB Contributor),同时在数据库内创建该托管标识的登录名和用户,并赋予所需的数据库权限,这是身份认证和授权的基础。
  • 连接字符串无需包含凭据,直接使用以下格式即可:
    Server=tcp:{server-name}.database.windows.net,1433;Database={db-name};Authentication=Active Directory Managed Identity;
    
    应用会通过DefaultAzureCredential自动使用已绑定的用户分配托管标识完成认证。

问题2:密钥保管库无「标识」菜单,如何通过访问控制(IAM)授权带该托管标识的应用服务读取密钥保管库?

按以下步骤操作:

  1. 进入目标密钥保管库的**访问控制(IAM)**页面;
  2. 点击「添加角色分配」,在角色列表中选择密钥保管库机密用户(仅需读取机密权限时),或根据需求选择更合适的角色;
  3. 在「分配访问权限至」选项中选择「托管标识」,点击「选择成员」;
  4. 在弹出的列表中找到你创建的用户分配托管标识,选中后完成角色分配即可。

问题3:在Blazor服务器应用的Program.cs中添加以下代码是否正确?

原代码:

public static IHostBuilder CreateHostBuilder(string[] args) =>
    Host.CreateDefaultBuilder(args)
        .ConfigureAppConfiguration((context, config) =>
        {
            if (context.HostingEnvironment.IsProduction())
            {
                var builtConfig = config.Build();
                var secretClient = new SecretClient(
                    new Uri($"https://{builtConfig["KeyVaultName"]}.vault.azure.net/"),
                    new DefaultAzureCredential());
                config.AddAzureKeyVault(secretClient, new KeyVaultSecretManager());
            }
        })
        .ConfigureWebHostDefaults(webBuilder => webBuilder.UseStartup<Startup>());
  • 核心逻辑是正确的,能实现生产环境从密钥保管库加载配置的需求。
  • 可优化点:不需要手动实例化SecretClient,AddAzureKeyVault支持直接传入URI和DefaultAzureCredential,简化后代码如下:
    public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .ConfigureAppConfiguration((context, config) =>
            {
                if (context.HostingEnvironment.IsProduction())
                {
                    var builtConfig = config.Build();
                    config.AddAzureKeyVault(
                        new Uri($"https://{builtConfig["KeyVaultName"]}.vault.azure.net/"),
                        new DefaultAzureCredential());
                }
            })
            .ConfigureWebHostDefaults(webBuilder => webBuilder.UseStartup<Startup>());
    
  • 额外建议:生产环境中添加异常处理逻辑,避免因密钥保管库不可用导致应用启动失败。

问题4:仅添加上述代码后,密钥保管库中的配置是否会覆盖应用服务配置及appsettings.json中的内容?

是的,配置加载优先级为:appsettings.json < 应用服务配置 < 密钥保管库配置。添加AddAzureKeyVault后,密钥保管库中的同名机密会自动覆盖之前加载的配置项。如果需要调整优先级,可以通过调整ConfigurationBuilder中配置源的加载顺序来实现。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 06:53:13