使用 CLI 2.0 管理 Key Vault

本文介绍如何开始使用 Azure CLI 2.0 处理 Azure Key Vault。 你可以获得以下信息:

  • 如何在 Azure 中创建强化的容器(保管库)
  • 如何在 Azure 中存储和管理密钥和密码。
  • 使用 Azure CLI 创建保管库。
  • 创建密钥或密码,随后可将其用于 Azure 应用程序。
  • 应用程序如何使用创建的密钥或密码。

大多数区域都提供了 Azure 密钥保管库。 有关详细信息,请参阅 密钥保管库定价页

Note

本文未说明如何编写其中一个步骤所包括的 Azure 应用程序,但说明了如何授权应用程序使用 Key Vault 中的密钥或机密。

有关 Azure Key Vault 的概述,请参阅什么是 Azure Key Vault?

先决条件

若要使用本文中的 Azure CLI 命令,必须准备好以下各项:

获得 Azure 跨平台命令行接口帮助

本文假设你熟悉命令行接口(Bash、终端、命令提示符)。

可以使用 --help 或 -h 参数来查看特定命令的帮助。 或者,也可以使用 Azure help [命令] [选项] 格式。 如果对某个命令所需的参数有疑问,请参阅帮助。 例如,以下命令都返回相同信息:

az account set --help
az account set -h

也可以阅读以下文章来熟悉如何在 Azure 跨平台命令行接口中使用 Azure 资源管理器:

连接到订阅

若要以交互方式登录,请使用以下命令:

az login

若要使用组织帐户登录,可以传入自己的用户名和密码。

az login -u username@domain.com -p password

如果有多个订阅,并需要指定要使用的订阅,请键入以下内容以查看帐户的订阅:

az account list

使用订阅参数指定订阅。

az account set --subscription <subscription name or ID>

有关配置 Azure 跨平台命令行接口的详细信息,请参阅安装 Azure CLI

创建新的资源组

使用 Azure Resource Manager 时,会在资源组中创建所有相关资源。 可在现有的资源组中创建 Key Vault。 如果想要使用新资源组,可以新建一个。

az group create -n 'ContosoResourceGroup' -l 'China North'

第一个参数是资源组名称,第二个参数是位置。 若要获取所有可能的位置类型的列表:

az account list-locations

注册密钥保管库资源提供程序

尝试创建新的 Key Vault 时,可能会看到错误“订阅未注册,无法使用命名空间‘Microsoft.KeyVault’”。 如果显示此消息,请确保在订阅中注册 Key Vault 资源提供程序。 对每个订阅而言,这都是一次性操作。

az provider register -n Microsoft.KeyVault

创建密钥保管库

使用 az keyvault create 命令来创建密钥保管库。 此脚本包含三个必需参数:资源组名称、密钥保管库名称和地理位置。

若要在位于“中国北部”位置的资源组 ContosoResourceGroup 中创建名为 ContosoKeyVault 的新保管库,请键入:

az keyvault create --name 'ContosoKeyVault' --resource-group 'ContosoResourceGroup' --location 'China North'

此命令的输出会显示创建的 Key Vault 的属性。 两个最重要的属性是:

  • name:在本示例中,名称为 ContosoKeyVault。 将在其他 Key Vault 命令中使用此名称。
  • vaultUri:在本示例中, URI 为 https://contosokeyvault.vault.azure.cn。 通过其 REST API 使用保管库的应用程序必须使用此 URI。

Azure 帐户现已获取在此密钥保管库上执行任何作业的授权。 到目前为止,尚未授权其他任何人。

将密钥、机密或证书添加到 Key Vault

若要在 Azure Key Vault 中创建一个受软件保护的密钥,请使用 az key create 命令。

az keyvault key create --vault-name 'ContosoKeyVault' --name 'ContosoFirstKey' --protection software

如果在 .pem 文件中保留了现有的密钥,可将此文件上传到 Azure Key Vault。 可以使用软件保护密钥。 使用以下命令从 .pem 文件导入密钥,并使用软件保护该密钥:

az keyvault key import --vault-name 'ContosoKeyVault' --name 'ContosoFirstKey' --pem-file './softkey.pem' --pem-password 'Pa$$w0rd' --protection software

现在,可以通过使用密钥的 URI,引用已创建或上传到 Azure 密钥保管库的密钥。 使用 https://ContosoKeyVault.vault.azure.cn/keys/ContosoFirstKey 始终会获取当前版本。 使用 https://[keyvault-name].vault.azure.cn/keys/[keyname]/[key-unique-id] 获取此特定版本。 例如,https://ContosoKeyVault.vault.azure.cn/keys/ContosoFirstKey/cgacf4f763ar42ffb0a1gca546aygd87

将机密(名为 SQLPassword 的密码,其值为 Pa$$w0rd)添加到 Azure Key Vault。

az keyvault secret set --vault-name 'ContosoKeyVault' --name 'SQLPassword' --value 'Pa$$w0rd'

