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,请参阅 Install Azure CLI 2.0。
登录到Azure
若要使用Azure CLI登录到Azure,请输入:
az login
创建资源组和密钥库
本快速入门使用预先创建的Azure密钥保管库。 可以按照以下快速入门中的步骤创建密钥保管库:
或者,可以运行这些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 connection string或任何其他信息,需要确保应用程序的安全和可用。
若要将机密添加到新创建的密钥保管库,请使用以下命令:
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 分配标识
使用 Azure CLI az vm identity assign 命令为虚拟机创建系统分配的标识:
az vm identity assign --name "myVM" --resource-group "<resource-group>"
记下以下代码中显示的系统分配的标识。 以上命令的输出为:
{
"systemAssignedIdentity": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"userAssignedIdentities": {}
}
为 VM 标识分配权限
若要通过 Role-Based Access Control (RBAC)获取密钥保管库的权限,请使用 Azure CLI 命令 az role assignment create 将角色分配给“用户主体名称”(UPN)。
az role assignment create --role "Key Vault Secrets User" --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)。
登录 VM
若要登录到虚拟机,请按照
若要登录到 Linux VM,可以在<public-ip-address>”步骤中将 ssh 命令与给定项配合使用:
ssh azureuser@<public-ip-address>
在 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文件。 编辑文件以包含以下代码,将<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.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 '<vault-name>' is: 'Success!'
清理资源
当不再需要它们时,请删除虚拟机和你的密钥保管库。 可通过删除它们所属的资源组快速完成此操作:
az group delete -g "myResourceGroup"