使用 Visual Studio 连接服务将 Key Vault 添加到 Web 应用程序

本教程介绍如何轻松添加所需的设置,以开始使用 Azure Key Vault 在 Visual Studio 中管理 Web 项目的机密,不管使用的是 ASP.NET Core 还是任何类型的 ASP.NET 项目。 使用 Visual Studio 中的连接服务功能,可让 Visual Studio 自动添加所需的所有 NuGet 包和配置设置,以连接到 Azure 中的 Key Vault。

有关连接服务为了启用密钥保管库而在项目中所做的更改的详细信息,请参阅密钥保管库连接服务 - 我的 ASP.NET 项目发生了什么情况密钥保管库连接服务 - 我的 ASP.NET Core 项目发生了什么情况

先决条件

将 Key Vault 支持添加到项目

开始之前,请确保已登录 Visual Studio。 登录时使用的帐户与用于 Azure 订阅的帐户相同。 然后打开 ASP.NET 4.7.1 或更高版本或 ASP.NET Core Web 项目,执行以下步骤。 所示的步骤适用于 Visual Studio 2022 版本 17.4。 对于其他版本的 Visual Studio,流程可能略有不同。

  1. 在“解决方案资源管理器”中,右键单击要将 Key Vault 支持添加到的项目,然后选择“添加”>“连接服务”。 在“服务依赖项”下,选择 + 图标。 此时会显示“连接服务”页,其中包含可添加到项目的服务。

  2. 在可用服务的菜单中,选择“Azure Key Vault”,然后单击“下一步”。

    选择“Azure Key Vault”

  3. 选择要使用的订阅;接下来,如果已有要使用的 Key Vault,请选择并单击下一步

    屏幕截图显示如何选择你的订阅

  4. 如果没有现有的 Key Vault,请单击“新建 Key Vault”。 系统会要求你提供资源组、位置和 SKU。

    “创建 Azure 密钥保管库”屏幕的屏幕截图

  5. 在“配置密钥保管库”屏幕中,可以更改引用密钥保管库 URI 的环境变量的名称。 此处不存储连接字符串;它存储在密钥保管库中。

    “连接到 Azure Key Vault”屏幕的屏幕截图。

  6. 单击“下一步”以查看更改摘要,然后单击“完成”。

现在已建立与 Key Vault 的连接,你可以通过代码访问机密了。 如果你刚刚创建了新的密钥保管库,请通过创建可在代码中引用的机密来测试该密钥保管库。 可以使用 Azure 门户PowerShellAzure CLI 来创建机密。

参阅适用于 .NET 的 Azure 密钥保管库机密客户端库 - 代码示例中有关处理机密的代码示例。

配置对密钥保管库的访问

如果运行密钥保管库的 Microsoft 帐户不是用于登录 Visual Studio 的帐户(例如,密钥保管库在工作帐户中运行,但 Visual Studio 使用的是私人帐户),则 Program.cs 文件中会出现一条错误,指出 Visual Studio 无法访问密钥保管库。 若要解决此问题,请转到 Azure 门户,打开密钥保管库,然后选择“访问控制 (IAM)”以设置权限。 请参阅使用 Azure 基于角色的访问控制提供对密钥保管库密钥、证书和机密的访问权限

注意

旧密钥保管库可能会使用旧访问策略模型。 建议迁移较旧密钥保管库以使用 Azure RBAC。 请参阅 Azure 基于角色的访问控制 (RBAC) 与访问策略

如何修改 ASP.NET Core 项目

本节介绍在使用 Visual Studio 添加 Key Vault 连接服务时,对 ASP.NET 项目所做的具体更改。

为 ASP.NET Core 添加了引用

影响项目文件 .NET 引用和 NuGet 包引用。

类型 参考
NuGet Microsoft.AspNetCore.AzureKeyVault.HostingStartup

为 ASP.NET Core 添加了文件

  • 添加了 ConnectedService.json,其中记录了有关连接服务提供程序、版本和指向文档的链接的一些信息。

ASP.NET Core 的项目文件更改

  • 添加了连接服务 ItemGroup 和 ConnectedServices.json 文件。

适用于 ASP.NET Core 的 launchsettings.json 更改

  • 将以下环境变量条目添加到 IIS Express 配置文件和匹配 Web 项目名称的配置文件:

      "environmentVariables": {
        "ASPNETCORE_HOSTINGSTARTUP__KEYVAULT__CONFIGURATIONENABLED": "true",
        "ASPNETCORE_HOSTINGSTARTUP__KEYVAULT__CONFIGURATIONVAULT": "<your keyvault URL>"
      }
    

Azure 上适用于 ASP.NET Core 的更改

  • 创建了资源组(或使用了现有资源组)。
  • 在指定的资源组中创建了 Key Vault。

如何修改 ASP.NET Framework 项目

本节介绍在使用 Visual Studio 添加 Key Vault 连接服务时,对 ASP.NET 项目所做的具体更改。

为 ASP.NET Framework 添加了引用

影响项目文件 .NET 引用和 packages.config(NuGet 引用)。

类型 参考
.NET; NuGet Azure.Identity
.NET; NuGet Azure.Security.KeyVault.Keys
.NET; NuGet Azure.Security.key vault.Secrets

重要

默认情况下,会安装 Azure.Identity 1.1.1,它不支持 Visual Studio Credential。 你可以使用 Visual Studio Credential 手动将包引用更新为 1.2+。

为 ASP.NET Framework 添加了文件

  • 添加了 ConnectedService.json,其中记录了有关连接服务提供程序、版本和指向文档的链接的一些信息。

ASP.NET Framework 的项目文件更改

  • 添加了连接服务 ItemGroup 和 ConnectedServices.json 文件。
  • 请参考添加的引用部分中所述的 .NET 程序集。

后续步骤

如果已根据本教程完成上述操作,则为你设置的 Key Vault 权限适合与你自己的 Azure 订阅配合运行,但可能不适合于生产方案。 可以创建托管标识来管理应用的 Key Vault 访问权限。 请参阅如何向 Key Vault 进行身份验证分配 Key Vault 访问策略

Key Vault 开发人员指南中了解如何使用 Key Vault 进行开发。

如果目标是在 Azure Key Vault 中存储 ASP.NET Core 应用的配置,请参阅 ASP.NET Core 中的 Azure Key Vault 配置提供程序