在 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 組織,然後瀏覽至您的專案。
選取 [存放庫],然後選取 [ 初始化 ] 以使用自述檔初始化主要分支。
建立 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 Pipelines 的存取權。 請遵循 本指南 ,使用 Azure CLI 建立服務主體,然後繼續進行本節中的後續步驟。
流覽至 Azure 入口網站,然後使用搜尋列來尋找您稍早建立的密鑰保存庫。
選取 [ 存取原則],然後選取 [ 建立 ] 以建立新的原則。
在 [秘密許可權] 底下,選取 [取得和列表]。
選取 [ 下一步],然後選取您稍早建立的服務主體。 服務主體是物件,代表要求存取 Azure 資源的應用程式或服務。
選取 [下一步],然後再次選取 [下一步]。
檢閱您的原則,然後在完成時選取 [ 建立 ]。
新增角色指派
在下一個步驟中,我們將使用服務主體建立ARM服務連線。 在確認連線之前,我們需要授與訂用帳戶層級的服務主體 讀取 存取權:
流覽至 Azure 入口網站
從左側導覽面板中選取 [訂用帳戶 ],然後尋找並選取您的訂用帳戶。
選取 [訪問控制],然後選取 [新增>角色指派]。
選取 [角色] 索引標籤下的 [讀取者],然後選取 [下一步]。
選取 [ 使用者、群組或服務主體],然後選取 [選取 成員]。
使用搜尋列來尋找您的服務主體,然後選取 「+」 符號加以選取,然後按兩下 [選取 ] 按鈕。
選取 [ 檢閱 + 指派]、檢閱您的設定,然後再次選取 [檢閱 + 指派 ],以確認您的選擇並新增角色指派。
建立服務連線
登入您的 Azure DevOps 組織,然後瀏覽至您的專案。
選取 [項目設定>服務連線],然後選取 [新增服務連線] 以建立新的服務連線。
選取 [Azure Resource Manager],然後選取 [ 下一步]。
選取 [服務主體][手動],然後選取 [ 下一步]。
針對 [範圍層級] 選取 [Azure 雲端] 和 [訂用帳戶],然後輸入您的訂用帳戶標識符和訂用帳戶名稱。
填寫下列欄位,其中包含您在建立服務主體時取得的信息,然後在完成時選取 [ 驗證 ]:
- 服務主體標識碼:您的服務主體 appId。
- 服務主體金鑰:您的服務主體 密碼。
- 租用戶標識碼:您的服務主體 租使用者。
驗證成功之後,請為您的服務連線提供名稱和描述(選擇性),然後核取 [ 授與所有管線的訪問許可權 ] 複選框。
選取 [ 驗證],然後在完成時儲存 。
登入您的 Azure DevOps 集合,然後流覽至您的專案。
選取 [項目設定>服務連線>][新增服務連線],然後選取 [Azure Resource Manager] 以建立新的 ARM 服務連線。
為服務連線指定名稱,然後選取 [範圍層級] 的 [Azure Cloud for Environment] 和 [訂用帳戶]。
輸入您的 訂用帳戶標識碼 和訂 用帳戶名稱。
填寫下列欄位,其中包含您在建立服務主體時取得的信息,然後在完成時選取 [ 驗證連線 ]:
- 服務主體用戶端標識碼:您的服務主體 appId。
- 服務主體金鑰:您的服務主體 密碼。
- 租用戶標識碼:您的服務主體 租使用者。
核取 [ 允許所有管線使用此聯機 ] 複選框,然後在完成時選取 [ 確定 ]。
建立新管線
登入您的 Azure DevOps 組織,然後瀏覽至您的專案。
選取 [ 管線],然後選取 [ 新增管線]。
選取 [ 使用傳統編輯器 ] 建立傳統管線。
選取 [Azure Repos Git],選取您的存放庫和預設分支,然後選取 [ 繼續]。
選取 .Net Desktop 管線範本。
在此範例中,我們只需要最後兩個工作。 按 CTRL 鍵,然後選取前五個工作,以滑鼠右鍵按兩下並選擇 [移除選取的工作 ],以刪除它們。
選取 + 以新增工作。 搜尋命令行工作、選取它,然後選取 [新增] 將它新增至管線。 新增之後,請依照下列方式進行設定:
- 顯示名稱:建立檔案
- 文稿:
echo $(YOUR_SECRET_NAME) > secret.txt
選取 + 以新增工作。 搜尋 Azure 金鑰保存庫 工作、選取它,然後選取 [新增] 將其新增至管線。 新增之後,請依照下列方式進行設定:
- 顯示名稱:Azure 金鑰保存庫
- Azure 訂用帳戶:選取您稍早建立的服務主體服務連線
- 金鑰保存庫:選取您的金鑰保存庫
- 秘密篩選:以逗號分隔的秘密名稱清單,或離開 * 以從選取的密鑰保存庫下載所有秘密
選取 [ 複製檔案 ] 工作,並填寫必要的欄位,如下所示:
- 顯示名稱:複製檔案
- 內容:secret.txt
- 目標資料夾:$(build.artifactstagingdirectory)
選取 [ 發佈成品 ] 工作,並填寫必要的字段,如下所示:
- 顯示名稱:發佈成品
- 發佈路徑:$(build.artifactstagingdirectory)
- 成品名稱:卸除
- 成品發佈位置:Azure Pipelines
選取 [ 儲存並排入佇列],然後選取 [ 執行 ] 以執行管線。
管線執行完成後,返回管線摘要,然後選取已發佈的成品。
選取 [卸>除secret.txt以下載已發佈的成品。
開啟您剛下載的文本檔,文本文件應該包含來自 Azure 金鑰保存庫的秘密。
登入您的 Azure DevOps 集合,然後流覽至您的專案。
選取 [ 管線],然後選取 [ 組建]。
選取 [新增>新的組建管線]。
選取 [ 使用傳統編輯器 ] 來建立新的傳統組建管線。
選取 [Azure Repos Git],選取您的存放庫和預設分支,然後選取 [ 繼續]。
選取 .Net Desktop 管線範本,然後選取 [套用]。
在此範例中,我們只需要最後兩個工作。 按 CTRL 鍵,然後選取前五個工作,以滑鼠右鍵按兩下並選擇 [移除選取的工作 ],以刪除它們。
選取 + 以新增工作。 搜尋命令行工作、選取它,然後選取 [新增] 將它新增至管線。 新增之後,請依照下列方式進行設定:
- 顯示名稱:建立檔案
- 文稿:
echo $(YOUR_SECRET_NAME) > secret.txt
選取 + 以新增工作。 搜尋 Azure 金鑰保存庫 工作、選取工作,然後選取 [新增] 將其新增至管線。 新增之後,請依照下列方式進行設定:
- 顯示名稱:Azure 金鑰保存庫
- Azure 訂用帳戶:選取您稍早建立的服務主體服務連線
- 金鑰保存庫:選取您的金鑰保存庫
- 秘密篩選:以逗號分隔的秘密名稱清單,或離開 * 以從選取的密鑰保存庫下載所有秘密
選取 [ 複製檔案 ] 工作,並填寫必要的欄位,如下所示:
- 顯示名稱:複製檔案
- 內容:secret.txt
- 目標資料夾:$(build.artifactstagingdirectory)
選取 [ 發佈成品 ] 工作,並填寫必要的字段,如下所示:
- 顯示名稱:發佈成品
- 發佈路徑:$(build.artifactstagingdirectory)
- 成品名稱:卸除
- 成品發佈位置:Azure Pipelines
選取 [ 儲存和佇列],然後選取 [ 儲存和佇列 ] 以執行組建管線。
管線執行完成後,請選取 [成品],然後選取 [卸除]。
在新開啟的視窗中,選取 [卸>除secret.txt],選取省略號圖示 [...],然後選取 [下載] 以儲存文本檔。
開啟您剛才下載的文字檔,它應該包含來自 Azure 金鑰保存庫的秘密。
警告
本教學課程僅供教育之用。 如需安全性最佳做法以及如何安全地使用秘密,請參閱使用 Azure 金鑰保存庫 管理伺服器應用程式中的秘密。
清除資源
請遵循下列步驟來刪除您所建立的資源:
本教學課程期間建立的所有 Azure 資源都會裝載在單一資源群組之下。 執行下列命令來刪除您的資源群組及其所有資源。
az group delete --name <YOUR_RESOURCE_GROUP_NAME>
常見問題集
問:我收到下列錯誤:「使用者或群組沒有秘密清單許可權」我該怎麼做?
答:如果您遇到錯誤,指出使用者或群組沒有密鑰保存庫的秘密清單許可權,請執行下列命令來授權應用程式存取 Azure 金鑰保存庫 中的金鑰或秘密:
$ErrorActionPreference="Stop";
$Credential = Get-Credential;
Connect-AzAccount -SubscriptionId <YOUR_SUBSCRIPTION_ID> -Credential $Credential;
$spn=(Get-AzureRmADServicePrincipal -SPN <YOUR_SERVICE_PRINCIPAL_ID>);
$spnObjectId=$spn.Id;
Set-AzureRmKeyVaultAccessPolicy -VaultName key-vault-tutorial -ObjectId $spnObjectId -PermissionsToSecrets get,list;
相關文章
- 發佈和下載管線成品
- 發行成品和成品來源 \(部分機器翻譯\)
- 使用閘道和核准來控制部署