開始使用適用於 Python 的 Azure Key Vault 秘密用戶端程式庫。 請遵循下列步驟來安裝套件,並試用基本工作的程式碼範例。 藉由使用 Key Vault 來儲存祕密,您可以避免將祕密儲存在您的程式碼中,如此會增加應用程式的安全性。
API 參考文件 | 程式庫原始程式碼 | 套件 (Python Package Index)
必要條件
- Azure 訂用帳戶 - 建立免費帳戶。
- Python 3.7+。
- Azure CLI 或 Azure PowerShell。
本快速入門假設您是在 Linux 終端機視窗中執行 Azure CLI 或 Azure PowerShell。
設定您的本機環境
本快速入門會使用 Azure 身分識別程式庫搭配 Azure CLI 或 Azure PowerShell,向 Azure 服務驗證使用者。 開發人員也可以使用 Visual Studio 或 Visual Studio Code 來驗證其呼叫。如需詳細資訊,請參閱使用 Azure 身分識別用戶端程式庫驗證用戶端。
登入 Azure
執行
az login
命令。az login
如果此 CLI 可以開啟您的預設瀏覽器,它會開啟瀏覽器並載入 Azure 登入頁面。
否則,請在 https://aka.ms/devicelogin 中開啟瀏覽器頁面,並輸入顯示在終端機中的授權碼。
請在瀏覽器中使用您的帳戶認證登入。
安裝套件
在終端機或命令提示字元中,首先建立適當的專案資料夾,接著如使用 Python 虛擬環境中所述,建立並啟動 Python 虛擬環境。
安裝 Microsoft Entra 身分識別程式庫:
pip install azure-identity
安裝 Key Vault 祕密程式庫:
pip install azure-keyvault-secrets
建立資源群組和金鑰保存庫
使用
az group create
指令來建立資源群組:az group create --name myResourceGroup --location eastus
如果您想,您也可以將 "eastus" 變更為更接近您位置的地點。
使用
az keyvault create
建立金鑰保存庫:az keyvault create --name <your-unique-keyvault-name> --resource-group myResourceGroup
將
<your-unique-keyvault-name>
替換成 Azure 中唯一的名稱。 您通常會使用個人或公司名稱,以及其他數字和識別碼。
設定 KEY_VAULT_NAME 環境變數
我們的指令碼會使用指派給 KEY_VAULT_NAME
環境變數的值作為金鑰保存庫的名稱。 因此,您必須使用下列命令來設定此值:
export KEY_VAULT_NAME=<your-unique-keyvault-name>
授與對金鑰保存庫的存取權
若要透過角色型存取控制 (RBAC) 取得金鑰保存庫的權限,請使用 Azure CLI 命令 az role assignment create 將角色指派給「使用者主體名稱」(UPN)。
az role assignment create --role "Key Vault Secrets Officer" --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)。
建立範例程式碼
適用於 Python 的 Azure Key Vault 秘密用戶端程式庫可讓您管理秘密。 下列程式碼範例會示範如何建立用戶端、設定祕密、擷取祕密,以及刪除秘密。
建立名為kv_secrets.py的檔案,其中包含此程式碼。
import os
from azure.keyvault.secrets import SecretClient
from azure.identity import DefaultAzureCredential
keyVaultName = os.environ["KEY_VAULT_NAME"]
KVUri = f"https://{keyVaultName}.vault.azure.net"
credential = DefaultAzureCredential()
client = SecretClient(vault_url=KVUri, credential=credential)
secretName = input("Input a name for your secret > ")
secretValue = input("Input a value for your secret > ")
print(f"Creating a secret in {keyVaultName} called '{secretName}' with the value '{secretValue}' ...")
client.set_secret(secretName, secretValue)
print(" done.")
print(f"Retrieving your secret from {keyVaultName}.")
retrieved_secret = client.get_secret(secretName)
print(f"Your secret is '{retrieved_secret.value}'.")
print(f"Deleting your secret from {keyVaultName} ...")
poller = client.begin_delete_secret(secretName)
deleted_secret = poller.result()
print(" done.")
執行程式碼
請確保上一節的程式碼位於名為kv_secrets.py 的檔案中。 使用下列命令來執行程式碼:
python kv_secrets.py
- 如果您遇到權限錯誤,請確定您已執行
az keyvault set-policy
或Set-AzKeyVaultAccessPolicy
命令。 - 以相同的祕密名稱重新執行程式碼可能會產生錯誤「(衝突) 祕密 <name> 目前處於已刪除但可復原的狀態。」請使用其他祕密名稱。
程式碼詳細資料
驗證並建立用戶端
對大部分 Azure 服務的應用程式要求都必須獲得授權。 在程式碼中實作對 Azure 服務的無密碼連線時,建議使用 Azure.Identity 用戶端程式庫提供的 DefaultAzureCredential 類別。
在本快速入門中,DefaultAzureCredential
使用已登入 Azure CLI 之本機開發使用者的認證向金鑰保存庫進行驗證。 將應用程式部署至 Azure 時,相同的 DefaultAzureCredential
程式碼可以自動發現並使用指派給 App Service、虛擬機器或其他服務的受控識別。 如需詳細資訊,請參閱受控識別概觀。
在範例程式碼中,金鑰保存庫的名稱會使用 KVUri
變數的值展開,其格式為 "https://<your-key-vault-name>.vault.azure.net"。
credential = DefaultAzureCredential()
client = SecretClient(vault_url=KVUri, credential=credential)
儲存秘密
取得金鑰保存庫的用戶端物件之後,您可以使用 set_secret 方法來儲存祕密:
client.set_secret(secretName, secretValue)
呼叫 set_secret
會對於金鑰保存庫產生 Azure REST API 的呼叫。
在處理要求時,Azure 會使用您提供給用戶端的認證物件來驗證呼叫者的身分識別 (服務主體)。
擷取祕密
若要從 Key Vault 讀取秘密,請使用 get_secret 方法:
retrieved_secret = client.get_secret(secretName)
祕密值包含在 retrieved_secret.value
中。
您也可以使用 Azure CLI 命令 az keyvault secret show 或 Azure PowerShell cmdlet Get-AzKeyVaultSecret 來擷取祕密。
刪除祕密
若要刪除祕密,請使用 begin_delete_secret 方法:
poller = client.begin_delete_secret(secretName)
deleted_secret = poller.result()
begin_delete_secret
方法是非同步,並會傳回輪詢者物件。 呼叫輪詢器的 result
方法會等待其完成。
您也可以使用 Azure CLI 命令 az keyvault secret show 或 Azure PowerShell cmdlet Get-AzKeyVaultSecret 來驗證祕密已移除。
一旦刪除,祕密會保留為已刪除但可復原的狀態一段時間。 如果再次執行程式碼,請使用不同的祕密名稱。
清除資源
如果您也想要實驗憑證和金鑰,可以重複使用在本文中建立的 Key Vault。
否則,當您完成本文中建立的資源時,請使用下列命令來刪除資源群組及其包含的所有資源:
az group delete --resource-group myResourceGroup