快速入門:適用於 Python 的 Azure Key Vault 憑證用戶端程式庫
開始使用適用於 Python 的 Azure Key Vault 憑證用戶端程式庫。 請遵循下列步驟來安裝套件,並試用基本工作的程式碼範例。 藉由使用 Key Vault 來儲存憑證,您可以避免將憑證儲存在您的程式碼中,如此會增加應用程式的安全性。
API 參考文件 | 程式庫原始程式碼 | 套件 (Python Package Index)
必要條件
- Azure 訂用帳戶 - 建立免費帳戶。
- Python 2.7+ 或 3.6+
- Azure CLI
本快速入門假設您是在 Linux 終端機視窗中執行 Azure CLI。
設定您的本機環境
本快速入門會使用 Azure 身分識別程式庫搭配 Azure CLI,向 Azure 服務驗證使用者。 開發人員也可以使用 Visual Studio 或 Visual Studio Code 來驗證其呼叫。如需詳細資訊,請參閱使用 Azure 身分識別用戶端程式庫驗證用戶端
登入 Azure
執行
login
命令。az login
如果 CLI 可以開啟預設瀏覽器,它會執行這項操作,並載入 Azure 登入頁面。
否則,請在 https://aka.ms/devicelogin 中開啟瀏覽器頁面,並輸入顯示在終端機中的授權碼。
請在瀏覽器中使用您的帳戶認證登入。
安裝套件
在終端機或命令提示字元中,建立適當的專案資料夾,然後建立並啟動 Python 虛擬環境,如使用 Python 虛擬環境中所述
安裝 Azure Active Directory 身分識別程式庫:
pip install azure.identity
安裝 Key Vault 憑證用戶端程式庫:
pip install azure-keyvault-certificates
建立資源群組和金鑰保存庫
請使用
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>
授與對金鑰保存庫的存取權
建立金鑰保存庫的存取原則,將憑證權限授與服務主體
az keyvault set-policy --name <your-unique-keyvault-name> --upn user@domain.com --certificate-permissions delete get list create
建立範例程式碼
適用於 Python 的 Azure Key Vault 憑證用戶端程式庫可讓您管理憑證。 下列程式碼範例示範如何建立用戶端、設定憑證、擷取憑證及刪除憑證。
建立名為 kv_certificates.py 的檔案,其中包含此程式碼。
import os
from azure.keyvault.certificates import CertificateClient, CertificatePolicy,CertificateContentType, WellKnownIssuerNames
from azure.identity import DefaultAzureCredential
keyVaultName = os.environ["KEY_VAULT_NAME"]
KVUri = "https://" + keyVaultName + ".vault.azure.net"
credential = DefaultAzureCredential()
client = CertificateClient(vault_url=KVUri, credential=credential)
certificateName = input("Input a name for your certificate > ")
print(f"Creating a certificate in {keyVaultName} called '{certificateName}' ...")
policy = CertificatePolicy.get_default()
poller = client.begin_create_certificate(certificate_name=certificateName, policy=policy)
certificate = poller.result()
print(" done.")
print(f"Retrieving your certificate from {keyVaultName}.")
retrieved_certificate = client.get_certificate(certificateName)
print(f"Certificate with name '{retrieved_certificate.name}' was found'.")
print(f"Deleting your certificate from {keyVaultName} ...")
poller = client.begin_delete_certificate(certificateName)
deleted_certificate = poller.result()
print(" done.")
執行程式碼
請確定上一節中的程式碼位於名為 kv_certificates.py 的檔案中。 使用下列命令來執行程式碼:
python kv_certificates.py
- 如果您遇到權限錯誤,請確定您已執行
az keyvault set-policy
命令。 - 重新執行金鑰名稱相同的程式碼可能會產生錯誤「(衝突) 憑證 <name> 目前處於已刪除但可復原的狀態。」請使用不同的金鑰名稱。
程式碼詳細資料
驗證並建立用戶端
在本快速入門中,已登入的使用者是用來向金鑰保存庫進行驗證,這是本機開發的慣用方法。 針對部署至 Azure 的應用程式,應將受控識別指派給 App Service 或虛擬機器。如需詳細資訊,請參閱受控識別概觀。
在以下範例中,金鑰保存庫的名稱會以 https://\<your-key-vault-name\>.vault.azure.net
格式,擴充至金鑰保存庫 URI。 這個範例會使用 'DefaultAzureCredential()' 類別,其允許在各種不同的環境中使用相同的程式碼,搭配不同的選項來提供身分識別。 如需詳細資訊,請參閱預設 Azure 認證驗證。
credential = DefaultAzureCredential()
client = CertificateClient(vault_url=KVUri, credential=credential)
儲存憑證
取得金鑰保存庫的用戶端物件之後,您可以使用 begin_create_certificate 方法來建立憑證:
policy = CertificatePolicy.get_default()
poller = client.begin_create_certificate(certificate_name=certificateName, policy=policy)
certificate = poller.result()
在這裡,憑證需要使用 CertificatePolicy.get_default 方法取得原則。
呼叫 begin_create_certificate
方法會針對金鑰保存庫產生 Azure REST API 的非同步呼叫。 非同步呼叫會傳回輪詢者物件。 若要等候作業的結果,請呼叫輪詢者的 result
方法。
處理要求時,Azure 會使用您提供給用戶端的認證物件,來驗證呼叫者的身分識別 (服務主體),
擷取憑證
若要從 Key Vault 讀取憑證,請使用 get_certificate 方法:
retrieved_certificate = client.get_certificate(certificateName)
您也可以使用 Azure CLI 命令 az keyvault certificate show 來確認憑證是否已完成設定。
刪除憑證
若要刪除憑證,請使用 begin_delete_certificate 方法:
poller = client.begin_delete_certificate(certificateName)
deleted_certificate = poller.result()
begin_delete_certificate
方法是非同步,並會傳回輪詢者物件。 呼叫輪詢器的 result
方法會等待其完成。
您可以使用 Azure CLI 命令 az keyvault certificate show 來確認是否已刪除憑證。
一旦刪除,憑證會保留為已刪除但可復原的狀態一段時間。 如果再次執行程式碼,請使用不同的憑證名稱。
清除資源
如果您想要實驗祕密和金鑰,可以重複使用在本文中建立的 Key Vault。
否則,當您完成本文中建立的資源時,請使用下列命令來刪除資源群組及其包含的所有資源:
az group delete --resource-group myResourceGroup