我最近在 Azure 中部署了一个 .NET 8 应用程序,但在导航到 Azure 提供的默认 URL 时得到了
HTTP Error 500.30 - ASP.NET Core app failed to start
。我有几个应用程序正在使用的 Azure 服务。 Blob 存储、Key Vault (KV) 和 SQL 数据库。
经过一番调查,我得出的结论是,这与网络问题有关,但是,我已将网络设置为公共,因为该网站可以被任何人访问。只是不是 DB 和 KV。我不相信数据库会导致 500 错误,但我现在相信 KV 可能是罪魁祸首。
我的问题分为两部分。 KV 是我的应用程序未运行的原因吗?如果是这样,如何解决?我发现我可能需要提供某种访问策略,可能吗?如有任何帮助,我们将不胜感激。
这是我尝试访问
Program.cs
文件中的 KV 的方法。
var builder = WebApplication.CreateBuilder(args);
string keyVaultUri = builder.Configuration["KeyVaultConfig:KVUrl"];
var credentials = new DefaultAzureCredential();
var client = new SecretClient(new Uri(keyVaultUri), credentials);
string tenantId = "TenantId";
string blobStorageName = "BlobStorageName";
string blobConnString = "BlobConnectionString";
string azureConnectionString = "AzureSQLConnectionString";
KeyVaultSecret blobName = await client.GetSecretAsync(blobStorageName);
KeyVaultSecret blobConnectionString = await client.GetSecretAsync(blobConnString);
KeyVaultSecret azConnString = await client.GetSecretAsync(azureConnectionString);
string dbValue = azConnString.Value;
builder.Configuration["BlobConfig:BlobStorageName"] = blobName.Value;
builder.Configuration["BlobConfig:BloblConnectionString"] = blobConnectionString.Value;
builder.Services.AddDbContext<SuperAnchorDBContext>(options => options.UseSqlServer(dbValue));
var credentials = new DefaultAzureCredential();
将使用应用程序服务的身份连接到 keyvault。如果应用服务上没有配置 rbac,此行将失败并导致应用服务的启动崩溃。
请按照 Rui 的链接配置访问权限:https://learn.microsoft.com/en-us/azure/app-service/app-service-key-vault-references?tabs=azure-cli#grant-your -应用程序访问密钥保管库
该应用程序可能会在本地运行,因为 DefaultAzureCredential 在本地运行时可能会使用您的帐户。
如果您想进行测试以确保 KV 是问题所在,您可以将
client.GetSecretAsync
位替换为实际字符串值,以查看应用程序是否启动或不是 100%。
KeyVaultSecret blobName = await client.GetSecretAsync(blobStorageName);
KeyVaultSecret blobConnectionString = await client.GetSecretAsync(blobConnString);
KeyVaultSecret azConnString = await client.GetSecretAsync(azureConnectionString);