Azure 密钥保管库。如何设置哪个 Web 应用程序使用哪个密钥保管库?

Azure key vault. How to set which web app uses what key vault?

我在同一个订阅服务上有多个版本的同一个网络应用 运行。

我有 2 个逻辑环境。开发和 UAT。 我有 WebAppDev 和 WebAppUAT。

我有两个密钥保管库 KVDev 和 KVUAT。 如何配置正确的 Web 应用程序以使用正确的密钥保管库?

什么进程将 Web 应用程序分配给密钥保管库?

编辑: 我曾假设密钥库在开发时会像秘密一样工作。

这个 Tutorial

似乎暗示密钥保管库可以用作配置提供程序。但是,Web 应用未访问密钥保管库值。

如果您想通过使用 SDK 或 REST 编程访问 Azure Key Vault API,那将不是问题。因为不同的密钥保管库具有不同的 DNS 名称。当您尝试检索代码中的机密或密钥时,您需要使用其标识 URL,其中包含其密钥保管库 DNS 名称。它最终会找到目标密钥库。

如果您想在具有托管标识的 Web 应用程序中使用密钥保管库,您可以参考教程:Use Azure Key Vault with an Azure web app in .NET

在该教程中,您将启用网络应用程序的身份。然后您可以为该身份分配访问策略。这样,Web 应用程序将能够使用托管标识访问密钥保管库。

换个角度,当前的问题和评论解决了对 KeyVault 的身份验证。

但是,这听起来像是一个更基本的问题,您需要根据环境改变配置。

即WebAppDev 需要配置为使用 KVDev URL 并且 WebAppUAT 需要使用 KVUAT URL.

假设您使用的是应用服务计划;本文档提供了一种存储环境特定配置的机制以及如何将其用于您选择的编程语言的指南,您需要参考特定于应用程序的配置部分。

https://docs.microsoft.com/en-us/azure/app-service/configure-common

到目前为止,在门户中进行配置会帮助您,但随着时间的推移,您可能希望将配置包含在发布管理管道中,这样您就不需要手动进行配置了。 Azure DevOps Pipeline 就是这样一种工具:

https://docs.microsoft.com/en-us/azure/devops/pipelines/get-started/?toc=%2Fazure%2Fdevops%2Fpipelines%2Ftoc.json&bc=%2Fazure%2Fdevops%2Fboards%2Fpipelines%2Fbreadcrumb%2Ftoc.json&view=azure-devops

为了帮助您入门,有一个特定的部署任务可以帮助设置应用服务计划的配置:https://docs.microsoft.com/en-us/azure/devops/pipelines/tasks/deploy/azure-rm-web-app-deployment?view=azure-devops

随着时间的推移,我建议不要在发布管道和源代码控制之间拆分配置,而是使用不需要修改部署时间的配置,而不是在 ARM 模板中保持源代码控制,但这是一个答案自己的权利,所以我不会把事情与太多细节混淆。

  1. 从网络应用程序的身份 blade 中获取 Object ID。

  2. 找到您的 Azure Key Vault 并使用 Web 应用程序的 Object ID 创建新的访问策略。

    或者在 powershell cli 中使用以下命令。

Set-AzKeyVaultAccessPolicy –VaultName -ObjectId "" -PermissionsToKeys backup,create,delete,get,import,list,restore -PermissionsToSecrets get,list,backup,restore,recover

  1. 遵循本教程并从示例代码中的 Program.cs 复制上下文。

Tutorial