教程:将 Azure Key Vault 与通过 Python 编写的虚拟机配合使用
Azure Key Vault 可帮助你保护密钥、机密和证书,例如 API 密钥和数据库连接字符串。
在本教程中,会设置 Python 应用程序以使用 Azure 资源的托管标识从 Azure Key Vault 读取信息。 你将学习如何执行以下操作:
- 创建密钥保管库
- 在 Key Vault 中存储机密
- 创建一个 Azure Linux 虚拟机
- 为虚拟机启用托管标识
- 授予所需的权限,让控制台应用程序从 Key Vault 读取数据
- 从 Key Vault 检索机密
在开始之前,请阅读 Key Vault 的基本概念。
如果没有 Azure 订阅,请创建一个试用版版订阅。
先决条件
对于 Windows、Mac 和 Linux:
- Git
- 本教程要求在本地运行 Azure CLI。 必须安装 Azure CLI 2.0.4 或更高版本。 运行
az --version
即可查找版本。 如果需要安装或升级 CLI,请参阅安装 Azure CLI 2.0。
登录 Azure
若要使用 Azure CLI 登录到 Azure,请输入:
az cloud set -n AzureChinaCloud
az login
# az cloud set -n AzureCloud //means return to Public Azure.
创建资源组和 Key Vault
本快速入门使用预先创建的 Azure 密钥保管库。 可以遵循 Azure CLI 快速入门、Azure PowerShell 快速入门或 Azure 门户快速入门中的步骤创建 Key Vault。
或者,也可运行这些 Azure CLI 或 Azure PowerShell 命令。
重要
每个密钥保管库必须具有唯一的名称。 在以下示例中,将 <your-unique-keyvault-name> 替换为密钥保管库的名称。
az group create --name "myResourceGroup" -l "ChinaEast"
az keyvault create --name "<your-unique-keyvault-name>" -g "myResourceGroup" --enable-rbac-authorization
使用机密填充密钥保管库
让我们创建一个名为 mySecret 的机密,其值为 Success!。 机密可以是密码、SQL 连接字符串,或者需要安全保存的、可供应用程序使用的其他任何信息。
若要将机密添加到新创建的密钥保管库,请使用以下命令:
az keyvault secret set --vault-name "<your-unique-keyvault-name>" --name "mySecret" --value "Success!"
创建虚拟机
使用以下方法之一创建名为 myVM 的 VM:
Linux | Windows |
---|---|
Azure CLI | Azure CLI |
PowerShell | PowerShell |
Azure 门户 | Azure 门户 |
若要使用 Azure CLI 创建 Linux VM,请使用 az vm create 命令。 以下示例添加一个名为 azureuser 的用户帐户。 --generate-ssh-keys
参数用来自动生成一个 SSH 密钥,并将其放置在默认密钥位置 ( ~/.ssh) 中。
az vm create \
--resource-group myResourceGroup \
--name myVM \
--image Ubuntu2204 \
--admin-username azureuser \
--generate-ssh-keys
请记录输出中 publicIpAddress
的值。
为 VM 分配标识
使用 Azure CLI az vm identity assign 命令为虚拟机创建系统分配的标识:
az vm identity assign --name "myVM" --resource-group "myResourceGroup"
记下以下代码中显示的系统分配的标识。 以上命令的输出为:
{
"systemAssignedIdentity": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"userAssignedIdentities": {}
}
为 VM 标识分配权限
现在可以运行以下命令,将前面创建的标识权限分配到 Key Vault:
az keyvault set-policy --name "<your-unique-keyvault-name>" --object-id "<systemAssignedIdentity>" --secret-permissions get list
登录 VM
若要登录到虚拟机,请按照连接并登录到运行 Linux 的 Azure 虚拟机或连接并登录到运行 Windows 的 Azure 虚拟机中的说明操作。
若要登录到 Linux VM,可以将 ssh 命令与在创建虚拟机步骤中提供的 <publicIpAddress> 配合使用:
ssh azureuser@<PublicIpAddress>
在 VM 上安装 Python 库
在虚拟机上,安装将在 Python 脚本中使用的两个 Python 库:azure-keyvault-secrets
和 azure.identity
。
例如在 Linux VM 上,可以使用 pip3
安装这些库:
pip3 install azure-keyvault-secrets
pip3 install azure.identity
创建并编辑示例 Python 脚本
在虚拟机上,创建名为 sample.py 的 Python 文件。 编辑文件以包含以下代码,将 <your-unique-keyvault-name> 替换为密钥保管库的名称:
from azure.keyvault.secrets import SecretClient
from azure.identity import DefaultAzureCredential
key_vault_name = "<your-unique-keyvault-name>"
key_vault_uri = f"https://{key_vault_name}.vault.azure.cn"
secret_name = "mySecret"
credential = DefaultAzureCredential()
client = SecretClient(vault_url=key_vault_uri, credential=credential)
retrieved_secret = client.get_secret(secret_name)
print(f"The value of secret '{secret_name}' in '{key_vault_name}' is: '{retrieved_secret.value}'")
运行示例 Python 应用
最后,运行 sample.py。 如果一切正常,应返回机密值:
python3 sample.py
The value of secret 'mySecret' in '<your-unique-keyvault-name>' is: 'Success!'
清理资源
不再需要本教程中创建的虚拟机和 Key Vault 时,请将其删除。 可通过删除它们所属的资源组快速完成此操作:
az group delete -g myResourceGroup