開始使用適用於 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
Azure CLI
Azure PowerShell
如果 CLI 可以開啟預設瀏覽器,它會執行這項操作,並載入 Azure 登入頁面。
否則,請在
https://aka.ms/devicelogin
中開啟瀏覽器頁面,並輸入顯示在終端機中的授權碼。
請在瀏覽器中使用您的帳戶認證登入。
如果 PowerShell 可以開啟您的預設瀏覽器,它會這麼做並載入 Azure 登入頁面。
否則,請在
https://aka.ms/devicelogin
中開啟瀏覽器頁面,並輸入顯示在終端機中的授權碼。
請在瀏覽器中使用您的帳戶認證登入。
在終端機或命令提示字元中,建立適當的專案資料夾,然後建立並啟動 Python 虛擬環境,如
使用 Python 虛擬環境
中所述。
安裝 Azure Active Directory 身分識別程式庫:
pip install azure-identity
安裝 Key Vault 祕密程式庫:
pip install azure-keyvault-secrets
建立資源群組和金鑰保存庫
Azure CLI
Azure PowerShell
使用 az keyvault create
建立金鑰保存庫:
az keyvault create --name <your-unique-keyvault-name> --resource-group myResourceGroup
以 Azure 中的唯一名稱取代 <your-unique-keyvault-name>
。 您通常會使用個人或公司名稱,以及其他數字和識別碼。
請使用 New-AzResourceGroup
命令以建立資源群組:
New-AzResourceGroup -Name myResourceGroup -Location eastus
您也可以將 "eastus" 變更為更接近您的位置。
使用 New-AzKeyVault
建立金鑰保存庫:
New-AzKeyVault -Name <your-unique-keyvault-name> -ResourceGroupName myResourceGroup -Location eastus
以 Azure 中的唯一名稱取代 <your-unique-keyvault-name>
。 您通常會使用個人或公司名稱,以及其他數字和識別碼。
設定 KEY_VAULT_NAME 環境變數
我們的指令碼會使用指派給 KEY_VAULT_NAME
環境變數的值作為金鑰保存庫的名稱。 因此,您必須使用下列命令來設定此值:
export KEY_VAULT_NAME=<your-unique-keyvault-name>
授與對金鑰保存庫的存取權
建立金鑰保存庫的存取原則,將祕密權限授與服務主體。
Azure CLI
Azure PowerShell
建立範例程式碼
適用於 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
命令。
使用相同秘密名稱重新執行程式碼可能會產生錯誤:「 (衝突) 秘密 < 名稱 > 目前處於已刪除但可復原的狀態」。使用不同的秘密名稱。
程式碼詳細資料
驗證並建立用戶端
對大部分 Azure 服務的應用程式要求都必須獲得授權。 使用Azure 身分識別用戶端程式庫所提供的DefaultAzureCredential類別,是實作程式碼中 Azure 服務的無密碼連線的建議方法。 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。
否則,當您完成本文中建立的資源時,請使用下列命令來刪除資源群組及其包含的所有資源:
Azure CLI
Azure PowerShell