在管線中使用 Azure 金鑰保存庫秘密
Azure DevOps Services |Azure DevOps Server 2022 - Azure DevOps Server 2019
使用 Azure 金鑰保存庫,您可以安全地儲存和管理敏感性資訊,例如密碼、API 金鑰、憑證等。 使用 Azure 金鑰保存庫,您可以輕鬆地建立和管理加密金鑰來加密您的資料。 Azure 金鑰保存庫也可用來管理所有資源的憑證。 在本文中,您將學會如何:
- 建立 Azure Key Vault。
- 設定您的金鑰保存庫許可權。
- 建立新的服務連線。
- 從 Azure Pipeline 查詢秘密。
必要條件
- Azure DevOps 組織。 如果您還沒有免費 帳戶,請建立一個。
- 您自己的專案。 如果您還沒有專案,請建立專案 。
- 您自己的存放庫。 如果您還沒有 Git 存放庫,請建立新的 Git 存放庫 。
- Azure 訂用帳戶。 如果您還沒有 Azure 帳戶,請建立免費的 Azure 帳戶 。
建立 Azure Key Vault
巡覽至 Azure 入口網站。
選取 左側流覽窗格中的 [建立資源 ]。
搜尋金鑰保存庫 ,然後按 Enter 鍵。
選取 [建立 ] 以建立新的 Azure 金鑰保存庫。
選取您的訂 用帳戶 ,然後新增資源群組。 輸入 金鑰保存庫名稱 ,然後選取 [ 區域 ] 和 [ 定價層 ]。 完成時,請選取 [ 檢閱 + 建立 ]。
完成新資源的部署時,選取 [移至資源 ]。
建立服務主體
在此步驟中,我們將在 Azure 中建立新的 服務主體 ,讓我們能夠從 Azure Pipelines 查詢 Azure 金鑰保存庫。
巡覽至 Azure 入口網站。
從功能表列,選取 > _ 圖示以開啟 Cloud Shell 。
選取 [PowerShell ],或根據您的喜好設定將它保留為 Bash 。
執行下列命令以建立新的服務主體:
az ad sp create-for-rbac --name YOUR_SERVICE_PRINCIPAL_NAME
您的輸出應該符合下列範例。 請務必複製命令的輸出,因為您將需要在後續步驟中建立服務連線。
{ "appId": "p951q3e2-8e5r-z697-e9q52aviu8a2", "displayName": "MyServicePrincipal", "password": "***********************************", "tenant": "85wes2u6-63sh-95zx-2as3-qw58wex269df" }
設定金鑰保存庫存取權限
巡覽至 Azure 入口網站。
選取您在上一個步驟中建立的金鑰保存庫。
選取存取原則。
選取 [新增存取原則 ] 以新增原則。
將 [取得 ] 和 [清單 ] 新增至 [秘密] 許可權 。
在 [選取主體 ] 底 下,選取以新增服務主體,然後選擇您稍早建立的服務主體。
當完成時,選擇儲存。
注意
不支援使用 Azure 角色型存取控制 (Azure RBAC) 的 Azure 金鑰保存庫。
建立新的服務連線
登入您的 Azure DevOps 組織,然後流覽至您的專案。
選取 [專案設定 ],然後選取 [服務連線 ]。
如果您在專案中第一次設定服務連線,請選取 [建立服務連線 ]。 如果您之前已建立服務連線,請選取 [ 新增服務連線 ]。
選取 [Azure Resource Manager ],然後選取 [ 下一步 ]。
選取 [服務主體][手動] ,然後選取 [ 下一步 ]。
選取 [範圍層級 ] 的 [訂 用帳戶],然後填入必要欄位,其中包含先前建立的服務主體中的資訊。 完成時選取 [ 驗證 ]:
- 服務主體識別碼 :您的服務主體 appId 。
- 服務主體金鑰 :您的服務主體 密碼 。
- 租使用者識別碼 :您的服務主體 租使用者 。
提供服務連線的名稱,並確定您核取 [ 授與所有管線的存取權限 ] 核取方塊。
選取 [ 驗證],然後在完成時儲存 。
查詢和使用管線中的秘密
使用 Azure 金鑰保存庫工作 ,我們可以擷取秘密的值,並在管線中的後續工作中使用它。 請記住,秘密必須明確對應至 env 變數,如下列範例所示。
pool:
vmImage: 'ubuntu-latest'
steps:
- task: AzureKeyVault@1
inputs:
azureSubscription: 'repo-kv-demo' ## YOUR_SERVICE_CONNECTION_NAME
KeyVaultName: 'kv-demo-repo' ## YOUR_KEY_VAULT_NAME
SecretsFilter: 'secretDemo' ## YOUR_SECRET_NAME. Default value: *
RunAsPreJob: false ## Make the secret(s) available to the whole job
- task: DotNetCoreCLI@2
inputs:
command: 'build'
projects: '**/*.csproj'
- task: DotNetCoreCLI@2
inputs:
command: 'run'
projects: '**/*.csproj'
env:
mySecret: $(secretDemo)
- bash: |
echo "Secret Found! $MY_MAPPED_ENV_VAR"
env:
MY_MAPPED_ENV_VAR: $(mySecret)
上一個 bash 命令的輸出看起來應該像這樣:
Secret Found! ***
注意
如果您想要從 Azure 金鑰保存庫查詢多個秘密,請使用 SecretsFilter
引數來傳遞以逗號分隔的秘密名稱清單: 'secret1,secret2' 。
相關文章
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應