共用方式為


在運行管線中使用 Azure Key Vault 機密

Azure DevOps 服務 |Azure DevOps Server |Azure DevOps Server 2022

Azure Key Vault 可讓開發人員安全地儲存和管理敏感性資訊,例如密碼、API 密鑰和憑證。 本文將指導您如何在流程中查詢和使用 Azure Key Vault 的機密。

必要條件

產品 要求
Azure DevOps - Azure DevOps 專案
- 權限:
    - 若要授與專案中所有管線的存取權:您必須是 Project Administrators 群組的成員。
    - 若要建立服務連線:您必須具有服務連線系統管理員建立者角色。
GitHub的 - GitHub 帳戶和 GitHub 存放庫
- 用來授權 Azure Pipelines 的 GitHub 服務連線
天藍色 - Azure 訂用帳戶

建立密鑰保管庫

  1. 登入 Azure 入口網站,然後選取 [ 建立資源]。

  2. [Key Vault] 底下,選取 [ 建立 ] 以建立新的 Azure Key Vault。

  3. 從下拉功能表中選取您的 訂用帳戶 ,然後選取現有的資源群組或建立新的 資源群組 。 輸入 金鑰保存庫名稱、選取 區域、選擇 定價層,然後選取 [ 下一步 ] 以設定其他屬性。 否則,請選取 [檢閱 + 建立 ] 以保留預設設定。

  4. 部署完成後,請選取 [移至資源]。

設定驗證

建立使用者指派的受管理的身分識別

  1. 登入 Azure 入口網站,然後在搜尋列中搜尋 受控識別 服務。

  2. 選取 [建立],然後填寫必要的字段,如下所示:

    • 訂閱:從下拉功能表中選取您的訂閱項目。
    • 資源群組:選取現有的資源群組或建立新的資源群組。
    • 區域:從下拉功能表中選取區域。
    • 名稱:輸入使用者指派受控識別的名稱。
  3. 完成時,請選取 [ 檢閱 + 建立 ]。

  4. 部署完成後,請選取 [移至資源],然後複製 [ 用帳戶] 和 [用戶端標識符],您將在後續步驟中用到它們。

  5. 流覽至 [ 設定>屬性],然後複製受控識別的 租使用者標識碼 以供稍後使用。

設定金鑰保存庫存取原則

  1. 流覽至 Azure 入口網站,並使用搜尋列來尋找您稍早建立的密鑰保存庫。

  2. 選取 [存取原則],然後選取 [ 建立 ] 以新增原則。

  3. 在 [ 秘密許可權] 底下,選取 [ 取得 ] 和 [ 列表 ] 複選框。

  4. 選取 [下一步],然後將您稍早建立之受控識別的 用戶端標識碼 貼到搜尋列中。

  5. 選取您的受控識別,再選取 [ 下一步],然後再次選取 [ 下一步 ]。

  6. 查看您的新政策,然後在完成時選取建立

建立服務連線

  1. 登入您的 Azure DevOps 組織,然後瀏覽至您的專案。

  2. 選取 [項目設定>服務連線],然後選取 [ 新增服務連線]。

  3. 選取 [Azure Resource Manager],然後選取 [ 下一步]。

  4. 在 [ 身分識別類型] 下,從下拉功能表中選取 [受控識別 ]。

  5. 針對 步驟 1:受控識別的詳細資料,填寫欄位如下所示:

    • 受控識別的訂閱:選取包含受控識別的訂閱。

    • 受控識別的資源群組:選取裝載受控識別的資源群組。

    • 受控識別:從下拉功能表中選取您的受控識別。

  6. 針對 步驟 2:Azure 範圍,填寫欄位,如下所示:

    • 服務連線的範圍層級:選取 [ 訂用帳戶]。

    • 服務連線的訂閱:選擇受管理的識別所將存取的訂閱帳戶。

    • 服務連線的資源群組:(選擇性 如果您想要限制特定資源群組的存取,請指定此專案。

  7. 針對 步驟 3:服務連線詳細數據

    • 服務連線名稱:提供服務連線的名稱。

    • 服務管理參考:(選擇性) 包含 ITSM 資料庫中的內容資訊。

    • 描述:(選擇性) 新增描述。

  8. [安全性] 底下,核取 [ 授與所有管線的訪問許可權 ] 方塊,允許所有管線使用此服務連線。 如果您將此保持未核取狀態,您必須手動授與每個管線的存取權。

  9. 選取 [儲存 ] 以驗證並建立服務連線。

    顯示如何建立受控識別ARM服務連線的螢幕快照。

存取和使用管線中的機密

使用Azure Key Vault 任務,您現在可以從 Azure Key Vault 查詢和提取秘密,並在後續的管線任務中應用這些秘密。 請注意,秘密必須明確對應至環境變數,如下列範例所示:

pool:
  vmImage: 'ubuntu-latest'

steps:
- task: AzureKeyVault@2                                # Download Azure Key Vault secrets.
  inputs:
    azureSubscription: 'SERVICE_CONNECTION_NAME'       # Name of the service connection. Alias: ConnectedServiceName.
    KeyVaultName: 'KEY_VAULT_NAME'                     # Name of the key vault.
    SecretsFilter: '*'                                 # Secrets filter. Default: *.

- bash: |
    echo "Secret Found! $MY_MAPPED_ENV_VAR"        
  env:
    MY_MAPPED_ENV_VAR: $(SECRET_NAME)

上一個bash步驟的輸出看起來應該像這樣:

Secret Found! ***

注意

若要從 Azure Key Vault 查詢多個秘密,請使用 SecretsFilter 輸入並提供以逗號分隔的秘密名稱清單,例如: 『secret1,secret2』