教學課程:在 Python 中搭配使用 Azure Key Vault 與虛擬機器

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 login

建立資源群組和金鑰保存庫

本快速入門會使用預先建立的 Azure 金鑰保存庫。 您可以遵循 Azure CLI 快速入門Azure PowerShell 快速入門Azure 入口網站快速入門中的步驟來建立金鑰保存庫。

或者,您也可以直接執行下面的 Azure CLI 或 Azure PowerShell 命令。

重要

每個金鑰保存庫必須有唯一的名稱。 在下列範例中,將 <your-unique-keyvault-name> 取代為您的金鑰保存庫名稱。

az group create --name "myResourceGroup" -l "EastUS"

az keyvault create --name "<your-unique-keyvault-name>" -g "myResourceGroup"

將祕密填入金鑰保存庫

讓我們建立一個名為 的祕密,其值為 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 身分識別指派權限

現在,您可以執行下列命令來對金鑰保存庫指派先前所建立的身分識別權限:

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-secretsazure.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.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 '<your-unique-keyvault-name>' is: 'Success!'

清除資源

不再需要時,請刪除虛擬機器和金鑰保存庫。 您只要刪除其所屬的資源群組,就可以快速完成這項操作:

az group delete -g myResourceGroup

下一步

Azure Key Vault REST API