使用此密码的 URI 引用此密码。 使用 https://ContosoVault.vault.azure.cn/secrets/SQLPassword 始终会获取当前版本,使用 https://[keyvault-name].vault.azure.cn/secret/[secret-name]/[secret-unique-id] 会获取此特定版本。 例如,https://ContosoVault.vault.azure.cn/secrets/SQLPassword/90018dbb96a84117a0d2847ef8e7189d

使用 .pem 或 .pfx 将证书导入保管库。

az keyvault certificate import --vault-name 'ContosoKeyVault' --file 'c:\cert\cert.pfx' --name 'ContosoCert' --password 'Pa$$w0rd'

让我们查看创建的密钥、机密或证书:

  • 若要查看密钥,请键入:

    az keyvault key list --vault-name 'ContosoKeyVault'
    
  • 若要查看机密,请键入:

    az keyvault secret list --vault-name 'ContosoKeyVault'
    
  • 若要查看证书,请键入:

    az keyvault certificate list --vault-name 'ContosoKeyVault'
    

将应用程序注册到 Azure Active Directory

此步骤通常由开发人员在独立的计算机上完成。 此步骤并非特定于 Azure Key Vault,本文介绍此步骤仅供你了解。 若要完成应用注册,你的帐户、保管库和应用程序需在同一个 Azure 目录中。

使用密钥保管库的应用程序必须使用 Azure Active Directory 的令牌进行身份验证。 应用程序的所有者必须先将其注册到 Azure Active Directory 中。 注册结束后,应用程序所有者获得以下值:

  • 应用程序 ID(也称为 AAD 客户端 ID 或 appID)
  • 身份验证密钥(也称共享机密)。

应用程序必须向 Azure Active Directory 提供这两个值才能获取令牌。 如何将应用程序配置为获取令牌取决于应用程序。 对于 Key Vault 示例应用程序,应用程序所有者会在 app.config 文件中设置这些值。

有关将应用程序注册到 Azure Active Directory 的详细步骤,请参阅文章将应用程序与 Azure Active Directory 集成使用门户创建可访问资源的 Azure Active Directory 应用程序和服务主体以及使用 Azure CLI 2.0 创建 Azure 服务主体

在 Azure Active Directory 中注册应用程序:

az ad sp create-for-rbac -n "MyApp" --password 'Pa$$w0rd' --skip-assignment
# If you don't specify a password, one will be created for you.

授权应用程序使用密钥或密码

若要授权应用程序访问保管库中的密钥或机密,请使用 az keyvault set-policy 命令。

例如,如果保管库名称是 ContosoKeyVault,应用程序的 appID 为 8f8c4bbd-485b-45fd-98f7-ec6300b7b4ed,并且你想要授权应用程序使用保管库中的密钥来进行解密和签名,请使用以下命令:

az keyvault set-policy --name 'ContosoKeyVault' --spn 8f8c4bbd-485b-45fd-98f7-ec6300b7b4ed --key-permissions decrypt sign

若要授权同一应用程序读取保管库中的机密,请键入以下命令:

az keyvault set-policy --name 'ContosoKeyVault' --spn 8f8c4bbd-485b-45fd-98f7-ec6300b7b4ed --secret-permissions get

设置 Key Vault 高级访问策略

使用 az keyvault update 为 Key Vault 启用高级策略。

为部署启用 Key Vault:允许虚拟机从保管库中检索作为机密存储的证书。

az keyvault update --name 'ContosoKeyVault' --resource-group 'ContosoResourceGroup' --enabled-for-deployment 'true'

为磁盘加密启用 Key Vault:为 Azure 磁盘加密使用保管库时需要执行此操作。

az keyvault update --name 'ContosoKeyVault' --resource-group 'ContosoResourceGroup' --enabled-for-disk-encryption 'true'

为模板部署启用 Key Vault:允许资源管理器从保管库中检索机密。

az keyvault update --name 'ContosoKeyVault' --resource-group 'ContosoResourceGroup' --enabled-for-template-deployment 'true'

删除密钥保管库以及关联的密钥和机密

如果不再需要 Key Vault 及其密钥或机密,可以使用 az keyvault delete 命令删除 Key Vault:

az keyvault delete --name 'ContosoKeyVault'

或者,可以删除整个 Azure 资源组,其中包括密钥保管库和你加入该组的任何其他资源:

az group delete --name 'ContosoResourceGroup'

其他 Azure 跨平台命令行接口命令

可能有助于管理 Azure Key Vault 的其他命令。

此命令列出以表格形式显示的所有密钥和所选属性:

az keyvault key list --vault-name 'ContosoKeyVault'

此命令显示特定密钥的完整属性列表:

az keyvault key show --vault-name 'ContosoKeyVault' --name 'ContosoFirstKey'

此命令列出以表格形式显示的所有机密名称和所选属性:

az keyvault secret list --vault-name 'ContosoKeyVault'

下面是演示如何删除特定密钥的示例:

az keyvault key delete --vault-name 'ContosoKeyVault' --name 'ContosoFirstKey'

下面是演示如何删除特定机密的示例:

az keyvault secret delete --vault-name 'ContosoKeyVault' --name 'SQLPassword'

后续步骤