![](/img/trans.png)
[英]Azure App Service with User-Assigned Managed Identity crashes application
[英]How to use user-assigned managed identity to access Key Vault for Function App Config in Azure
我在 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 客戶端的示例和基礎設施在這里為我創建客戶端。
這將如何改變以使用用戶分配的身份?
要使用戶分配的身份生效,您只需更改
new DefaultAzureCredential()
到
new ManagedIdentityCredential(<Client ID>)
當您在 Azure 門戶中查看客戶端 ID 時,它會顯示在用戶分配的標識上。
如果有一種方法可以通過配置將 DefaultAzureCredential 重定向到用戶分配的標識,那就太好了,因為這樣你必須在代碼中放置一些東西,這些東西將根據 if 在默認憑據和托管標識之間切換調試器已附加或配置項,因此您可以在不使用該身份的情況下進行本地調試,因為從 VS 調試時使用默認憑據仍然是正確的。
我確實嘗試將此添加到 Azure 中的配置中,但它不起作用(默認憑據無法使用用戶分配的標識)。
AzureServicesAuthConnectionString: RunAs=App;AppId=<client id>
若要將
DefaultAzureCredential<\/code>與用戶分配的托管標識一起使用,請將
AZURE_CLIENT_ID<\/code>環境變量設置為標識的客戶端 ID。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.