Compartir a través de

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

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

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

先决条件

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

设置本地环境

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

登录到 Azure

  1. 运行 login 命令。

    az login
    

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

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

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

安装这些包

  1. 在终端或命令提示符下,创建合适的项目文件夹,然后根据 Python使用虚拟环境

  2. 安装Microsoft Entra标识库:

    pip install azure-identity
    
  3. 安装密钥保管库证书客户端库:

    pip install azure-keyvault-certificates
    

创建资源组和密钥保管库

  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 Certificates Officer" --assignee "<upn>" --scope "/subscriptions/<subscription-id>/resourceGroups/<resource-group>/providers/Microsoft.KeyVault/vaults/<vault-name>"

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

创建示例代码

Python的 Azure 密钥保管库 证书客户端库允许管理证书。 以下代码示例演示了如何创建客户端、设置证书、检索证书和删除证书。

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

import os
from azure.keyvault.certificates import CertificateClient, CertificatePolicy
from azure.identity import DefaultAzureCredential

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

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

certificateName = input("Input a name for your certificate > ")

print(f"Creating a certificate in {keyVaultName} called '{certificateName}' ...")

policy = CertificatePolicy.get_default()
poller = client.begin_create_certificate(certificate_name=certificateName, policy=policy)
certificate = poller.result()

print(" done.")

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

retrieved_certificate = client.get_certificate(certificateName)

print(f"Certificate with name '{retrieved_certificate.name}' was found'.")
print(f"Deleting your certificate from {keyVaultName} ...")

poller = client.begin_delete_certificate(certificateName)
deleted_certificate = poller.result()

print(" done.")

运行代码

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

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

代码详细信息

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

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

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

在示例代码中,密钥保管库的名称将扩展为密钥保管库URI,格式为https://<vault-name>.vault.azure.cn

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

保存证书

获取key vault的客户端对象后,可以使用 begin_create_certificate 方法创建证书:

policy = CertificatePolicy.get_default()
poller = client.begin_create_certificate(certificate_name=certificateName, policy=policy)
certificate = poller.result()

此处,证书需要使用 CertificatePolicy.get_default 方法获取的策略。

调用 begin_create_certificate 方法将生成对密钥保管库的 Azure REST API 的异步调用。 异步调用会返回一个轮询器对象。 若要等待操作的结果,请调用轮询器的 result 方法。

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

检索证书

若要从密钥保管库读取证书,请使用 get_certificate 方法:

retrieved_certificate = client.get_certificate(certificateName)

还可以使用 Azure CLI 命令 az keyvault certificate show 或 Azure PowerShell cmdlet Get-AzKeyVaultCertificate 验证证书是否已设置。

删除证书

若要删除证书,请使用 begin_delete_certificate 方法:

poller = client.begin_delete_certificate(certificateName)
deleted_certificate = poller.result()

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

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

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

清理资源

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

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

az group delete --resource-group "myResourceGroup"

后续步骤