開始使用適用於 Python 的 Azure Key Vault 用戶端程式庫。 依照下列步驟安裝套件,並嘗試基本工作的範例程式碼。 使用 Key Vault 來儲存加密金鑰,可避免在程式碼中儲存這類金鑰,進而提升應用程式的安全性。
API 參考文件 | 程式庫原始程式碼 | 套件 (Python Package Index)
先決條件
- Azure 訂用帳戶 - 建立免費帳戶。
- Python 3.7+
- Azure CLI
此快速入門假設您在 Linux 終端機視窗中執行 Azure CLI 或 Azure PowerShell。
設定本機環境
此快速入門使用 Azure Identity 程式庫搭配 Azure CLI 或 Azure PowerShell,向 Azure 服務驗證使用者。 開發人員也可以使用 Visual Studio 或 Visual Studio Code 來驗證其呼叫。 如需詳細資訊,請參閱使用 Azure 身分識別用戶端程式庫驗證用戶端。
登入 Azure
執行
login命令。az login如果 CLI 可以開啟您的預設瀏覽器,系統會這麼做並載入 Azure 登入頁面。
否則,請在瀏覽器中開啟 https://aka.ms/devicelogin,並輸入終端機中顯示的授權碼。
請在瀏覽器中使用您的帳戶認證登入。
安裝套件
在終端機或命令提示字元中,建立合適的專案資料夾,然後依照使用 Python 虛擬環境中的說明建立並啟用 Python 虛擬環境。
安裝 Microsoft Entra 識別身分程式庫:
pip install azure-identity安裝 Key Vault 金鑰用戶端程式庫:
pip install azure-keyvault-keys
建立資源群組和金鑰保存庫
請使用
az group create命令以建立資源群組:az group create --name myResourceGroup --location eastus如果您願意,可以將「eastus」變更為較接近您的位置。
使用
az keyvault create建立 Key Vault:az keyvault create --name <your-unique-keyvault-name> --resource-group myResourceGroup --enable-rbac-authorization true --enable-purge-protection true以 Azure 中的唯一名稱取代
<your-unique-keyvault-name>。 您通常會使用個人或公司名稱,以及其他數字和識別碼。
設定 KEY_VAULT_NAME 環境變數
指令碼會使用指派給 KEY_VAULT_NAME 環境變數的值作為 Key Vault 名稱。 因此,您必須使用下列命令設定此值:
export KEY_VAULT_NAME=<your-unique-keyvault-name>
授與對金鑰保存庫的存取權
若要透過角色型存取控制 (RBAC) 取得 Key Vault 的權限,請使用 Azure CLI 命令 az role assignment create,將角色指派給您的「使用者主體名稱」(UPN)。
az role assignment create --role "Key Vault Crypto 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_keys.py 的檔案,並在其中包含此程式碼。
import os
from azure.keyvault.keys import KeyClient
from azure.identity import DefaultAzureCredential
keyVaultName = os.environ["KEY_VAULT_NAME"]
KVUri = "https://" + keyVaultName + ".vault.azure.net"
credential = DefaultAzureCredential()
client = KeyClient(vault_url=KVUri, credential=credential)
keyName = input("Input a name for your key > ")
print(f"Creating a key in {keyVaultName} called '{keyName}' ...")
rsa_key = client.create_rsa_key(keyName, size=2048)
print(" done.")
print(f"Retrieving your key from {keyVaultName}.")
retrieved_key = client.get_key(keyName)
print(f"Key with name '{retrieved_key.name}' was found.")
print(f"Deleting your key from {keyVaultName} ...")
poller = client.begin_delete_key(keyName)
deleted_key = poller.result()
print(" done.")
執行程式碼
請確認上一節中的程式碼位於名為 kv_keys.py 的檔案中。 接著,使用下列命令執行程式碼:
python kv_keys.py
使用相同的金鑰名稱重新執行程式碼,可能會產生錯誤:「(衝突) 金鑰<名稱>目前處於已刪除但可復原的狀態。」請使用不同的金鑰名稱。
程式碼詳細資料
驗證並建立用戶端
應用程式對大多數 Azure 服務的要求都必須經過授權。
Azure Identity 用戶端程式庫所提供的 DefaultAzureCredential 類別,是在程式碼中實作對 Azure 服務進行無密碼連線的建議方式。
DefaultAzureCredential 支援多種驗證方法,並在執行階段判斷應使用哪一種方法。 此方法可讓您的應用程式在不同的環境中 (本機或實際執行環境) 使用不同的驗證方法,而不需要實作環境特有的程式碼。
在此快速入門中,DefaultAzureCredential 會使用登入 Azure CLI 的本機開發使用者認證,向 Key Vault 進行驗證。 當應用程式部署至 Azure 時,相同的 DefaultAzureCredential 程式碼可自動探索並使用指派給 App Service、虛擬機器或其他服務的受控識別。 如需詳細資訊,請參閱受控識別概觀。
在範例程式碼中,Key Vault 的名稱會使用 KVUri 變數的值展開,格式為:「https://<your-key-vault-name>.vault.azure.net」。
credential = DefaultAzureCredential()
client = KeyClient(vault_url=KVUri, credential=credential)
儲存金鑰
取得 Key Vault 的用戶端物件後,您可以使用 create_rsa_key 方法來儲存金鑰:
rsa_key = client.create_rsa_key(keyName, size=2048)
您也可以使用 create_key 或 create_ec_key。
呼叫 create 方法會產生對 Key Vault 的 Azure REST API 呼叫。
當 Azure 處理要求時,會使用您提供給用戶端的認證物件來驗證呼叫端身分 (服務主體)。
擷取金鑰
若要從 Key Vault 讀取金鑰,請使用 get_key 方法:
retrieved_key = client.get_key(keyName)
您也可以使用 Azure CLI 命令 az keyvault key show 或 Azure PowerShell Cmdlet Get-AzKeyVaultKey 來確認已設定金鑰。
刪除金鑰
若要刪除金鑰,請使用 begin_delete_key 方法:
poller = client.begin_delete_key(keyName)
deleted_key = poller.result()
begin_delete_key 方法為非同步,並會傳回輪詢器物件。 呼叫輪詢器的 result 方法會等待其完成。
您可以使用 Azure CLI 命令 az keyvault key show 或 Azure PowerShell Cmdlet Get-AzKeyVaultKey 來確認金鑰已刪除。
刪除後,金鑰會在一段時間內保持已刪除但可復原的狀態。 如果您再次執行程式碼,請使用不同的金鑰名稱。
清除資源
如果您也想嘗試憑證與祕密,可以重複使用本文中建立的 Key Vault。
否則,當您完成本文中建立的資源後,請使用下列命令刪除資源群組及其包含的所有資源:
az group delete --resource-group myResourceGroup