在 Azure Pipelines 中使用 Azure Key Vault 秘密

Azure Pipelines |Azure DevOps Server 2020 |Azure DevOps Server 2019

注意

本文將引導您在管線中使用 Azure key vault。 如果您想要設定秘密變數或參考變數群組,請參閱 定義變數 以取得詳細資料。

Azure Key Vault 可讓使用者安全地儲存、管理及存取機密資訊。 秘密可以是 API 金鑰、認證、憑證等。

Azure Key Vault 服務支援兩種類型的容器:保存庫和受控 HSM (硬體安全模組) 集區。 保存庫支援儲存軟體和 HSM 支援的金鑰、秘密和憑證,而受管理的 HSM 集區則只支援 HSM 支援的金鑰。

在本教學課程中,您將學會如何:

  • 使用 Azure CLI 建立 Azure Key Vault
  • 新增秘密並設定 Azure key vault 的存取權
  • 在您的管線中使用秘密

先決條件

建立 Azure Key Vault

您可以透過 Azure 入口網站或 Azure CLI 來建立和管理 Azure 金鑰保存庫。 我們將在本教學課程中使用 Azure CLI 來建立 Azure Key vault。

登入 Azure 入口網站,然後選取右上角的 Cloud Shell 按鈕。

  1. 如果您有多個 Azure 訂用帳戶與您的帳戶相關聯,請使用下列命令來指定預設訂用帳戶。 您可以使用 az account list 來產生訂用帳戶的清單。

    az account set --subscription <your_subscription_name_or_ID>
    
  2. 執行下列命令來設定您的預設 Azure 區域。 您可以使用 az account list-locations 來產生可用區域的清單。

    az configure --defaults location=<your_region>
    

    例如,此命令會選取 westus2 區域:

    az configure --defaults location=westus2
    
  3. 執行下列命令以建立新的資源群組。 資源群組是存放 Azure 方案相關資源的容器。

    az group create --name <your-resource-group>
    
  4. 執行下列命令以建立新的金鑰保存庫。

    az keyvault create \
      --name <your-key-vault> \
      --resource-group <your-resource-group>
    
  5. 執行下列命令,在您的金鑰保存庫中建立新的密碼。 秘密會儲存為機碼值組。 在下列範例中, Password 是索引鍵,而 mysecretpassword 則是值。

    az keyvault secret set \
      --name "Password" \
      --value "mysecretpassword" \
      --vault-name <your-key-vault-name>
    

建立專案

登入 Azure Pipelines。 然後,您的瀏覽器會流覽 https://dev.azure.com/your-organization-name 並顯示您的 Azure DevOps 儀表板。

如果您的組織中還沒有任何專案,請選取 [ 建立專案] 以開始 建立新專案。 否則,請選取儀表板右上角的 [ 新增專案 ] 按鈕。

建立存放庫

我們會使用 YAML 來建立管線,但必須先建立新的存放庫。

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

  2. 移至 [ 存放庫],然後選取 [ 初始化 ] 以使用讀我檔案初始化新的存放庫。

    建立存放庫

