共用方式為


安全地連線到 Azure 資源或複製私人存放庫

當您在自訂程式期間存取存放庫或 Azure 資源等資源時,您必須安全地進行驗證。 您可以在自訂檔案中參考 Azure 金鑰保存庫秘密,以避免公開敏感性資訊,而且您可以使用服務主體向 Azure 進行驗證,以進行安全的資源存取。 本文說明如何在開發箱自定義期間安全地管理和存取資源。

在自定義檔案中使用金鑰庫中的機密

在 YAML 自定義中使用 Azure 金鑰保存庫中的秘密來複製私人存放庫或執行需要存取權杖的工作。 例如,在自定義檔案中,使用儲存在 Azure 金鑰保存庫中的個人存取權杖 (PAT) 來存取私人存放庫。

小組和使用者自定義都支援從密鑰保存庫擷取秘密。 使用映像定義檔案的小組自訂設定會使用image參數來定義開發箱的基礎映像,並列出開發箱建立時所執行的任務。 使用者自定義會列出建立開發方塊時執行的工作。

若要在自定義檔案中使用秘密,例如 PAT,請將它儲存為金鑰保存庫秘密。 下列範例示範如何在這兩種類型的自訂中參考金鑰保存庫秘密。

設定金鑰保存庫存取權以進行自訂

若要設定金鑰保存庫祕密以用於您的小組或使用者的自訂作業,請確定開發人員中心專案的受控識別具有您金鑰保存庫上的 Key Vault 祕密使用者角色。

如果您的金鑰保存庫是私人的,請讓受信任的 Microsoft 服務略過防火牆,因為開發人員中心尚不支援服務標籤。

下列螢幕擷取畫面顯示允許受信任的 Microsoft 服務略過 Azure 金鑰保存庫設定中防火牆的選項。

允許受信任的 Microsoft 服務略過 Azure 金鑰保存庫設定中防火牆的選項螢幕擷取畫面。

若要深入瞭解如何讓受信任的 Microsoft 服務略過防火牆,請參閱 設定 Azure 金鑰保存庫網路設定

使用者自訂的其他設定

若要配置用戶自訂的金鑰保存庫祕密,還請:

  1. 確定開發人員中心專案的受控識別具有您金鑰保存庫上的 Key Vault 讀者和 Key Vault 祕密使用者角色。
  2. 將祕密的「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 注入其密碼。

  1. 在 Azure Active Directory 中建立服務主體(Azure AD),併為您想要使用的資源指派必要的角色。

    輸出是包含服務主體的 appIddisplayName密碼租用戶的 JSON 物件,用於 Azure 自動化案例中的驗證和授權。

    範例:建立服務主體時的 CLI 輸出。 將傳回的密碼儲存在 Key Vault 中,並將「Key Vault 祕密使用者」角色授與給開發人員中心專案身分識別,以便自訂作業可以在執行階段注入祕密。

    $ az ad sp create-for-rbac -n DevBoxCustomizationsTest
    
    {
      "appId": "...",
      "displayName": "DevBoxCustomizationsTest",
      "password": "...",
      "tenant": "..."
    }
    
  2. 將上述傳回的密碼儲存在 Key Vault 秘密中,如下所示: https://mykeyvault.vault.azure.net/secrets/password

  3. 在 Key Vault 上,將 Key Vault 秘密使用者 角色授與專案身分識別。

現在,您可以在自訂工作中進行驗證,並在自訂時間從 Key Vault 序列化服務主體密碼。

範例:從 Azure 記憶體下載檔案

下列範例示範如何從儲存體帳戶下載檔案。 YAML 程式碼片段會定義執行兩個主要工作的開發箱自訂:

  1. 使用 winget 套件管理員安裝 Azure CLI。

  2. 執行下列 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 組織:

  1. 登入您的 Azure DevOps 組織,然後開啟 [組織設定]。

  2. 在功能表中,選取 [使用者]。

  3. 使用者 頁面上,選取 新增使用者

  4. 在 [ 新增使用者 ] 對話框中,輸入下列資訊:

    Azure DevOps 中 [新增使用者] 對話框的螢幕快照,其中顯示使用者電子郵件、存取層級、專案和群組指派的欄位。

    • 使用者:輸入服務主體的應用程式識別碼 (appId) 作為使用者電子郵件。
    • 存取層級:選取 [基本]。
    • 新增至專案:選取您要新增服務主體的專案。
    • Azure DevOps 群組:將服務主體指派給 讀者 群組。
  5. 完成授予必要許可權的步驟。

如需如何將使用者新增至 DevOps 組織的詳細資訊,請參閱 新增組織使用者和管理存取權。