【问题标题】:RequestFailedException/403 Forbidden errors accessing Azure Key Vault with role based access policiesRequestFailedException/403 使用基于角色的访问策略访问 Azure Key Vault 时出现禁止错误
【发布时间】: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, Func1 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


【解决方案1】:

作为所有者或贡献者不会授予您从密钥保管库读取密钥的权限。

作为所有者,您确实有权授予自己读取密钥的权限。

如果您授予自己密钥保管库管理员角色,您将能够读取密钥。

Key Vault Contributor 角色用于管理平面操作 管理密钥保管库。它不允许访问密钥、秘密和 证书。

见:https://docs.microsoft.com/en-us/azure/key-vault/general/rbac-guide?tabs=azure-cli

【讨论】:

  • 但我是 Key Vault 管理员 - 请参阅 KVA 部分中列出的“Eric”
  • 您是所有者,您需要授予自己获取和列出密钥的权利
  • 我已经是 Key Vault 管理员角色的成员 - 这不是天生就有权获取和列出密钥吗??
  • 这不会显示在屏幕转储中。如果您最近获得了该角色,请尝试注销并重新登录,以便更新您的组成员身份。
  • “访问控制 (IAM)”页面的屏幕转储在 Key Vault 管理员列表中的两个红色箭头之间显示了我的名字(“Eric Legault” - 部分模糊)。我错过了什么明显的东西吗??
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-09
  • 1970-01-01
  • 2019-06-09
  • 2020-04-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多