建立新管線

  1. 移至 [ 管線],然後選取 [ 新增管線]。

  2. 選取 Azure Repos Git

    建立管線

  3. 選取您稍早建立的存放庫。 它應該與您 Azure DevOps 專案的名稱相同。

  4. 選取 [ 入門管線]。

  5. 預設管線將包含一些執行 echo 命令的腳本。 這不是必要的,因此我們可以將它們刪除。 新的 YAML 檔案現在看起來像這樣:

    trigger:
    - main
    
    pool:
      vmImage: 'ubuntu-latest'
    
    steps:
    
  6. 選取 [ 顯示 小幫手] 以展開 [助理] 面板。 此面板提供方便且可搜尋的管線工作清單。

    顯示管線助理

  7. 搜尋保存 ,然後選取 Azure Key Vault 工作。

    選取 Azure Key Vault 工作

  8. 選取並授權您的 Azure 訂用帳戶,然後選取 Azure 金鑰保存庫工作並選取 [ 新增 ],將其新增至您的管線。 這項工作可讓管線連接到您的 Azure Key Vault,並取出秘密以作為管線變數使用。

    注意

    Azure DevOps Server 2019 和2020目前不支援「 將秘密提供給整個作業 」功能。

    設定 Azure Key Vault 工作

  9. 您的 YAML 檔看起來應該像下面這樣

    trigger:
    - main
    
    pool:
      vmImage: ubuntu-latest
    
    steps:
    - task: AzureKeyVault@2
      inputs:
        azureSubscription: 'Your-Azure-Subscription'
        KeyVaultName: 'Your-Key-Vault-Name'
        SecretsFilter: '*'
        RunAsPreJob: false
    
    - task: CmdLine@2
      inputs:
        script: 'echo $(Your-Secret-Name) > secret.txt'
    
    - task: CopyFiles@2
      inputs:
        Contents: secret.txt
        targetFolder: '$(Build.ArtifactStagingDirectory)'
    
    - task: PublishBuildArtifacts@1
      inputs:
        PathtoPublish: '$(Build.ArtifactStagingDirectory)'
        ArtifactName: 'drop'
        publishLocation: 'Container'
    
  10. 您還不要儲存或執行管線。 我們必須先為管線提供存取 Azure Key Vault 的正確許可權。 將您的瀏覽器索引標籤保持開啟,我們會在設定金鑰保存庫許可權之後,繼續其餘步驟。

設定 Azure Key Vault 存取原則

為了存取我們的 Azure Key Vault,我們必須先設定服務主體來授與 Azure Pipelines 的存取權。 遵循 本指南 來建立您的服務主體,然後繼續進行本節中的下一個步驟。

  1. 移至 Azure 入口網站

  2. 使用搜尋列來搜尋您稍早建立的金鑰保存庫。

    搜尋 Azure Key Vault

  3. 在 [ 設定 ] 底下,選取 [ 存取原則]。

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

  5. 若為 秘密許可權,請選取 [ 取得列出]。

  6. 選取選項來選取服務主體,並搜尋您在本節一開始所建立的服務主體。 安全性主體是一個物件,代表要求存取 Azure 資源的使用者、群組、服務或應用程式。

  7. 選取 [ 新增 ] 以建立存取原則,然後 儲存

執行和檢查管線

  1. 返回先前的索引標籤。

  2. 選取 [ 儲存 ],然後再次 儲存 以認可您的變更,並觸發管線。

    注意

    如果系統提示您選取 [ 允許],系統可能會要求您允許管線存取 Azure 資源。 您只需要核准一次您的管線。

  3. 選取 CmdLine 作業來查看記錄。

    檢查命令列工作

  4. 返回 [管線摘要],然後選取已發佈的成品。

    管線摘要

  5. 在 [ 工作 ] 底下,選取 secret.txt 檔案以開啟它。

    在成品中查看秘密

  6. 文字檔應該包含我們的秘密: mysecretpassword 自先前的內容。

警告

本教學課程僅適用于教育用途。 如需安全性最佳作法,以及如何安全地處理秘密,請參閱 使用 Azure Key Vault 管理您的伺服器應用程式中的秘密

如果您遇到錯誤,指出使用者或群組沒有金鑰保存庫的秘密清單許可權,請執行下列命令,以授權您的應用程式存取 Azure Key Vault 中的金鑰或密碼:

$ErrorActionPreference="Stop";
Login-AzureRmAccount -SubscriptionId your-subscription-ID;
$spn=(Get-AzureRmADServicePrincipal -SPN service-principal-ID);
$spnObjectId=$spn.Id;
Set-AzureRmKeyVaultAccessPolicy -VaultName key-vault-tutorial -ObjectId $spnObjectId -PermissionsToSecrets get,list;

清除資源

請遵循下列步驟來刪除您所建立的資源:

  1. 如果您已建立新的組織來裝載您的專案,請參閱 如何刪除您的組織,否則請 刪除您的專案

  2. 在本教學課程中建立的所有 Azure 資源都會裝載于單一資源群組 PipelinesKeyVaultResourceGroup 下。 執行下列命令,以刪除資源群組及其所有資源。

    az group delete --name PipelinesKeyVaultResourceGroup
    

下一步

Azure Pipelines 中的構件 在 Azure Pipelines 中發佈和下載構件發行成品和構件來源