【发布时间】:2021-07-18 02:15:31
【问题描述】:
我有一个场景,尝试在 Visual Studio 中调试 ASP.NET Core Web 应用程序时遇到以下异常,该应用程序已连接 Azure Key Vault 服务和连接到应用服务的 Azure 应用程序配置资源。我登录到 Visual Studio 的用户似乎对 KV 具有正确的权限,并且与另一个没有收到我的错误的开发人员相同。在使用同一用户登录 Azure 时,我还可以在 AKV 的“机密”页面中成功查看和检查所有机密的值。
错误:
C:\Professional\Projects\Inventive\inventivegroup\mgr360>dotnet 观察运行 观看:开始 未处理的异常。 Azure.RequestFailedException:服务请求失败。 状态:403(禁止)
内容: {"error":{"code":"Forbidden","message":"调用者无权对资源执行操作。\r\n如果最近更改了角色分配、拒绝分配或角色定义,请注意传播时间。 \r\n调用者:appid=c41ed4ac-ID-SNIP;oid=3108ce41-ID-SNIP;iss=https://sts.windows.net/359ccce3-ID-SNIP/\r\n操作:'Microsoft.KeyVault/vaults /secrets/readMetadata/action'\r\nResource: '/subscriptions/666a80a4-ID-SNIP/resourcegroups/RESOURCEGROUPNAME/providers/microsoft.keyvault/vaults/webappvaultname'\r\n分配:(未找到)\r\nVault: NameOfWebAppvault;location=eastus\r\n","innererror":{"code":"ForbiddenByRbac"}}}
标题: 缓存控制:无缓存 Pragma:无缓存 x-ms-keyvault-region: 东 x-ms-client-request-id: bd5ef0e5-ID-SNIP x-ms-request-id: 8053b6d8-ID-SNIP x-ms-keyvault-service-version: 1.2.236.0 x-ms-keyvault-network-info: conn_type=Ipv4;addr=50.IP.SNIP;act_addr_fam=InterNetwork; x-ms-keyvault-rbac-cache: ra_age=0;da_age=7453;rd_age=7453;brd_age=11547;ra_notif_age=99;dec_lev=3; X-Powered-By: ASP.NET 严格的传输安全性:max-age=31536000;includeSubDomains X-Content-Type-Options: nosniff 日期:格林威治标准时间 2021 年 4 月 23 日星期五 18:21:57 内容长度:701 内容类型:应用程序/json;字符集=utf-8 过期:-1
在 Azure.Security.KeyVault.KeyVaultPipeline.SendRequestAsync(请求请求,CancellationToken cancelToken) 在 Azure.Security.KeyVault.KeyVaultPipeline.GetPageAsync[T](Uri firstPageUri, String nextLink, Func
1 itemFactory, String operationName, CancellationToken cancellationToken) at Azure.Core.PageResponseEnumerator.FuncAsyncPageable1.AsPages(String continuationToken, Nullable1 pageSizeHint)+MoveNext() at Azure.Core.PageResponseEnumerator.FuncAsyncPageable1.AsPages(String continuationToken, Nullable1 pageSizeHint)+System.Threading.Tasks.Sources.IValueTaskSource<System.Boolean>.GetResult() at Azure.AsyncPageable1.GetAsyncEnumerator( CancellationToken cancelToken)+MoveNext() 在 Azure.AsyncPageable1.GetAsyncEnumerator(CancellationToken cancellationToken)+MoveNext() at Azure.AsyncPageable1.GetAsyncEnumerator(CancellationToken cancelToken)+System.Threading.Tasks.Sources.IValueTaskSource.GetResult() 在 Azure.Extensions.AspNetCore.Configuration.Secrets.AzureKeyVaultConfigurationProvider.LoadAsync() 在 Azure.Extensions.AspNetCore.Configuration.Secrets.AzureKeyVaultConfigurationProvider.LoadAsync() 在 Azure.Extensions.AspNetCore.Configuration.Secrets.AzureKeyVaultConfigurationProvider.Load() 在 Microsoft.Extensions.Configuration.ConfigurationRoot..ctor(IList`1 提供者) 在 Microsoft.Extensions.Configuration.ConfigurationBuilder.Build() 在 FOO_Web_App.Program.c.b__1_2(WebHostBuilderContext hostingContext, IConfigurationBuilder config) 在 C:\Professional\Projects\FOO\Program.cs:line 37 在 Microsoft.AspNetCore.Hosting.GenericWebHostBuilder.c__DisplayClass9_0.b__0(HostBuilderContext 上下文,IConfigurationBuilder 生成器) 在 Microsoft.Extensions.Hosting.HostBuilder.BuildAppConfiguration() 在 Microsoft.Extensions.Hosting.HostBuilder.Build() 在 C:\Professional\Projects\FOO\Program.cs:line 17 中的 FOO_Web_App.Program.Main(String[] args) 处 watch : 以错误代码 -532462766 退出
代码(运行 'dotnet watch run' 时也会出现):
public class Program
{
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureAppConfiguration((context, config) =>
{
var keyVaultEndpoint = new Uri(Environment.GetEnvironmentVariable("VaultUri"));
config.AddAzureKeyVault(
keyVaultEndpoint,
new DefaultAzureCredential());
})
.ConfigureWebHostDefaults(webBuilder =>
webBuilder.ConfigureAppConfiguration((hostingContext, config) =>
{
//Error here at config.Build():
//Azure.RequestFailedException: 'Service request failed.
//Status: 403(Forbidden)
//Content:
//{"error":{"code":"Forbidden","message":"Caller is not authorized to perform action on resource.\r\nIf role assignments, deny assignments or role definitions were changed recently, please observe propagation time.\r\nCaller: appid=c41ed4ac-ID-SNIP;oid=3108ce41-ID-SNIP;iss=https://sts.windows.net/359ccce3-ID-SNIP/\r\nAction: 'Microsoft.KeyVault/vaults/secrets/readMetadata/action'\r\nResource: '/subscriptions/666a80a4-ID-SNIP/resourcegroups/RESOURCEGROUPNAME/providers/microsoft.keyvault/vaults/webappvaultname'\r\nAssignment: (not found)\r\nVault: NameOfWebAppvault;location=eastus\r\n","innererror":{"code":"ForbiddenByRbac"}}}
var settings = config.Build();
config.AddAzureAppConfiguration(options =>
{
options.Connect(settings["ConnectionStrings:AppConfig"])
.ConfigureKeyVault(kv => { kv.SetCredential(new DefaultAzureCredential()); });
});
}).UseStartup<Startup>());
}
我通过 PowerShell 验证了我的登录用户以确保它是正确的:
这些是访问控制中的角色分配:
我知道错误引用了“观察传播时间”,但已经过去了几个小时,昨天发生了同样的错误。这是租户的问题吗? Azure KV 或 RBAC 配置问题?代码问题?开发环境/用户帐户问题?
【问题讨论】:
-
您对保险库的访问策略如何 - 您的应用和/或用户是否被授予正确的保险库级别权限?
-
检查 azure key vault 上的访问策略,您没有权限访问您的 id,这就是您收到此错误的原因。 ??????????
-
启用 Azure 基于角色的访问控制后,访问策略页面不可用!
标签: azure asp.net-core