Azure DevOps Services |Azure DevOps Server 2022 - Azure DevOps Server 2019
Azure 金鑰保存庫 可讓開發人員安全地儲存和管理機密資訊,例如 API 金鑰、認證或憑證。 Azure 金鑰保存庫 服務支援兩種類型的容器:保存庫和受控 HSM (硬體安全性模組) 集區。 保存庫可以同時儲存軟體和 HSM 支援的金鑰、秘密和憑證,而受控 HSM 集區則完全支援 HSM 支援的金鑰。
在本教學課程中,您將了解如何:
- 使用 Azure CLI 建立 Azure 金鑰保存庫
- 新增秘密並設定對 Azure 金鑰保存庫的存取
- 在管線中使用機密資訊
必要條件
Azure 訂用帳戶。 如果您還沒有 Azure 帳戶,請免費 建立 Azure 帳戶。
取得範例程式碼
如果您已經有自己的存放庫,請繼續進行下一個步驟。 否則,請將下列範例存放庫匯入您的 Azure 存放庫。
登入您的 Azure DevOps 組織,然後瀏覽至您的專案。
選取 存放庫,然後選取 匯入。 輸入下列存放庫 URL,然後選取 [ 匯入]。
https://github.com/MicrosoftDocs/pipelines-dotnet-core
建立 Azure Key Vault
登入 Azure 入口網站,然後選取右上角的 [Cloud Shell] 按鈕。
如果您有一個以上的 Azure 訂用帳戶與您的帳戶相關聯,請使用下列命令來指定預設訂用帳戶。 您可以使用
az account list
來產生訂用帳戶清單。az account set --subscription <YOUR_SUBSCRIPTION_NAME_OR_ID>
設定您的預設 Azure 區域。 您可以使用
az account list-locations
來產生可用區域的清單。az config set defaults.location=<YOUR_REGION>
建立新的資源群組。
az group create --name <YOUR_RESOURCE_GROUP_NAME>
建立新的 Azure 金鑰保存庫。
az keyvault create \ --name <YOUR_KEY_VAULT_NAME> \ --resource-group <YOUR_RESOURCE_GROUP_NAME>
在 Azure 金鑰保存庫中建立新的秘密。
az keyvault secret set \ --name <YOUR_SECRET_NAME> \ --value <YOUR_ACTUAL_SECRET> \ --vault-name <YOUR_KEY_VAULT_NAME>
設定驗證
建立使用者指派的受控識別
登入 Azure 入口網站,然後在搜尋列中搜尋受控識別服務。
選取 [建立],然後填寫必要的字段,如下所示:
- 訂閱:從下拉功能表中選取您的訂閱選項。
- 資源群組:選取現有資源群組或建立新的資源群組。
- 區域:從下拉功能表中選取區域。
- 名稱:輸入使用者指派的受控識別的名稱。
完成時,請選取 [ 檢閱 + 建立 ]。
部署完成後,請選取 [移至資源],然後複製 [ 訂 用帳戶] 和 [用戶端標識符 ] 值,以用於後續步驟。
流覽至 [設定>屬性],然後複製受控識別的租使用者標識碼值以供稍後使用。
設定金鑰保存庫存取原則
流覽至 Azure 入口網站,並使用搜尋列來尋找您稍早建立的密鑰保存庫。
選取 [ 存取原則],然後選取 [ 建立 ] 以新增原則。
在秘密許可權底下,選取取得和列表複選框。
選取 [下一步],然後將您稍早建立之受控識別的用戶端標識碼貼到搜尋列中。 選取您的受管理的身份。
選取下一步,然後再次選取下一步。
檢閱您的新原則,然後在完成時選取 [ 建立 ]。
建立服務連線
登入您的 Azure DevOps 組織,然後瀏覽至您的專案。
選取 [項目設定>服務連線],然後選取 [新增服務連線] 以建立新的服務連線。
選取 [Azure Resource Manager],然後選取 [ 下一步]。
針對 [ 身分識別類型],從下拉功能表中選取 [受控識別 ]。
針對 步驟 1:管理身分識別詳細資訊,填寫欄位,如下所示:
受控識別的訂閱:選取包含您受控識別的訂閱。
受控識別的資源群組:選取託管您受控識別的資源群組。
受控識別:從下拉功能表中選取您的受控識別。
針對 步驟 2:Azure 範圍 填寫欄位如下所示:
服務連接的範圍層級:選取 [訂用帳戶]。
服務連線的訂閱:選取受控身份將存取的訂閱。
服務連線的資源群組:(選擇性) 指定 以限制一個資源群組的受控識別存取。
針對 步驟 3:服務連線詳細數據:
服務連線名稱:提供服務連線的名稱。
服務管理參考:(可選)來自 ITSM 資料庫的上下文資訊。
描述:(選擇性) 新增描述。
在 [安全性] 中,選取 [ 授與所有管線的訪問許可權 ] 可讓所有管線使用此聯機。 不建議使用此選項。 相反地,請為每個管線個別授權使用服務連線。
選取 [ 儲存 ] 以驗證並建立服務連線。
從管線存取金鑰保存庫秘密
登入您的 Azure DevOps 組織,然後瀏覽至您的專案。
選取 [ 管線],然後選取 [ 新增管線]。
選取 Azure Repos Git (YAML),然後選取您的存放庫。
選取「入門管道」範本。
默認管線會包含執行echo命令的腳稿。 這些並非必要專案,因此我們可以將其刪除。
新增 AzureKeyVault 任務,將佔位符替換為您稍早建立的服務連線名稱和您的金鑰保存庫名稱。 您的 YAML 檔案應該類似下列代碼段:
trigger: - main pool: vmImage: ubuntu-latest steps: - task: AzureKeyVault@2 displayName: Azure Key Vault inputs: azureSubscription: 'SERVICE_CONNECTION_NAME' KeyVaultName: 'KEY_VAULT_NAME' SecretsFilter: '*' RunAsPreJob: false
讓我們新增下列任務來複製和公開我們的機密。 此範例僅供示範之用,不應在生產環境中實作。
trigger: - main pool: vmImage: ubuntu-latest steps: - task: AzureKeyVault@2 displayName: Azure Key Vault inputs: azureSubscription: 'SERVICE_CONNECTION_NAME' KeyVaultName: 'KEY_VAULT_NAME' SecretsFilter: '*' RunAsPreJob: false - task: CmdLine@2 displayName: Create file inputs: script: 'echo $(SECRET_NAME) > secret.txt' - task: CopyFiles@2 displayName: Copy file inputs: Contents: secret.txt targetFolder: '$(Build.ArtifactStagingDirectory)' - task: PublishBuildArtifacts@1 displayName: Publish Artifact inputs: PathtoPublish: '$(Build.ArtifactStagingDirectory)' ArtifactName: 'drop' publishLocation: 'Container'
選取 儲存並執行,然後再次選取它以提交變更並觸發管道。 如果系統提示您選取 [允許],系統可能會要求您允許管線存取 Azure 資源。 您只需要核准管線一次。
選取 CmdLine 工作以檢視記錄。
管線執行完成後,返回管線摘要,然後選取已發佈的成品。
選擇drop>secret.txt以下載它。
開啟您剛下載的文本檔,文本文件應該包含來自 Azure 金鑰保存庫的秘密。
警告
本教學課程僅供教育之用。 如需安全性最佳做法以及如何安全地使用秘密,請參閱使用 Azure 金鑰保存庫 管理伺服器應用程式中的秘密。
清除資源
請遵循下列步驟來刪除您所建立的資源:
本教學課程期間建立的所有 Azure 資源都會裝載在單一資源群組之下。 執行下列命令來刪除您的資源群組及其所有資源。
az group delete --name <YOUR_RESOURCE_GROUP_NAME>
常見問題集
問:我收到下列錯誤:「使用者或群組沒有秘密清單許可權」我該怎麼做?
答:如果您遇到錯誤,指出使用者或群組沒有密鑰保存庫的秘密清單許可權,請執行下列命令來授權應用程式存取 Azure 金鑰保存庫 中的金鑰或秘密:
az account set --subscription <YOUR_SUBSCRIPTION_ID>
az login
$spnObjectId = az ad sp show --id <YOUR_SERVICE_PRINCIPAL_ID>
az keyvault set-policy --name <YOUR_KEY_VAULT_NAME> --object-id $spnObjectId --secret-permissions get list