你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

使用 Azure CLI 管理 Key Vault

本文介绍如何使用 Azure CLI 开始使用 Azure Key Vault。 可以查看有关以下方面的信息:

  • 如何在 Azure 中创建强化容器(保管库)
  • 将密钥、机密或证书添加到密钥保管库
  • 使用 Microsoft Entra ID 注册应用程序
  • 授权应用程序使用密钥或机密
  • 设置密钥保管库高级访问策略
  • 使用硬件安全模块 (HSM)
  • 删除密钥保管库和关联的密钥和机密
  • 其他 Azure 跨平台命令行接口命令

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

注释

本文不包括有关如何编写其中一个步骤包含的 Azure 应用程序的说明,其中说明如何授权应用程序在密钥保管库中使用密钥或机密。

有关 Azure Key Vault 的概述,请参阅什么是 Azure Key Vault? 如果没有 Azure 订阅,请在开始之前创建一个免费帐户

先决条件

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

  • Microsoft Azure 订阅。 如果没有,可以注册免费试用版
  • Azure CLI 2.0 或更高版本。 若要安装最新版本,请参阅 安装 Azure CLI
  • 配置为使用本文中所创建的密钥或密码的应用程序。 Microsoft 下载中心提供了示例应用程序。 有关说明,请参阅包含的自述文件。

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

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

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

az account set --help
az account set -h

还可以阅读以下文章,以熟悉 Azure 跨平台 Command-Line 接口中的 Azure 资源管理器:

如何在 Azure 中创建强化容器(保管库)

保管库是受硬件安全模块支持的安全容器。 保管库可以集中存储应用程序机密,降低安全信息意外丢失的可能性。 Key Vault 还控制并记录对其中存储的任何内容的访问权限。 Azure Key Vault 可以处理请求和续订传输层安全性 (TLS) 证书,从而提供可靠的证书生命周期管理解决方案所需的功能。 在后续步骤中,将创建一个保管库。

连接到订阅

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

az login

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

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

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

az account list

使用订阅参数指定订阅。

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

有关配置 Azure 跨平台 Command-Line 接口的详细信息,请参阅 安装 Azure CLI

创建新的资源组

使用 Azure 资源管理器时,在资源组中创建所有相关资源。 可以在现有资源组中创建密钥保管库。 如果要使用新的资源组,可以创建新的资源组。

az group create -n "ContosoResourceGroup" -l "East Asia"

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

az account list-locations

注册 Key Vault 资源提供程序

尝试创建新的密钥保管库时,可能会看到错误“订阅未注册为使用命名空间'Microsoft.KeyVault'”。 如果出现该消息,请确保 Key Vault 资源提供程序已在订阅中注册。 对每个订阅而言,这都是一次性操作。

az provider register -n Microsoft.KeyVault

创建密钥保管库

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

若要创建名为 ContosoKeyVault 的新保管库,请在位于东亚位置的资源组 ContosoResourceGroup 中键入:

az keyvault create --name "ContosoKeyVault" --resource-group "ContosoResourceGroup" --___location "East Asia"

此命令的输出显示已创建的密钥保管库的属性。 两个最重要的属性是:

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

现在,你的 Azure 帐户有权对此密钥保管库执行任何操作。 到目前为止,尚未授权其他任何人。

将密钥、机密或证书添加到密钥保管库

如果希望 Azure Key Vault 为你创建受软件保护的密钥,请使用 az key create 该命令。

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

如果 .pem 文件中已有密钥,则可以将其上传到 Azure Key Vault。 可以选择使用软件或 HSM 保护密钥。 此示例使用密码“hVFkk965BuUv”从 .pem 文件导入密钥并使用软件对其进行保护:

az keyvault key import --vault-name "ContosoKeyVault" --name "ContosoFirstKey" --pem-file "./softkey.pem" --pem-password "hVFkk965BuUv" --protection software

现在,可以使用其 URI 引用已创建或上传到 Azure Key Vault 的密钥。 使用 https://ContosoKeyVault.vault.azure.net/keys/ContosoFirstKey 来始终获取当前版本。 使用https://<keyvault-name>.vault.azure.net/keys/<keyname>/<key-unique-id>获取此特定版本。 例如,https://ContosoKeyVault.vault.azure.net/keys/ContosoFirstKey/cgacf4f763ar42ffb0a1gca546aygd87

将机密(名为 SQLPassword 的密码,其值为“hVFkk965BuUv”)添加到 Azure Key Vault。

