关于 Azure Key Vault
Azure Key Vault 有助于解决以下问题:
- 机密管理 - Azure Key Vault 可以用来安全地存储令牌、密码、证书、API 密钥和其他机密,并对其访问进行严格控制
- 密钥管理 - Azure Key Vault 也可用作密钥管理解决方案。 可以通过 Azure Key Vault 轻松创建和控制用于加密数据的加密密钥。
- 证书管理 - Azure Key Vault 也是一项服务,可用来轻松预配、管理和部署公用和专用传输层安全性/安全套接字层 (TLS/SSL) 证书,以用于 Azure 以及内部连接资源。
创建保管库
- 在 Azure 门户菜单或“主页”中,选择“创建资源” 。
- 在“搜索”框中输入“Key Vault”。
- 从结果列表中选择“Key Vault”。
- 在“Key Vault”部分,选择“创建”。
- 在“创建密钥保管库”部分,提供以下信息:
- 提供上述信息后,选择“创建”。
请记下下面列出的两个属性:
- 保管库名称:在本示例中,此项为 Contoso-Vault2。 将在其他步骤中使用此名称。
- 保管库 URI:在本示例中,此项为 https://contoso-vault2.vault.azure.cn/ 。 通过其 REST API 使用保管库的应用程序必须使用此 URI。
目前,只有你的 Azure 帐户有权对这个新保管库执行操作。
对 Azure Key Vault 进行身份验证
借助 Azure 密钥保管库,可以在集中的安全云存储库中存储机密并控制其分发,因而无需在应用程序中存储凭据。 应用程序只需要在运行时使用密钥保管库进行身份验证即可访问这些机密。
应用标识和安全主体
使用密钥保管库进行的身份验证可与 Azure Active Directory (Azure AD) 结合使用,后者负责对任何给定安全主体的标识进行身份验证。
安全主体是一个对象,表示请求访问 Azure 资源的用户、组、服务或应用程序。 Azure 为每个安全主体分配唯一的对象 ID。
注册应用程序
注册应用程序会在应用与 Microsoft 标识平台之间建立信任关系。 信任是单向的:应用信任 Microsoft 标识平台,但标识平台并不信任应用。
按照以下步骤创建应用注册:
-
如果有权访问多个租户,请使用顶部菜单中的“目录 + 订阅”筛选器
,选择要在其中注册应用程序的租户。
-
搜索并选择“Azure Active Directory” 。
-
指定可使用该应用程序的人员,这有时称为“登录访问者”。
表 1 支持的帐户类型 说明 仅此组织目录中的帐户 如果要生成仅供租户中的用户(或来宾)使用的应用程序,请选择此选项。
通常称为业务线 (LOB) 应用程序,这是 Microsoft 标识平台中的单租户应用程序。任何组织目录中的帐户 如果希望任何 Azure AD 租户中的用户都能够使用你的应用程序,请选择此选项。 例如,如果要构建打算向多个组织提供的软件即服务 (SaaS) 应用程序,则适合使用此选项。
这在 Microsoft 标识平台中被称为多租户应用程序。
注册完成后,Azure 门户会显示应用注册的“概述”窗格,其中包括其应用程序(客户端)ID 。 此值也被称为客户端 ID,它可唯一地标识 Microsoft 标识平台中的应用程序。
应用程序的代码(或者更通常是应用程序中使用的身份验证库)也将使用客户端 ID 来验证从标识平台接收的安全令牌。
添加凭据
凭据供访问 Web API 的机密客户端应用程序使用。 Web 应用、其他 Web API 或服务类型和守护程序类型的应用程序都是机密客户端。 通过凭据,应用程序可以自己的身份进行身份验证,无需用户在运行时进行任何交互。
可将证书和客户端密码(字符串)作为凭据添加到机密客户端应用注册。
添加客户端密码
客户端密码(也称为应用程序密码)是应用可用于代替证书来标识自身的字符串。 这是两种凭证类型中更容易使用的一种,而且通常在开发过程中使用,但它不如证书安全。 应在生产环境中运行的应用程序中使用证书。
- 在 Azure 门户中的“应用注册”中选择你的应用程序。
- 选择“证书和密码” > “新建客户端密码” 。
- 添加客户端机密的说明。
- 选择持续时间。
- 选择 添加 。
- “记录密码的值”,以便在客户端应用程序中使用 - 离开此页面后,它将不再显示。
授权安全主体访问 Key Vault
-
若要在本地运行 Azure CLI 命令,请安装 Azure CLI。
-
仅限本地 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; }
}