你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
Azure 密钥保管库有助于保护密钥、机密和证书,例如 API 密钥和数据库连接字符串。
在本教程中,你将设置一个Python应用程序,以便使用Azure资源的托管标识从Azure 密钥保管库读取信息。 你将学会如何:
- 创建密钥保管库
- 将机密存储在密钥保管库
- 创建 Azure Linux 虚拟机
- 为虚拟机启用托管标识
- 授予控制台应用程序从密钥保管库读取数据所需的权限
- 从密钥保管库检索机密
在开始之前,请阅读 密钥保管库 基本概念。
如果没有Azure订阅,请创建一个 free 帐户。
先决条件
对于 Windows、Mac 和 Linux:
登录到 Azure
使用Azure CLI登录到Azure:
az login
创建资源组和密钥保管库
本快速入门使用预先创建的Azure密钥保管库。 可以按照以下快速入门中的步骤创建密钥保管库:
或者,可以运行这些Azure CLI或Azure PowerShell命令。
重要
每个密钥保管库必须具有唯一的名称。 在以下示例中,将 <vault-name> 替换为您的密钥保管库的名称。
az group create --name "myResourceGroup" -l "EastUS"
az keyvault create --name "<vault-name>" -g "myResourceGroup" --enable-rbac-authorization true
使用机密填充密钥保管库
让我们创建一个名为 mySecret 的机密,其值为 Success!。 机密可能是密码、SQL连接字符串或任何其他信息,您需要确保这些内容对应用程序既安全又可用。
若要将机密添加到新创建的密钥保管库,请使用以下命令:
az keyvault secret set --vault-name "<vault-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 <resource-group> \
--name myVM \
--image Ubuntu2204 \
--admin-username azureuser \
--generate-ssh-keys
请记录输出中 publicIpAddress 的值。
为 VM 分配标识
使用 az vm identity assign 命令为 VM 创建系统分配的托管标识:
az vm identity assign --name "myVM" --resource-group "<resource-group>"
请注意输出中的系统分配标识:
{
"systemAssignedIdentity": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"userAssignedIdentities": {}
}
为 VM 标识分配权限
若要通过 Role-Based 访问控制 (RBAC)获取密钥保管库的权限,请使用 Azure CLI 命令az 角色分配创建为“用户主体名称”(UPN)分配角色。
az role assignment create --role "Key Vault Secrets User" --assignee "<upn>" --scope "/subscriptions/<subscription-id>/resourceGroups/myResourceGroup/providers/Microsoft.KeyVault/vaults/<vault-name>"
替换<upn>、<subscription-id>和<vault-name>为实际值。 如果使用了其他资源组名称,请替换“myResourceGroup”。 你的 UPN 通常采用电子邮件地址格式(例如 username@domain.com)。
登录到 VM
若要登录到虚拟机,请按照 连接并登录到运行 Linux 的 Azure 虚拟机 或 连接并登录到运行 Windows 的 Azure 虚拟机中的说明操作。
若要登录 Linux VM,请使用 创建虚拟机 步骤中的 <public-ip-address> 和 ssh:
ssh azureuser@<public-ip-address>
在 VM 上安装Python库
在 VM 上,安装示例脚本使用的两个Python库:azure-keyvault-secrets和azure-identity。
在 Linux VM 上,使用 pip3 安装它们:
pip3 install azure-keyvault-secrets azure-identity
创建和编辑示例Python脚本
在 VM 上,创建一个名为sample.pyPython文件。 将以下代码粘贴到文件中,用你的密钥保管库名称替换 <vault-name>:
from azure.keyvault.secrets import SecretClient
from azure.identity import DefaultAzureCredential
key_vault_name = "<vault-name>"
key_vault_uri = f"https://{key_vault_name}.vault.azure.net"
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 '<vault-name>' is: 'Success!'
清理资源
不再需要它们时,请删除 VM 和密钥保管库。 最快的方法是删除它们所属的资源组:
az group delete -g "myResourceGroup"