NET - .NET Core 之 Azure Key Vault 密钥保管库的使用

关于 Azure Key Vault

Azure Key Vault 有助于解决以下问题:

  • 机密管理 - Azure Key Vault 可以用来安全地存储令牌、密码、证书、API 密钥和其他机密,并对其访问进行严格控制
  • 密钥管理 - Azure Key Vault 也可用作密钥管理解决方案。 可以通过 Azure Key Vault 轻松创建和控制用于加密数据的加密密钥。
  • 证书管理 - Azure Key Vault 也是一项服务,可用来轻松预配、管理和部署公用和专用传输层安全性/安全套接字层 (TLS/SSL) 证书,以用于 Azure 以及内部连接资源。

 

创建保管库

  1. 在 Azure 门户菜单或“主页”中,选择“创建资源” 。
  2. 在“搜索”框中输入“Key Vault”。
  3. 从结果列表中选择“Key Vault”。
  4. 在“Key Vault”部分,选择“创建”。
  5. 在“创建密钥保管库”部分,提供以下信息:
    • Name:必须提供唯一的名称。 对于本快速入门,我们使用 Contoso-vault2
    • 订阅:选择订阅
    • 在“资源组”下选择“新建”,然后输入资源组名称
    • 在“位置”下拉菜单中选择一个位置。
    • 让其他选项保留认值。
  6. 提供上述信息后,选择“创建”。

请记下下面列出的两个属性

  • 保管库名称:在本示例中,此项为 Contoso-Vault2。 将在其他步骤中使用此名称
  • 保管库 URI:在本示例中,此项为 https://contoso-vault2.vault.azure.cn/ 。 通过其 REST API 使用保管库的应用程序必须使用此 URI。

目前,只有你的 Azure 帐户有权对这个新保管库执行操作。

Key Vault 创建完成后的输出

 

对 Azure Key Vault 进行身份验证

借助 Azure 密钥保管库,可以在集中的安全云存储库中存储机密并控制其分发,因而无需在应用程序中存储凭据。 应用程序只需要在运行时使用密钥保管库进行身份验证即可访问这些机密。

应用标识和安全主体

使用密钥保管库进行的身份验证可与 Azure Active Directory (Azure AD) 结合使用,后者负责对任何给定安全主体的标识进行身份验证。

安全主体是一个对象,表示请求访问 Azure 资源的用户、组、服务或应用程序。 Azure 为每个安全主体分配唯一的对象 ID。

 

注册应用程序

注册应用程序会在应用与 Microsoft 标识平台之间建立信任关系。 信任是单向的:应用信任 Microsoft 标识平台,但标识平台并不信任应用。

按照以下步骤创建应用注册

  1. 登录 Azure 门户

  2. 如果有权访问多个租户,请使用顶部菜单中的“目录 + 订阅”筛选器

     ,选择要在其中注册应用程序的租户。

  3. 搜索并选择“Azure Active Directory” 。

  4. 在“管理”下,选择“应用注册”,然后选择“新建注册” 。

  5. 输入应用程序的名称。 应用的用户可能会看到此名称,你稍后可对其进行更改。

  6. 指定可使用该应用程序的人员,这有时称为“登录访问者”。

    表 1
    支持的帐户类型说明
    仅此组织目录中的帐户如果要生成仅供租户中的用户(或来宾)使用的应用程序,请选择此选项。

    通常称为业务线 (LOB) 应用程序,这是 Microsoft 标识平台中的单租户应用程序。
    任何组织目录中的帐户如果希望任何 Azure AD 租户中的用户都能够使用你的应用程序,请选择此选项。 例如,如果要构建打算向多个组织提供的软件即服务 (SaaS) 应用程序,则适合使用此选项。

    这在 Microsoft 标识平台中被称为多租户应用程序。
  7. 请勿对“重定向 URI (可选)”输入任何内容,你将在下一部分中进行配置。

  8. 选择“注册”,完成初始应用注册

    Web 浏览器中 Azure 门户的屏幕截图,其中显示了“注册应用程序”窗格。

