當您在自訂程式期間存取存放庫或 Azure 資源等資源時,您必須安全地進行驗證。 您可以在自訂檔案中參考 Azure 金鑰保存庫秘密,以避免公開敏感性資訊,而且您可以使用服務主體向 Azure 進行驗證,以進行安全的資源存取。 本文說明如何在開發箱自定義期間安全地管理和存取資源。
在自定義檔案中使用金鑰庫中的機密
在 YAML 自定義中使用 Azure 金鑰保存庫中的秘密來複製私人存放庫或執行需要存取權杖的工作。 例如,在自定義檔案中,使用儲存在 Azure 金鑰保存庫中的個人存取權杖 (PAT) 來存取私人存放庫。
小組和使用者自定義都支援從密鑰保存庫擷取秘密。 使用映像定義檔案的小組自訂設定會使用image參數來定義開發箱的基礎映像,並列出開發箱建立時所執行的任務。 使用者自定義會列出建立開發方塊時執行的工作。
若要在自定義檔案中使用秘密,例如 PAT,請將它儲存為金鑰保存庫秘密。 下列範例示範如何在這兩種類型的自訂中參考金鑰保存庫秘密。
設定金鑰保存庫存取權以進行自訂
若要設定金鑰保存庫祕密以用於您的小組或使用者的自訂作業,請確定開發人員中心專案的受控識別具有您金鑰保存庫上的 Key Vault 祕密使用者角色。
如果您的金鑰保存庫是私人的,請讓受信任的 Microsoft 服務略過防火牆,因為開發人員中心尚不支援服務標籤。
下列螢幕擷取畫面顯示允許受信任的 Microsoft 服務略過 Azure 金鑰保存庫設定中防火牆的選項。
若要深入瞭解如何讓受信任的 Microsoft 服務略過防火牆,請參閱 設定 Azure 金鑰保存庫網路設定。
使用者自訂的其他設定
若要配置用戶自訂的金鑰保存庫祕密,還請:
- 確定開發人員中心專案的受控識別具有您金鑰保存庫上的 Key Vault 讀者和 Key Vault 祕密使用者角色。
- 將祕密的「Key Vault 祕密使用者」角色授與給在開發箱自訂作業期間需要它的每個使用者或群組,包括開發人員中心受控識別、系統管理員帳戶,以及任何其他必要的使用者或群組。
小組自訂範例
此語法會在映像檔定義文件中使用電子金鑰保管庫機密 (PAT)。
KEY_VAULT_SECRET_URI是金鑰保存庫中秘密的 URI。
$schema: "<SCHEMA_VERSION>"
name: "<IMAGE_DEFINITION_NAME>"
image: "<BASE_IMAGE>"
description: "<DESCRIPTION>"
tasks:
- name: <TASK_NAME>
description: <TASK_DESCRIPTION>
parameters:
repositoryUrl: <REPOSITORY_URL>
directory: <DIRECTORY_PATH>
pat: "{{<KEY_VAULT_SECRET_URI>}}"
此範例使用下列 git-clone 作業:
$schema: "1.0"
name: "example-image-definition"
image: microsoftvisualstudio_visualstudioplustools_vs-2022-ent-general-win11-m365-gen2
description: "Clones a public example Git repository"
tasks:
- name: git-clone
description: Clone this repository into C:\workspaces
parameters:
repositoryUrl: https://github.com/example-org/example-repo.git
directory: C:\workspaces
pat: "{{https://contoso-vault.vault.azure.net/secrets/github-pat}}"
或者,您可以透過內建工作內嵌參考祕密,如下列範例所示:
$schema: "1.0"
name: "example-image-definition"
image: microsoftvisualstudio_visualstudioplustools_vs-2022-ent-general-win11-m365-gen2
description: "Clones a public example Git repository"
tasks:
- name: git-clone
description: Clone this repository into C:\Workspaces
parameters:
command: MyCommand –MyParam "{{KEY_VAULT_SECRET_URI}}"
使用者自訂範例
使用者自訂可讓您取得 Azure DevOps 權杖來複製私人存放庫,而不需要從金鑰保存庫明確指定個人存取權杖 (PAT)。 服務會在執行時自動將您的 Azure 令牌交換為 Azure DevOps 令牌。
此範例顯示 ADO 簡寫 ({{ado://...}})。 服務會在執行階段將您的 Azure 權杖交換為 Azure DevOps 權杖,因此您不需要將 PAT 儲存在 Key Vault 中。
$schema: "1.0"
tasks:
- name: git-clone
description: Clone this repository into C:\workspaces
parameters:
repositoryUrl: https://dev.azure.com/example-org/MyProject/_git/example-repo
directory: C:\workspaces
pat: '{{ado://example-org}}'
開發箱 Visual Studio Code 延伸模組和開發箱 CLI 不支援在自訂作業的內部迴圈測試工作流程中注入祕密。
使用服務主體向 Azure 資源進行驗證
服務主體可讓您安全地向 Azure 資源進行驗證,而不需要公開使用者認證。 建立服務主體、指派必要的角色,並使用它在自訂工作中進行驗證。 在自訂作業時,使用現有的祕密功能,從 Key Vault 注入其密碼。
在 Azure Active Directory 中建立服務主體(Azure AD),併為您想要使用的資源指派必要的角色。
輸出是包含服務主體的 appId、 displayName、 密碼和 租用戶的 JSON 物件,用於 Azure 自動化案例中的驗證和授權。
範例:建立服務主體時的 CLI 輸出。 將傳回的密碼儲存在 Key Vault 中,並將「Key Vault 祕密使用者」角色授與給開發人員中心專案身分識別,以便自訂作業可以在執行階段注入祕密。
$ az ad sp create-for-rbac -n DevBoxCustomizationsTest { "appId": "...", "displayName": "DevBoxCustomizationsTest", "password": "...", "tenant": "..." }將上述傳回的密碼儲存在 Key Vault 秘密中,如下所示:
https://mykeyvault.vault.azure.net/secrets/password在 Key Vault 上,將 Key Vault 秘密使用者 角色授與專案身分識別。
現在,您可以在自訂工作中進行驗證,並在自訂時間從 Key Vault 序列化服務主體密碼。
範例:從 Azure 記憶體下載檔案
下列範例示範如何從儲存體帳戶下載檔案。 YAML 程式碼片段會定義執行兩個主要工作的開發箱自訂:
使用 winget 套件管理員安裝 Azure CLI。
執行下列 PowerShell 腳稿:
- 使用服務主體登入 Azure,並以安全方式從 Azure Key Vault 取出密碼。
- 使用已驗證的工作階段,從 Azure 儲存體帳戶下載 Blob (檔案)。
範例:從 Key Vault 注入服務主體密碼,以及用它來進行驗證並從 Azure 儲存體下載 Blob 的自訂作業。 將服務主體密碼儲存在 Key Vault 中,並確定專案身分識別具有 Key Vault 秘密使用者角色。
$schema: "1.0" name: "devbox-customization" tasks: - name: ~/winget parameters: package: Microsoft.AzureCLI - name: ~/powershell parameters: command: | az login --service-principal ` --username <appId> ` --password {{https://mykeyvault.vault.azure.net/secrets/password}} ` --tenant <tenantId> az storage blob download ` --account-name <storage_account_name> ` --container-name <container_name> ` --name <blob_name> ` --file <local_file_path> ` --auth-mode login
此設定可讓您在開發箱布建期間自動使用 Azure 資源,而不需在腳本中公開認證。
範例:從 Azure DevOps 下載構件
使用服務主體進行驗證,從 Azure DevOps (ADO) 下載組建成品。 將服務主體的應用程式識別碼 (appId) 新增為 Azure DevOps 組織中的使用者,然後將主體指派給 [讀取者] 群組。 此步驟提供使用組建成品的必要許可權。
設定這些步驟之後,請在自定義工作中使用服務主體認證,從 Azure DevOps 安全地驗證和下載成品。
將服務主體新增至 Azure DevOps 組織
若要將服務主體新增至 Azure DevOps 組織:
登入您的 Azure DevOps 組織,然後開啟 [組織設定]。
在功能表中,選取 [使用者]。
在 使用者 頁面上,選取 新增使用者。
在 [ 新增使用者 ] 對話框中,輸入下列資訊:
- 使用者:輸入服務主體的應用程式識別碼 (appId) 作為使用者電子郵件。
- 存取層級:選取 [基本]。
- 新增至專案:選取您要新增服務主體的專案。
- Azure DevOps 群組:將服務主體指派給 讀者 群組。
完成授予必要許可權的步驟。
如需如何將使用者新增至 DevOps 組織的詳細資訊,請參閱 新增組織使用者和管理存取權。