快速入門:適用於 Python 的 Azure Key Vault 憑證用戶端程式庫

開始使用適用於 Python 的 Azure Key Vault 憑證用戶端程式庫。 請遵循下列步驟來安裝套件,並試用基本工作的程式碼範例。 藉由使用 Key Vault 來儲存憑證,您可以避免將憑證儲存在您的程式碼中,如此會增加應用程式的安全性。

API 參考文件 | 程式庫原始程式碼 | 套件 (Python Package Index)

必要條件

本快速入門假設您是在 Linux 終端機視窗中執行 Azure CLIAzure PowerShell

設定您的本機環境

本快速入門使用 Azure 身分識別程式庫搭配 Azure CLI 或 Azure PowerShell,向 Azure 服務驗證使用者。 開發人員也可以使用 Visual Studio 或 Visual Studio Code 來驗證其呼叫。 如需詳細資訊,請參閱使用 Azure 身分識別用戶端程式庫驗證用戶端

登入 Azure

  1. 執行 login 命令。

    az login
    

    如果此 CLI 可以開啟您的預設瀏覽器,它會開啟瀏覽器並載入 Azure 登入頁面。

    否則,請在 https://aka.ms/devicelogin 中開啟瀏覽器頁面,並輸入顯示在您的終端機中的授權碼。

  2. 請在瀏覽器中使用您的帳戶認證登入。

安裝套件

  1. 在終端機或命令提示字元中,建立適當的專案資料夾,然後建立並啟動 Python 虛擬環境,如使用 Python 虛擬環境中所述

  2. 安裝 Microsoft Entra 身分識別程式庫:

    pip install azure.identity
    
  3. 安裝 Key Vault 憑證用戶端程式庫:

    pip install azure-keyvault-certificates
    

建立資源群組和金鑰保存庫

  1. 請使用 az group create 命令以建立資源群組:

    az group create --name myResourceGroup --location eastus
    

    您也可以將 "eastus" 變更為更接近您的位置。

  2. 使用 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 來指派角色。

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> 是 Azure AD 中已註冊應用程式的應用程式(用戶端)標識碼。

建立範例程式碼

適用於 Python 的 Azure Key Vault 憑證用戶端程式庫可讓您管理憑證。 下列程式碼範例示範如何建立用戶端、設定憑證、擷取憑證及刪除憑證。

建立名為 kv_certificates.py 的檔案,其中包含此程式碼。

import os
from azure.keyvault.certificates import CertificateClient, CertificatePolicy
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

程式碼詳細資料

驗證並建立用戶端

對大部分 Azure 服務的應用程式要求都必須獲得授權。 在程式碼中實作對 Azure 服務的無密碼連線時,建議使用 Azure.Identity 用戶端程式庫提供的 DefaultAzureCredential 類別。 DefaultAzureCredential 支援多個驗證方法,並在執行階段判斷應該使用哪個方法。 此方法可讓您的應用程式在不同的環境中 (本機或實際執行環境) 使用不同的驗證方法,而不需要實作環境特有的程式碼。

在本快速入門中,DefaultAzureCredential 使用已登入 Azure CLI 之本機開發使用者的認證向金鑰保存庫進行驗證。 將應用程式部署至 Azure 時,相同的 DefaultAzureCredential 程式碼可以自動探索並使用指派給 App Service、虛擬機器或其他服務的受控識別。 如需詳細資訊,請參閱受控識別概觀

在程式碼範例中,金鑰保存庫的名稱會以 https://\<your-key-vault-name>.vault.azure.net 格式,擴充至金鑰保存庫 URI。

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 或 Azure PowerShell Cmdlet Get-AzKeyVaultCertificate 來確認憑證已設定

刪除憑證

若要刪除憑證,請使用 begin_delete_certificate 方法:

poller = client.begin_delete_certificate(certificateName)
deleted_certificate = poller.result()

begin_delete_certificate 方法是非同步,並會傳回輪詢者物件。 呼叫輪詢器的 result 方法會等待其完成。

您可以使用 Azure CLI 命令 az keyvault certificate show 或 Azure PowerShell Cmdlet Get-AzKeyVaultCertificate 來確認憑證已刪除。

一旦刪除,憑證會保留為已刪除但可復原的狀態一段時間。 如果再次執行程式碼,請使用不同的憑證名稱。

清除資源

如果您想要實驗祕密金鑰,可以重複使用在本文中建立的 Key Vault。

否則,當您完成本文中建立的資源時,請使用下列命令來刪除資源群組及其包含的所有資源:

az group delete --resource-group myResourceGroup

下一步