快速入門:適用於 Python 的 Azure Key Vault 秘密用戶端程式庫
開始使用適用於 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
以 Azure 中的唯一名稱取代
<your-unique-keyvault-name>
。 您通常會使用個人或公司名稱,以及其他數字和識別碼。
設定 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
支援多個驗證方法,並在執行階段判斷應該使用哪個方法。 此方法可讓您的應用程式在不同的環境中 (本機或實際執行環境) 使用不同的驗證方法,而不需要實作環境特有的程式碼。
在本快速入門中,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