在管線中使用 Azure 金鑰保存庫秘密

Azure DevOps Services |Azure DevOps Server 2022 - Azure DevOps Server 2019

使用 Azure 金鑰保存庫,您可以安全地儲存和管理敏感性資訊,例如密碼、API 金鑰、憑證等。 使用 Azure 金鑰保存庫,您可以輕鬆地建立和管理加密金鑰來加密您的資料。 Azure 金鑰保存庫也可用來管理所有資源的憑證。 在本文中,您將學會如何:

  • 建立 Azure Key Vault。
  • 設定您的金鑰保存庫許可權。
  • 建立新的服務連線。
  • 從 Azure Pipeline 查詢秘密。

必要條件

建立 Azure Key Vault

  1. 巡覽至 Azure 入口網站

  2. 選取 左側流覽窗格中的 [建立資源 ]。

    A screenshot showing how to create a new resource in Azure portal.

  3. 搜尋金鑰保存庫 ,然後按 Enter 鍵。

    A screenshot showing how to search for Azure Key Vault in Azure portal.

  4. 選取 [建立 ] 以建立新的 Azure 金鑰保存庫。

    A screenshot showing how to create a new Azure Key Vault in Azure portal.

  5. 選取您的訂 用帳戶 ,然後新增資源群組。 輸入 金鑰保存庫名稱 ,然後選取 [ 區域 ] 和 [ 定價層 ]。 完成時,請選取 [ 檢閱 + 建立 ]。

    A screenshot showing the steps to create a new key vault in Azure portal.

  6. 完成新資源的部署時,選取 [移至資源 ]。

    A screenshot showing how to navigate to your resource in Azure portal.

建立服務主體

在此步驟中,我們將在 Azure 中建立新的 服務主體 ,讓我們能夠從 Azure Pipelines 查詢 Azure 金鑰保存庫。

  1. 巡覽至 Azure 入口網站

  2. 從功能表列,選取 > _ 圖示以開啟 Cloud Shell

  3. 選取 [PowerShell ],或根據您的喜好設定將它保留為 Bash

  4. 執行下列命令以建立新的服務主體:

    az ad sp create-for-rbac --name YOUR_SERVICE_PRINCIPAL_NAME
    
  5. 您的輸出應該符合下列範例。 請務必複製命令的輸出,因為您將需要在後續步驟中建立服務連線。

    {
      "appId": "p951q3e2-8e5r-z697-e9q52aviu8a2",
      "displayName": "MyServicePrincipal",
      "password": "***********************************",
      "tenant": "85wes2u6-63sh-95zx-2as3-qw58wex269df"
    }
    

設定金鑰保存庫存取權限

  1. 巡覽至 Azure 入口網站

  2. 選取您在上一個步驟中建立的金鑰保存庫。

  3. 選取存取原則

    A screenshot showing how to navigate to your key vault access policies in Azure portal.

  4. 選取 [新增存取原則 ] 以新增原則。

  5. [取得 ] 和 [清單 ] 新增至 [秘密] 許可權

    A screenshot showing how to add get and list permissions to your key vault in Azure portal.

  6. 在 [選取主體 ] 底 下,選取以新增服務主體,然後選擇您稍早建立的服務主體。

  7. 當完成時,選擇儲存

注意

不支援使用 Azure 角色型存取控制 (Azure RBAC) 的 Azure 金鑰保存庫。

建立新的服務連線

  1. 登入您的 Azure DevOps 組織,然後流覽至您的專案。

  2. 選取 gear icon [專案設定 ],然後選取 [服務連線 ]。

  3. 如果您在專案中第一次設定服務連線,請選取 [建立服務連線 ]。 如果您之前已建立服務連線,請選取 [ 新增服務連線 ]。

  4. 選取 [Azure Resource Manager ],然後選取 [ 下一步 ]。

  5. 選取 [服務主體][手動] ,然後選取 [ 下一步 ]。

  6. 選取 [範圍層級 ] 的 [訂 用帳戶],然後填入必要欄位,其中包含先前建立的服務主體中的資訊。 完成時選取 [ 驗證 ]:

    • 服務主體識別碼 :您的服務主體 appId
    • 服務主體金鑰 :您的服務主體 密碼
    • 租使用者識別碼 :您的服務主體 租使用者
  7. 提供服務連線的名稱,並確定您核取 [ 授與所有管線的存取權限 ] 核取方塊。

  8. 選取 [ 驗證],然後在完成時儲存

    A screenshot showing how to create a new manual service principal service connection.

查詢和使用管線中的秘密

使用 Azure 金鑰保存庫工作 ,我們可以擷取秘密的值,並在管線中的後續工作中使用它。 請記住,秘密必須明確對應至 env 變數,如下列範例所示。

pool:
  vmImage: 'ubuntu-latest'

steps:
- task: AzureKeyVault@1
  inputs:
    azureSubscription: 'repo-kv-demo'                    ## YOUR_SERVICE_CONNECTION_NAME
    KeyVaultName: 'kv-demo-repo'                         ## YOUR_KEY_VAULT_NAME
    SecretsFilter: 'secretDemo'                          ## YOUR_SECRET_NAME. Default value: *
    RunAsPreJob: false                                   ## Make the secret(s) available to the whole job

- task: DotNetCoreCLI@2
  inputs:
    command: 'build'
    projects: '**/*.csproj'

- task: DotNetCoreCLI@2
  inputs:
    command: 'run'
    projects: '**/*.csproj'
  env:
    mySecret: $(secretDemo)

- bash: |
    echo "Secret Found! $MY_MAPPED_ENV_VAR"        
  env:
    MY_MAPPED_ENV_VAR: $(mySecret)

上一個 bash 命令的輸出看起來應該像這樣:

Secret Found! ***

注意

如果您想要從 Azure 金鑰保存庫查詢多個秘密,請使用 SecretsFilter 引數來傳遞以逗號分隔的秘密名稱清單: 'secret1,secret2'