将 Azure 应用服务连接到 keyvault 支持的应用配置引发 403

Connecting an Azure App Service to a keyvault backed app configuration raises 403

我想知道如何将我的应用服务正确连接到也通过 KeyVault 支持的应用配置。

遗憾的是我没有真正找到一个非常合适的教程,所以现在我有点困惑,但没有用。

这是我的错误:

Unhandled exception. Microsoft.Extensions.Configuration.AzureAppConfiguration.KeyVaultReferenceException: Key vault error. ErrorCode:, Key:copied out, Label:, Etag:copied out, SecretIdentifier:https://copied out.vault.azure.net/secrets/copied out
2021-03-21T00:07:43.756601504Z  ---> Azure.RequestFailedException: Service request failed.
2021-03-21T00:07:43.756608304Z Status: 403 (Forbidden)

2021-03-21T00:07:43.756614804Z Content:
2021-03-21T00:07:43.756614804Z {"error":{"code":"Forbidden","message":"The user, group or application 'appid=copied out;oid=copied out;iss=https://sts.windows.net/copied out/' does not have secrets get permission on key vault 'moonwatch;location=eastus'. For help resolving this issue, please see https://go.microsoft.com/fwlink/?linkid=2125287","innererror":{"code":"AccessDenied"}}}

(请注意,我已复制出敏感数据

我对这件事有点生气。这是我的设置:

ConfigBuilder.AddAzureAppConfiguration(options =>
            {
                var credentials = new ManagedIdentityCredential();
                options.Connect(new Uri("https://copied out.azconfig.io"), credentials)
                    .ConfigureKeyVault(kv => kv.SetCredential(credentials));
            });

这是我目前配置资源的方式:

  1. 我的应用服务有一个托管的、系统分配的标识
  2. 应用配置包含我的所有配置,加上一些由 keyvault 支持的配置条目
  3. keyvault 被设置为“Vault access”作为访问策略,并根据设置程序正确连接到应用程序配置
  4. 我的应用服务应用程序在我的应用配置中分配了角色“应用配置数据 Reader”。

我现在不完全确定我现在的这个设置哪里出了问题。我现在已经尝试了几种方法,切换到 RBAC,到处更改设置,但似乎还没有成功。 RBAC 将错误更改为:

2021-03-21T00:07:43.756618504Z {"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=copied out;oid=copied out;iss=copied out/\r\nAction: 'Microsoft.KeyVault/vaults/secrets/getSecret/action'\r\nResource: '/subscriptions/copied out/resourcegroups/moonwatch/providers/microsoft.keyvault/vaults/copied out/secrets/copied out'\r\nAssignment: (not found)\r\nVault: copied out;location=eastus\r\n","innererror":{"code":"ForbiddenByRbac"}}} 

我哪里错了?我是否也需要以某种方式将我的应用程序本身连接到 keyvault?这看起来对我来说是一个传递性的东西

错误发生是因为您的应用服务没有权限访问您的 Key Vault。 Azure 应用程序配置不会访问您的 Key Vault。您的应用程序可以。在您的 Key Vault 的访问策略中,请向您的应用服务的托管标识授予 'Get' 秘密权限。