教學:在 Python 虛擬機中使用 Azure Key Vault

Azure Key Vault 幫助你保護金鑰、秘密和憑證,例如 API 金鑰和資料庫連線字串。

在本教學中,你將設定 Python 應用程式,以使用 Azure 資源的受控識別來讀取 Azure Key Vault 中的資訊。 您將瞭解如何:

  • 建立金鑰保存庫
  • 將秘密存放在 金鑰保存庫 中
  • 建立一個 Azure Linux 虛擬機器
  • 啟用虛擬機器的受控識別
  • 授予主控台應用程式讀取 金鑰保存庫 資料所需的權限
  • 從 金鑰保存庫 取回秘密

開始前,先讀 金鑰保存庫基本概念。

如果你沒有Azure訂閱,請建立一個free帳號。

先決條件

針對 Windows、Mac 和 Linux:

  • Git
  • Azure CLI 的最新版本。 執行 az --version 以檢查已安裝的版本。

登入 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 的虛擬機:

Linux Windows
Azure CLI Azure CLI
PowerShell PowerShell
Azure portal Azure portal

要使用 Azure CLI 建立 Linux 虛擬機,請使用 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 指令為虛擬機建立系統指派的管理身份:

az vm identity assign --name "myVM" --resource-group "<resource-group>"

請注意輸出中系統指派的身份:

{
  "systemAssignedIdentity": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "userAssignedIdentities": {}
}

對 VM 身分識別指派權限

要透過 Role-Based 存取控制(RBAC) 取得你的金鑰保險庫權限,請使用 Azure CLI 指令 az role assignment create 指派一個角色給你的「使用者主體名稱」(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)。

登入虛擬機

要登入虛擬機,請依照 Connect 中的指示登入運行 Linux 的 Azure 虛擬機,或是登入執行 Windows 的 Azure 虛擬機。

若要登入 Linux 虛擬機器,請使用 ssh 以及「建立虛擬機器」步驟中的 <public-ip-address>:

ssh azureuser@<public-ip-address>

在虛擬機上安裝 Python 函式庫

在虛擬機上,安裝範例腳本使用的兩個 Python 函式庫:azure-keyvault-secrets和 azure-identity。

在 Linux 虛擬機器上,使用 pip3 安裝它們:

pip3 install azure-keyvault-secrets 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.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!'

清理資源

當你不再需要它們時,刪除虛擬機和金鑰庫。 最快的方法是刪除它們所屬的資源群組:

az group delete -g "myResourceGroup"

後續步驟

Azure Key Vault REST API