使用環境機密與 Azure Developer CLI

Azure Developer CLI (azd) 支援在專案環境中使用 Azure Key Vault 的機密(.env 檔案中)。 這為專案中敏感資料 azd 的處理提供了安全選擇。 這些秘密可與各種 azd 功能整合,例如鉤子(hooks)及 CI/CD 管線配置。

先決條件

設定鑰匙庫秘密

要設定 Key Vault 祕密,執行 azd env set-secret <name> 命令,其中 <name> 是參考 Key Vault 祕密的環境中的密鑰。 設定秘密後,會在 azd 以下情境下自動從金鑰庫取回該值。

二頭肌參數

要將 Bicep 參數與 Azure Key Vault 秘密的值關聯,請依照以下步驟操作:

  1. 請使用 @secure() 關鍵字將 Bicep 參數標註為安全。
  2. 在 main.parameters.json 檔案中建立一個映射,將 Bicep 參數連結到環境中對應的金鑰名稱,引用 Azure Key Vault 機密。

備註

使用 Bicep 參數檔案.bicepparam時,目前不支援環境機密資訊。

範例

在專案 azd 中執行 azd env set-secret MY_SECRET 並依照提示選擇現有的 Azure Key Vault 秘密,或建立新的。 指令完成後,金鑰 MY_SECRET 會保留對金鑰庫秘密的參考。 新增或選擇你想用該值的 Bicep 參數,並將其指定為安全:

@secure()
param secureParameter string

在 main.parameters.json 檔案中建立映射:

{
    "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
      "secureParameter": {
        "value": "${MY_SECRET}"
      }
    }
}

下次執行 azd up or azd provision時, azd 會使用 Azure Key Vault 的秘密作為參數值。

勾點

azd 當掛鉤執行時,能自動取得 Azure Key Vault 的機密。 預設情況下,當 azd 執行 hook 時,專案環境(檔案) .env 中的所有鍵值對都會設定在 hook 的環境中。 然而,對金鑰庫祕密的引用並不會自動解析為對應的祕密值。

要解決這些參考資料,請遵循以下步驟:

  1. 建立一個從環境中金鑰到新金鑰的映射,並解決金鑰庫祕密。
  2. 請使用 secrets 鉤子定義中的欄位來建立這個映射。

範例

在專案 azd 中執行 azd env set-secret MY_SECRET 並依照提示選擇現有的 Azure Key Vault 秘密,或建立新的。 指令完成後,金鑰 MY_SECRET 會參照密鑰保管庫中的秘密。 建立適合你作業系統的掛鉤定義。

hooks:
  preprovision: 
    run: 'echo ".env value: $MY_SECRET \nResolved secret: $SECRET_RESOLVE"'
    shell: sh
    interactive: true
    secrets:
      SECRET_RESOLVE: MY_SECRET

下一次執行 azd provision 時,preprovision 鈎子會運行,並且將 MY_SECRET 解析成 SECRET_RESOLVE。

管線設定

azd 簡化了為您的應用程式設定持續整合(CI)的流程。 無論你使用 GitHub 或 Azure DevOps,都要執行 azd pipeline config 並遵循指引步驟來配置 CI/CD。

作為自動設定的一部分,azd 會為您的 CI/CD 部署流程創建密碼和參數。 你也可以用 pipeline 的 azure.yaml設定來定義自己的變數和秘密。 你定義的名稱對應於環境中 azd 的鍵(.env)。 如果某個金鑰包含秘密參考(akvs), azd 會根據你是將它作為變數還是秘密加入,會執行不同的行為:

方法 CI/CD 值儲存 秘密輪換 最適合用於
variables 金鑰庫參考(akvs://...) 自動 — 流水線總是從 Key Vault 讀取最新值。 當 CI/CD 服務的主體帳戶具有 Key Vault 的存取權時,
secrets 實際秘密 值 手動——旋轉後重啟 azd pipeline config。 當你無法將 Key Vault 讀取權限指派給服務主體時,

備註

當你使用 variables時, azd 會嘗試為 CI/CD 工作流程所使用的服務主體指派讀取權限角色。 如果你沒有足夠的權限來指派 Key Vault 的讀取角色,操作就會失敗。 請改用 secrets。

範例

從初始化 azd 專案開始,執行 azd env set-secret SECURE_KEY 並依照提示執行。 指令完成後,顯示 azd env get-values 參考:

SECURE_KEY="akvs://faa080af-c1d8-40ad-9cce-000000000000/vivazqu-kv/SECURE-KEY-kv-secret"

請將SECURE_KEY添加到variables或secrets列表中的azure.yaml。

# yaml-language-server: $schema=https://raw.githubusercontent.com/Azure/azure-dev/main/schemas/v1.0/azure.yaml.json
name: your-project-name
pipeline:
  variables:
    - SECURE_KEY

當你執行 azd pipeline config 時,SECURE_KEY 會被設定為 CI/CD 變數,且其值將是 Key Vault 的參考。 如果 SECURE_KEY 也映射到 Bicep 輸入參數或 hook 定義,則 azd 會在執行時自動解析秘密值。