az keyvault secret set --vault-name "ContosoKeyVault" --name "SQLPassword" --value "hVFkk965BuUv "

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

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

az keyvault certificate import --vault-name "ContosoKeyVault" --file "c:\cert\cert.pfx" --name "ContosoCert" --password "hVFkk965BuUv"

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

  • 若要查看密钥,请键入:
az keyvault key list --vault-name "ContosoKeyVault"
  • 若要查看机密,请键入:
az keyvault secret list --vault-name "ContosoKeyVault"
  • 若要查看证书,请键入:
az keyvault certificate list --vault-name "ContosoKeyVault"

使用 Microsoft Entra ID 注册应用程序

此步骤通常由开发人员在单独的计算机上完成。 它并非专用于 Azure Key Vault,但在此包含以提高认识。 若要完成应用注册,帐户、保管库和应用程序需要位于同一 Azure 目录中。

使用密钥保管库的应用程序必须使用来自 Microsoft Entra ID 的令牌进行身份验证。 应用程序的所有者必须先在 Microsoft Entra 中注册它。 在注册结束时,应用程序所有者获取以下值:

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

应用程序必须同时将这两个值提供给Microsoft Entra ID,才能获取令牌。 应用程序获取令牌的配置方法取决于具体应用程序。 对于 Key Vault 示例应用程序,应用程序所有者在 app.config 文件中设置这些值。

有关使用 Microsoft Entra ID 注册应用程序的详细步骤,应查看标题为“ 将应用程序与 Microsoft Entra ID 集成”的文章, 使用门户创建可访问资源的 Microsoft Entra 应用程序和服务主体,以及 使用 Azure CLI 创建 Azure 服务主体

若要在 Microsoft Entra ID 中注册应用程序,请执行以下作:

az ad sp create-for-rbac -n "MyApp" --password "hVFkk965BuUv" --role Contributor --scopes /subscriptions/<subscription id>
# If you don't specify a password, one will be created for you.

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

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

例如,如果保管库名称为 ContosoKeyVault,并且想要授权应用程序解密并使用保管库中的密钥进行签名,请使用以下命令和应用程序 ID:

az keyvault set-policy --name "ContosoKeyVault" --spn {application-id} --key-permissions decrypt sign

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

az keyvault set-policy --name "ContosoKeyVault" --spn {application-id} --secret-permissions get

设置密钥保管库高级访问策略

使用 az keyvault 更新 为密钥保管库启用高级策略。

启用 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"

使用硬件安全模块 (HSM)

为了更有保障,您可以从硬件安全模块(HSM)导入或生成永远不会离开 HSM 边界的密钥。 HSM 经过 FIPS 140 验证。 如果此要求不适用于你,请跳过本部分,转到“删除密钥保管库”和关联的密钥和机密。

若要创建这些受 HSM 保护的密钥,必须具有支持 HSM 保护密钥的保管库订阅。

创建 keyvault 时,添加“sku”参数:

az keyvault create --name "ContosoKeyVaultHSM" --resource-group "ContosoResourceGroup" --___location "East Asia" --sku "Premium"

可以将受软件保护的密钥(如前面所示)和受 HSM 保护的密钥添加到此保管库。 若要创建受 HSM 保护的密钥,请将目标参数设置为“HSM”:

az keyvault key create --vault-name "ContosoKeyVaultHSM" --name "ContosoFirstHSMKey" --protection "hsm"

可以使用以下命令从计算机上的 .pem 文件导入密钥。 此命令将密钥导入 Key Vault 服务中的 HSM:

az keyvault key import --vault-name "ContosoKeyVaultHSM" --name "ContosoFirstHSMKey" --pem-file "/.softkey.pem" --protection "hsm" --pem-password "PaSSWORD"

下一个命令导入“自带密钥”(BYOK)包。 这样,便可以在本地 HSM 中生成密钥,并将其传输到 Key Vault 服务中的 HSM,而无需密钥离开 HSM 边界:

az keyvault key import --vault-name "ContosoKeyVaultHSM" --name "ContosoFirstHSMKey" --byok-file "./ITByok.byok" --protection "hsm"

有关如何生成此 BYOK 包的更详细说明,请参阅 如何将 HSM-Protected 密钥与 Azure Key Vault 配合使用

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

如果不再需要密钥保管库及其密钥或机密,可以使用以下命令删除密钥保管库 az keyvault delete

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"

后续步骤