教學課程:在 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" --enable-rbac-authorization
將祕密填入金鑰保存庫
讓我們建立一個名為 的祕密,其值為 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 身分識別指派權限
若要透過角色型存取控制 (RBAC) 將應用程式權限授與金鑰保存庫,請使用 Azure CLI 命令 az role assignment create 來指派角色。
az role assignment create --role "Key Vault Secrets User" --assignee "<app-id>" --scope "/subscriptions/<subscription-id>/resourceGroups/<resource-group-name>/providers/Microsoft.KeyVault/vaults/<your-unique-keyvault-name>"
使用實際值取代 <app-id>
、<subscription-id>
、<resource-group-name>
和 <your-unique-keyvault-name>
。 <app-id>
是您在 Microsoft Entra 中註冊之應用程式的應用程式 (用戶端) 識別碼。
登入 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.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