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

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

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

必要條件

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

設定您的本機環境

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

登入 Azure

  1. 執行 login 命令。

    az login
    

    如果 CLI 可以開啟預設瀏覽器,它會執行這項操作,並載入 Azure 登入頁面。

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

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

安裝套件

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

  2. 安裝 Azure Active Directory 身分識別程式庫:

    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>

授與對金鑰保存庫的存取權

建立金鑰保存庫的存取原則,將憑證權限授與服務主體

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

後續步驟