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 訂用帳戶。 |
建立密鑰保管庫
登入 Azure 入口網站,然後選取 [ 建立資源]。
在 [Key Vault] 底下,選取 [ 建立 ] 以建立新的 Azure Key Vault。
從下拉功能表中選取您的 訂用帳戶 ,然後選取現有的資源群組或建立新的 資源群組 。 輸入 金鑰保存庫名稱、選取 區域、選擇 定價層,然後選取 [ 下一步 ] 以設定其他屬性。 否則,請選取 [檢閱 + 建立 ] 以保留預設設定。
部署完成後,請選取 [移至資源]。
設定驗證
建立使用者指派的受管理的身分識別
登入 Azure 入口網站,然後在搜尋列中搜尋 受控識別 服務。
選取 [建立],然後填寫必要的字段,如下所示:
- 訂閱:從下拉功能表中選取您的訂閱項目。
- 資源群組:選取現有的資源群組或建立新的資源群組。
- 區域:從下拉功能表中選取區域。
- 名稱:輸入使用者指派受控識別的名稱。
完成時,請選取 [ 檢閱 + 建立 ]。
部署完成後,請選取 [移至資源],然後複製 [ 訂 用帳戶] 和 [用戶端標識符],您將在後續步驟中用到它們。
流覽至 [ 設定>屬性],然後複製受控識別的 租使用者標識碼 以供稍後使用。
設定金鑰保存庫存取原則
流覽至 Azure 入口網站,並使用搜尋列來尋找您稍早建立的密鑰保存庫。
選取 [存取原則],然後選取 [ 建立 ] 以新增原則。
在 [ 秘密許可權] 底下,選取 [ 取得 ] 和 [ 列表 ] 複選框。
選取 [下一步],然後將您稍早建立之受控識別的 用戶端標識碼 貼到搜尋列中。
選取您的受控識別,再選取 [ 下一步],然後再次選取 [ 下一步 ]。
查看您的新政策,然後在完成時選取建立。
建立服務連線
登入您的 Azure DevOps 組織,然後瀏覽至您的專案。
選取 [項目設定>服務連線],然後選取 [ 新增服務連線]。
選取 [Azure Resource Manager],然後選取 [ 下一步]。
在 [ 身分識別類型] 下,從下拉功能表中選取 [受控識別 ]。
針對 步驟 1:受控識別的詳細資料,填寫欄位如下所示:
受控識別的訂閱:選取包含受控識別的訂閱。
受控識別的資源群組:選取裝載受控識別的資源群組。
受控識別:從下拉功能表中選取您的受控識別。
針對 步驟 2:Azure 範圍,填寫欄位,如下所示:
服務連線的範圍層級:選取 [ 訂用帳戶]。
服務連線的訂閱:選擇受管理的識別所將存取的訂閱帳戶。
服務連線的資源群組:(選擇性 如果您想要限制特定資源群組的存取,請指定此專案。
針對 步驟 3:服務連線詳細數據:
服務連線名稱:提供服務連線的名稱。
服務管理參考:(選擇性) 包含 ITSM 資料庫中的內容資訊。
描述:(選擇性) 新增描述。
在 [安全性] 底下,核取 [ 授與所有管線的訪問許可權 ] 方塊,允許所有管線使用此服務連線。 如果您將此保持未核取狀態,您必須手動授與每個管線的存取權。
選取 [儲存 ] 以驗證並建立服務連線。
存取和使用管線中的機密
使用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』。