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

快速入门:适用于 Python 的 Azure Key Vault 客户端密钥库

适用于 Python 的 Azure Key Vault 客户端库入门。 请按照以下步骤安装程序包并试用基本任务的示例代码。 通过使用 Key Vault 存储加密密钥,可以避免在代码中存储此类密钥,从而提高应用程序的安全性。

API 参考文档 | 库源代码 | 包(Python 包索引)

先决条件

本快速入门假设在 Linux 终端窗口中运行 Azure CLIAzure PowerShell

设置本地环境

本快速入门结合使用 Azure 标识库和 Azure CLI 或 Azure PowerShell,向 Azure 服务证明用户身份。 开发人员还可以使用 Visual Studio 或 Visual Studio Code 来验证其调用。 有关详细信息,请参阅使用 Azure 标识客户端库对客户端进行身份验证

登录 Azure

  1. 运行 login 命令。

    az login
    

    如果 CLI 可以打开默认浏览器,它将这样做并加载 Azure 登录页。

    否则,请在 https://aka.ms/devicelogin 处打开浏览器页,然后输入终端中显示的授权代码。

  2. 在浏览器中使用帐户凭据登录。

安装包

  1. 在终端或命令提示符中,创建合适的项目文件夹,然后创建并激活 Python 虚拟环境,如使用 Python 虚拟环境中所述。

  2. 安装 Microsoft Entra 标识库:

    pip install azure-identity
    
  3. 安装 Key Vault 密钥客户端库:

    pip install azure-keyvault-keys
    

创建资源组和 Key Vault

  1. 使用 az group create 命令以创建资源组:

    az group create --name myResourceGroup --location eastus
    

    如果愿意,你可以将“eastus”更改为离你更近的位置。

  2. 使用 az keyvault create 创建密钥保管库:

    az keyvault create --name <your-unique-keyvault-name> --resource-group myResourceGroup
    

    <your-unique-keyvault-name> 替换为在整个 Azure 中均唯一的名称。 通常使用个人或公司名称以及其他数字和标识符。

设置 KEY_VAULT_NAME 环境变量

脚本将使用分配给 KEY_VAULT_NAME 环境变量的值作为密钥保管库的名称。 因此,必须使用以下命令设置此值:

export KEY_VAULT_NAME=<your-unique-keyvault-name>

授予对 Key Vault 的访问权限

若要通过基于角色的访问控制 (RBAC) 授予对密钥保管库的权限,请使用 Azure CLI 命令 az role assignment create 将角色分配给你的“用户主体名称”(UPN)。

az role assignment create --role "Key Vault Crypto Officer" --assignee "<upn>" --scope "/subscriptions/<subscription-id>/resourceGroups/<resource-group-name>/providers/Microsoft.KeyVault/vaults/<your-unique-keyvault-name>"

将 <upn>、<subscription-id>、<resource-group-name> 和 <your-unique-keyvault-name> 替换为你的实际值。 你的 UPN 通常采用电子邮件地址格式(例如 username@domain.com)。

创建示例代码

使用适用于 Python 的 Azure Key Vault 密钥客户端库,你可以管理加密密钥。 以下代码示例演示如何创建客户端、设置密钥、检索密钥和删除密钥。

创建包含此代码的名为 kv_keys.py 的文件。

import os
from azure.keyvault.keys import KeyClient
from azure.identity import DefaultAzureCredential

keyVaultName = os.environ["KEY_VAULT_NAME"]
KVUri = "https://" + keyVaultName + ".vault.azure.net"

credential = DefaultAzureCredential()
client = KeyClient(vault_url=KVUri, credential=credential)

keyName = input("Input a name for your key > ")

print(f"Creating a key in {keyVaultName} called '{keyName}' ...")

rsa_key = client.create_rsa_key(keyName, size=2048)

print(" done.")

print(f"Retrieving your key from {keyVaultName}.")

retrieved_key = client.get_key(keyName)

print(f"Key with name '{retrieved_key.name}' was found.")
print(f"Deleting your key from {keyVaultName} ...")

poller = client.begin_delete_key(keyName)
deleted_key = poller.result()

print(" done.")

运行代码

确保上一部分中的代码位于名为 kv_keys.py 的文件中。 然后,使用以下命令运行代码:

python kv_keys.py

重新运行具有相同密钥名称的代码可能会产生错误:“(冲突)密钥 <名称> 当前处于已删除但可恢复的状态。”请使用不同的密钥名称。

代码详细信息

进行身份验证并创建客户端

对大多数 Azure 服务的应用程序请求必须获得授权。 要在代码中实现与 Azure 服务的无密码连接,建议使用 Azure 标识客户端库提供的 DefaultAzureCredential 类。 DefaultAzureCredential 支持多种身份验证方法,并确定应在运行时使用哪种方法。 通过这种方法,你的应用可在不同环境(本地与生产)中使用不同的身份验证方法,而无需实现特定于环境的代码。

在本快速入门中,DefaultAzureCredential 使用登录到 Azure CLI 的本地开发用户的凭据对密钥保管库进行身份验证。 将应用程序部署到 Azure 时,相同的 DefaultAzureCredential 代码可以自动发现并使用分配给应用服务、虚拟机或其他服务的托管标识。 有关详细信息,请参阅托管标识概述

在示例代码中,密钥保管库的名称使用 KVUri 变量的值进行扩展,格式为“https://<密钥保管库名称>.vault.azure.net”。

credential = DefaultAzureCredential()
client = KeyClient(vault_url=KVUri, credential=credential)

保存密钥

获取密钥保管库的客户端对象后,可以使用 create_rsa_key 方法存储密钥:

rsa_key = client.create_rsa_key(keyName, size=2048)

还可以使用 create_keycreate_ec_key

调用 create 方法会生成对密钥保管库的 Azure REST API 的调用。

Azure 在处理请求时,会使用你提供给客户端的凭据对象,对调用方的标识(服务主体)进行身份验证。

检索密钥

若要读取 Key Vault 中的密钥,请使用 get_key 方法:

retrieved_key = client.get_key(keyName)

还可以使用 Azure CLI 命令 az keyvault key show 或 Azure PowerShell cmdlet Get-AzKeyVaultKey 来验证是否已设置了密钥。

删除密钥

若要删除密钥,请使用 begin_delete_key 方法:

poller = client.begin_delete_key(keyName)
deleted_key = poller.result()

begin_delete_key 方法是异步方法,将返回一个轮询器对象。 调用轮询器的 result 方法等待其完成。

可以使用 Azure CLI 命令 az keyvault key show 或 Azure PowerShell cmdlet Get-AzKeyVaultKey 来验证是否删除了密钥。

删除密钥后,该密钥会在一段时间内保持已删除但可恢复状态。 如果再次运行该代码,请使用其他密钥名称。

清理资源

如果还想进行证书机密相关试验,可以重复使用在本文中创建的 Key Vault。

否则,当完成本文中创建的资源后,请使用以下命令删除资源组及其包含的所有资源:

az group delete --resource-group myResourceGroup

后续步骤