開始使用適用於 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-policySet-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
  •