注册完成后,Azure 门户会显示应用注册的“概述”窗格,其中包括其应用程序(客户端)ID 。 此值也被称为客户端 ID,它可唯一地标识 Microsoft 标识平台中的应用程序。

应用程序的代码(或者更通常是应用程序中使用的身份验证库)也将使用客户端 ID 来验证从标识平台接收的安全令牌。

Web 浏览器中 Azure 门户的屏幕截图,其中显示了“注册应用程序”窗格。

添加凭据

凭据供访问 Web API 的机密客户端应用程序使用。 Web 应用、其他 Web API 或服务类型和守护程序类型的应用程序都是机密客户端。 通过凭据,应用程序可以自己的身份进行身份验证,无需用户在运行时进行任何交互。

可将证书和客户端密码(字符串)作为凭据添加到机密客户端应用注册

Web 浏览器中 Azure 门户的屏幕截图,其中显示了“注册应用程序”窗格。

添加客户端密码

客户端密码(也称为应用程序密码)是应用可用于代替证书来标识自身的字符串。 这是两种凭证类型中更容易使用的一种,而且通常在开发过程中使用,但它不如证书安全。 应在生产环境中运行的应用程序中使用证书。

  1. 在 Azure 门户中的“应用注册”中选择你的应用程序。
  2. 选择“证书和密码” > “新建客户端密码” 。
  3. 添加客户端机密的说明。
  4. 选择持续时间。
  5. 选择 添加 。
  6. “记录密码的值”,以便在客户端应用程序中使用 - 离开此页面后,它将不再显示

 

授权安全主体访问 Key Vault

  1. 若要在本地运行 Azure CLI 命令,请安装 Azure CLI

  2. 仅限本地 CLI:使用 az login 登录到 Azure:

    Bash复制

    az cloud set -n AzureChinaCloud
    az login

    3 .应用程序和其他服务主体:请使用 az ad sp list 命令来检索服务主体。 请检查命令的输出,以确定要为其分配访问策略的安全主体的对象 ID。

        Azure CLI复制

az ad sp list --show-mine

          

 

分配访问策略

使用 az keyvault set-policy 命令来分配所需的权限:

az keyvault set-policy --name mykeyvault --object-id <object-id> --secret-permissions list get --key-permissions list get --certificate-permissions list get

      将 <object-id> 替换为服务主体的对象 ID。即Azure AD 所创建应用的object-id 。az ad sp list --show-mine中查找。

 

代码配置

program.cs

public static IWebHost BuildWebHost(string[] args) =>
    WebHost.CreateDefaultBuilder(args)
    .ConfigureAppConfiguration(Setkeyvault)
    .UseStartup<Startup>()
    .Build();

public static void Setkeyvault(WebHostBuilderContext ctx, IConfigurationBuilder builder)
{
    var builtConfig = builder.Build();


    builder.AddAzurekeyvault(
       builtConfig["keyvault"],
       builtConfig["AzureADApplicationId"],
       builtConfig["AzureADPassword"]);

    }
}

Startup.cs

public class Startup
{​​​​​
    public Startup(IConfiguration configuration)
    {​​​​​
        this.Configuration = configuration;
    }​​​​​

     public IConfiguration Configuration {​​​​​ get; }​​​​​
     public void ConfigureServices(IServiceCollection services)
    {​​​​​
        this.Configuration.Bind(new ApplicationConfiguration());

        


ApplicationConfiguration.cs

public class ApplicationConfiguration
{​​​​​
    public static string sqlConnectionString {​​​​​ get; set; }​​​​​
}

 

 

 

相关文章

Microsoft云包括了Azure、PowerPlatform、Microsoft365、Git...
《WindowsAzurePlatform系列文章目录》 我们在使用AzureAPI...
微软免费使用一年的Azure虚拟机,默认提供了一个64G的磁盘,...
上篇请访问这里做一个能对标阿里云的前端APM工具(上)样本多...
一年一度的MicrosoftBuild终于来了,带来了非常非常多的新技...