Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
开始使用 Azure 密钥保管库 Python 客户端库。 请按照以下步骤安装程序包并试用基本任务的示例代码。 通过使用密钥保管库存储加密密钥,可以避免在代码中存储此类密钥,从而提高应用的安全性。
API 参考文档 | Library 源代码 | Package(Python包索引)
先决条件
- Azure订阅 - 创建试用订阅。
- Python 3.7+
- Azure CLI
本快速入门假定你在 Linux 终端窗口中运行 Azure CLI 或 Azure PowerShell。
设置本地环境
本快速入门通过使用 Azure 标识库与 Azure CLI 或 Azure PowerShell,用于对用户进行身份验证,来连接 Azure 服务。 开发人员还可以使用Visual Studio或Visual Studio Code对调用进行身份验证。 有关详细信息,请参阅 使用Azure标识客户端库对客户端进行身份验证。
登录到 Azure
运行
login命令。az login如果 CLI 可以打开默认浏览器,它将执行此操作并加载Azure登录页。
否则,请在 https://login.partner.microsoftonline.cn/common/oauth2/deviceauth 处打开浏览器页,然后输入终端中显示的授权代码。
在浏览器中使用帐户凭据登录。
安装这些软件包
在终端或命令提示符下,创建一个合适的项目文件夹,然后按照 使用Python虚拟环境中所述创建和激活Python虚拟环境。
安装Microsoft Entra标识库:
pip install azure-identity安装密钥保管库密钥客户端库:
pip install azure-keyvault-keys
创建资源组和密钥库
使用
az group create命令以创建资源组:az group create --name "myResourceGroup" --location "ChinaEast"如果愿意,可以将“ChinaEast”更改为离你更近的位置。
使用
az keyvault create创建密钥保管库:az keyvault create --name "<vault-name>" --resource-group "myResourceGroup" --enable-rbac-authorization true --enable-purge-protection true将
<vault-name>替换为在所有Azure中唯一的名称。 通常使用个人或公司名称以及其他数字和标识符。
设置 KEY_VAULT_NAME 环境变量
脚本将使用分配给 KEY_VAULT_NAME 环境变量的值作为密钥保管库的名称。 因此,必须使用以下命令设置此值:
export KEY_VAULT_NAME=<vault-name>
授予对 Key Vault 的访问权限
若要通过 Role-Based 访问控制 (RBAC)获取密钥保管库的权限,请使用 Azure CLI 命令az 角色分配创建为“用户主体名称”(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 密钥保管库 密钥客户端库允许管理加密密钥。 以下代码示例演示如何创建客户端、设置密钥、检索密钥和删除密钥。
创建包含此代码的名为 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.cn"
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 Identity 客户端库 提供的 DefaultAzureCredential 类来实现与 Azure 服务的无密码连接。
DefaultAzureCredential 支持多种身份验证方法,并确定应在运行时使用哪种方法。 通过这种方法,你的应用可在不同环境(本地与生产)中使用不同的身份验证方法,而无需实现特定于环境的代码。
在本快速入门中,DefaultAzureCredential使用登录到Azure CLI的本地开发用户的凭据向密钥保管库进行身份验证。 将应用程序部署到Azure时,同一DefaultAzureCredential代码可以自动发现和使用分配给应用服务、虚拟机或其他服务的托管标识。 有关详细信息,请参阅托管标识概述。
在示例代码中,密钥保管库的名称使用 KVUri 变量的值进行扩展,格式为“https://<密钥保管库名称>.vault.azure.cn”。
credential = DefaultAzureCredential()
client = KeyClient(vault_url=KVUri, credential=credential)
保存密钥
获取密钥保管库的客户端对象后,可以使用 create_rsa_key 方法存储密钥:
rsa_key = client.create_rsa_key(keyName, size=2048)
还可以使用 create_key 或 create_ec_key。
调用 create 方法将生成对密钥保管库的 Azure REST API 的调用。
Azure处理请求时,它将使用提供给客户端的凭据对象对调用方标识(服务主体)进行身份验证。
检索密钥
若要从密钥保管库读取密钥,请使用 get_key 方法:
retrieved_key = client.get_key(keyName)
还可以验证是否已使用 Azure CLI 命令az keyvault 密钥显示或 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 验证密钥是否已删除。
删除密钥后,该密钥会在一段时间内保持已删除但可恢复状态。 如果再次运行该代码,请使用其他密钥名称。
清理资源
若要尝试使用 certificates 和 secrets,可以重复使用本文中创建的密钥保管库。
否则,当完成本文中创建的资源后,请使用以下命令删除资源组及其包含的所有资源:
az group delete --resource-group myResourceGroup