1

我在 Azure 中为我的一个函数应用设置了 KeyVault 配置。使用这样的 Startup 类非常简单:

using Azure.Identity;
using Microsoft.Azure.Functions.Extensions.DependencyInjection;
using Microsoft.Extensions.Configuration;
using System.IO;
using Core.Utility;

[assembly: FunctionsStartup(typeof(MyJob.Startup))]
namespace MyJob
{
class Startup : FunctionsStartup
{
    private IConfiguration _configuration;

    public override void Configure(IFunctionsHostBuilder builder)
    {
        // Configure your services here.
    }

    public override void ConfigureAppConfiguration(IFunctionsConfigurationBuilder builder)
    {
        var context = builder.GetContext();
        var configurationBuilder = builder.ConfigurationBuilder;
        configurationBuilder.AddJsonFile(Path.Combine(context.ApplicationRootPath, "appsettings.json"), true, false)
            .AddEnvironmentVariables();

        // Add the Key Vault:
        var configuration = configurationBuilder.Build();
        configurationBuilder.AddAzureKeyVault(KeyVaultSecrets.MakeKvUri(configuration["KeyVaultName"]),
            new DefaultAzureCredential());
        _configuration = configurationBuilder.Build();
    }
}
}

我现在想使用用户分配的托管标识而不是系统分配的标识,这样我就不必为每个新应用程序或我创建的部署槽授予对 KV 的访问权限。

我已阅读此文档:https ://docs.microsoft.com/en-us/azure/app-service/overview-managed-identity?tabs=dotnet ,但这显示了在您自己的代码中创建的 KV 客户端的示例和基础设施在这里为我创建客户端。

这将如何改变以使用用户分配的身份?

4

2 回答 2

0

要使用户分配的身份生效,您只需更改

new DefaultAzureCredential()

new ManagedIdentityCredential(<Client ID>)

当您在 Azure 门户中查看客户端 ID 时,它会显示在用户分配的标识上。

如果有一种方法可以通过配置将 DefaultAzureCredential 重定向到用户分配的标识,那就太好了,因为这样你必须在代码中放置一些东西,这些东西将根据 if 在默认凭据和托管标识之间切换调试器已附加或配置项,因此您可以在不使用该身份的情况下进行本地调试,因为从 VS 调试时使用默认凭据仍然是正确的。

我确实尝试将此添加到 Azure 中的配置中,但它不起作用(默认凭据无法使用用户分配的标识)。

AzureServicesAuthConnectionString: RunAs=App;AppId=<client id>
于 2021-09-28T16:30:37.343 回答
0

DefaultAzureCredential与用户分配的托管身份一起使用,请将AZURE_CLIENT_ID环境变量设置为身份的客户端 ID。

通过此GitHub 问题找到

于 2022-01-28T14:20:59.813 回答