Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
使用适用于 Python 的 Azure 密钥保管库机密客户端库入门。 请按照以下步骤安装包并试用基本任务的示例代码。 通过使用Key Vault来存储机密,可以避免在代码中存储机密,从而提高应用的安全性。
API 参考文档 | Library 源代码 | Package (Python 包索引)
先决条件
- Azure订阅 - 创建试用订阅。
- Python 3.7+。
- Azure CLI 或 Azure PowerShell。
本快速入门假定你在 Linux 终端窗口中运行 Azure CLI 或 Azure PowerShell。
设置本地环境
本快速入门使用 Azure 身份验证库以及 Azure CLI 或 Azure PowerShell,来对用户进行身份验证,从而访问 Azure 服务。 开发人员还可以使用 Visual Studio 或 Visual Studio Code 对调用进行身份验证,有关详细信息,请参阅 使用Azure标识客户端库对客户端进行身份验证。
登录到 Azure
运行
az login命令。az login如果 CLI 可以打开默认浏览器,它将执行此作并加载Azure登录页。
否则,请在 https://login.partner.microsoftonline.cn/common/oauth2/deviceauth 处打开浏览器页,然后输入终端中显示的授权代码。
在浏览器中使用帐户凭据登录。
安装这些包
在终端或命令提示符中,创建合适的project文件夹,然后按照 使用 Python 虚拟环境中所述创建和激活 Python 虚拟环境。
安装 Microsoft Entra 标识库:
pip install azure-identity安装Key Vault机密库:
pip install azure-keyvault-secrets
创建资源组和密钥保管库
使用
az group create命令以创建资源组:az group create --name myResourceGroup --location chinaeast如果愿意,你可以将“chinaeast”更改为离你更近的位置。
使用
az keyvault create创建密钥保管库:az keyvault create --name <your-unique-keyvault-name> --resource-group myResourceGroup --enable-rbac-authorization true --enable-purge-protection true将
<your-unique-keyvault-name>替换为在所有Azure中唯一的名称。 通常使用个人或公司名称以及其他数字和标识符。
设置 KEY_VAULT_NAME 环境变量
脚本将使用分配给 KEY_VAULT_NAME 环境变量的值作为key vault的名称。 因此,必须使用以下命令设置此值:
export KEY_VAULT_NAME=<your-unique-keyvault-name>
向您的密钥库授予访问权限
若要通过 Role-Based Access Control (RBAC)获取key vault的权限,请使用 Azure CLI 命令 az role assignment create 将角色分配给“用户主体名称”(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 Key Vault 机密客户端库可以管理机密。 以下代码示例演示如何创建客户端以及设置、检索和删除机密。
创建包含此代码的名为 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代码可以自动发现和使用分配给App Service、虚拟机或其他服务的托管标识。 有关详细信息,请参阅 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处理请求时,它将使用提供给客户端的凭据对象对调用方标识(服务主体)进行身份验证。
获取秘密
若要从Key Vault读取机密,请使用 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 验证机密是否已删除。
删除机密后,该机密会在一段时间内保持已删除但可恢复状态。 如果再次运行该代码,请使用其他机密名称。
清理资源
若要尝试使用 certificates 和 keys,可以重复使用本文中创建的Key Vault。
否则,当完成本文中创建的资源后,请使用以下命令删除资源组及其包含的所有资源:
az group delete --resource-group myResourceGroup