在 Azure Pipelines 中使用 Azure Key Vault 秘密
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 工作以檢視記錄。
管線執行完成後,返回管線摘要,然後選取已發佈的成品。
選取 [卸除>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
相關文章
- 發佈和下載管線成品
- 發行成品和成品來源 \(部分機器翻譯\)
- 使用閘道和核准來控制部署