Compartir a través de

快速入门:Azure 密钥保管库用于Python的机密客户端库

开始使用适用于Python的Azure 密钥保管库机密客户端库。 请按照以下步骤安装包并试用基本任务的示例代码。 通过使用密钥保管库来存储机密,可以避免在代码中存储机密,从而提高应用的安全性。

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

先决条件

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

设置本地环境

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

登录到 Azure

  1. 运行 az login 命令。

    az login
    

    如果 CLI 可以打开默认浏览器,它将执行此操作并加载Azure登录页。

    否则,请在 https://login.partner.microsoftonline.cn/common/oauth2/deviceauth 处打开浏览器页,然后输入终端中显示的授权代码。

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

安装这些包

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

  2. 安装Microsoft Entra标识库:

    pip install azure-identity
    
  3. 安装密钥保管库机密库:

    pip install azure-keyvault-secrets
    

创建资源组和密钥保管库

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

    az group create --name "myResourceGroup" --location "ChinaEast"
    

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

  2. 使用 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 环境变量的值作为key vault的名称。 因此,必须使用以下命令设置此值:

export KEY_VAULT_NAME=<vault-name>

向您的密钥库授予访问权限

若要通过 Role-Based 访问控制 (RBAC)获取密钥保管库的权限,请使用 Azure CLI 命令az 角色分配创建为“用户主体名称”(UPN)分配角色。

az role assignment create --role "Key Vault Secrets 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_secrets.py 的文件。

import os
from azure.keyvault.secrets import SecretClient
from azure.identity import DefaultAzureCredential

keyVaultName = os.environ["KEY_VAULT_NAME"]
KVUri = f"https://{keyVaultName}.vault.azure.cn"

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

secretName = input("Input a name for your secret > ")
secretValue = input("Input a value for your secret > ")

print(f"Creating a secret in {keyVaultName} called '{secretName}' with the value '{secretValue}' ...")

client.set_secret(secretName, secretValue)

print(" done.")

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

retrieved_secret = client.get_secret(secretName)

print(f"Your secret is '{retrieved_secret.value}'.")
print(f"Deleting your secret from {keyVaultName} ...")

poller = client.begin_delete_secret(secretName)
deleted_secret = poller.result()

print(" done.")

运行代码

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

python kv_secrets.py
  • 如果遇到权限错误,请确保已分配适当的Azure RBAC 角色。 请参阅 授予密钥保管库访问权限 步骤。
  • 重新运行具有相同机密名称的代码可能会产生错误:“(冲突)机密 <name> 当前处于已删除但可恢复的状态。”请使用其他机密名称。

代码详细信息

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

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

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

在示例代码中,密钥保管库的名称使用KVUri变量值展开,格式为“https://<your-key-vault-name>.vault.azure.cn”。

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

保存机密

获取key vault的客户端对象后,可以使用 set_secret 方法存储机密:

client.set_secret(secretName, secretValue)

调用 set_secret将生成对密钥保管库的 Azure REST API 的调用。

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

获取秘密

若要从密钥保管库读取机密,请使用 get_secret 方法:

retrieved_secret = client.get_secret(secretName)

机密值包含在 retrieved_secret.value 中。

还可以使用 Azure CLI 命令 az keyvault secret show 或 Azure PowerShell cmdlet Get-AzKeyVaultSecret检索机密。

删除机密

若要删除机密,请使用 begin_delete_secret 方法:

poller = client.begin_delete_secret(secretName)
deleted_secret = poller.result()

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

可以使用 Azure CLI 命令 az keyvault secret show 或 Azure PowerShell cmdlet Get-AzKeyVaultSecret 验证机密是否已删除。

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

清理资源

若要尝试使用 certificateskeys,可以重复使用本文中创建的密钥保管库。

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

az group delete --resource-group myResourceGroup

后续步骤