分享方式:


設定秘密變數

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

祕密變數是可在管線中使用的加密變數,而不需要公開其值。 秘密變數可用於私人資訊,例如密碼、標識符,以及您不想在管線中公開的其他識別數據。 祕密變數會以 2048 位元 RSA 金鑰待用加密,而且可在代理程式上供工作和指令碼使用。

設定秘密變數的建議方式位於UI變數群組中,以及 Azure 金鑰保存庫的變數群組中。 您也可以 使用記錄命令 在腳本中設定秘密變數,但不建議這麼做,因為任何可以存取管線的人也可以看到秘密。

在管線的管線設定 UI 中設定的祕密變數,其範圍會限定於設定所在的管線。 您可以使用變數群組跨管線共用祕密變數。

UI 中的祕密變數

編輯個別管線時,您可以在管線編輯器中設定秘密變數。 您將選取鎖定圖示來加密並建立管線變數秘密。

您可以設定 YAML 和傳統密碼變數的相同方式。

若要在 Web 介面中設定祕密,請遵循下列步驟:

  1. 前往 [管線] 頁面,選取適當的管線,然後選取 [編輯]
  2. 找出此管線的 [變數]
  3. 新增或更新變數。
  4. 選取 [保留此值秘密] 選項,以加密方式儲存變數。
  5. 儲存管線。

祕密變數會以 2048 位元 RSA 金鑰待用加密。 代理程式上有祕密可供工作和指令碼使用。 留意誰可以存取並變更您的管線。

重要

我們努力遮罩秘密,使其無法出現在 Azure Pipelines 輸出中,但您仍然需要採取預防措施。 永遠不要將祕密回應為輸出。 某些作業系統會記錄命令列引數。 永遠不要在命令列上傳遞祕密。 相反地,我們建議您將祕密對應至環境變數。

我們絕不會遮罩秘密的子字串。 例如,如果 「abc123」 設定為秘密,則 「abc」 不會從記錄中遮罩。 這是為了避免在層級太細微時遮罩處理祕密,使記錄無法讀取。 因此,祕密不應包含結構化資料。 例如,如果「{ "foo": "bar" }」設定為祕密,則「bar」不會從記錄中遮罩處理。

不同於一般變數,它們不會自動解密為腳本的環境變數。 您必須明確對應秘密變數。

在UI中使用秘密變數

您必須將秘密變數對應為環境變數,以在 YAML 管線中參考它們。 在此範例中,UI SecretOne SecretTwo和 中定義了兩個秘密變數。 的值 SecretOnefoo ,且 的值 SecretTwobar

steps:
- powershell: |
      Write-Host "My first secret variable is $env:FOO_ONE"
      $env:FOO_ONE -eq "foo"
  env:
    FOO_ONE: $(SecretOne)
- bash: |
    echo "My second secret variable: $FOO_TWO"
    if [ "$FOO_TWO" = "bar" ]; then
        echo "Strings are equal."
    else
        echo "Strings are not equal."
    fi
  env:
    FOO_TWO: $(SecretTwo) 

管線會輸出:

My first secret variable is ***
True
My second secret variable: ***
Strings are equal.

注意

Azure Pipelines 會在將數據發出至管線記錄時,努力遮罩秘密,因此您可能會在未設定為秘密的輸出和記錄中看到其他變數和數據遮罩。

如需更詳細的範例,請參閱 定義變數

在變數群組中設定秘密變數

您可以將秘密新增至變數群組,或從現有的 Azure 金鑰保存庫 連結秘密。

建立新的變數群組

  1. 選取 [管線連結>庫>+ 變數] 群組。

    醒目提示紅色方塊的 [新增變數群組] 按鈕螢幕快照。

  2. 輸入群組的名稱和描述。

  3. 選擇性:移動切換開關以將秘密從 Azure 金鑰保存庫連結為變數。 如需詳細資訊,請參閱使用 Azure 金鑰保存庫 秘密

  4. 輸入要包含在群組中的每個變數的名稱和值 ,併為每個變數 選擇 [+ 新增 ]。

  5. 若要保護您的變數,請選擇資料列結尾的 「鎖定」圖示。

  6. 當您完成新增變數時,請選取 [ 儲存]。

    儲存變數群組的螢幕快照。

變數群組會遵循連結 庫安全性模型

您可以建立變數群組,連結至現有的 Azure 金鑰保存庫,並將選取的 金鑰保存庫 秘密對應至變數群組。 只有秘密名稱會對應至變數群組,而不是秘密值。 連結至變數群組的管線會從保存庫擷取最新的秘密值。

對密鑰保存庫中現有秘密所做的任何變更,都會自動提供給所有使用變數群組的管線使用。 不過,如果從保存庫新增或刪除秘密,則相關聯的變數群組不會自動更新。 您必須明確地更新秘密,以包含在變數群組中。

雖然 金鑰保存庫 支援在 Azure 中儲存和管理密碼編譯密鑰和憑證,但 Azure Pipelines 變數群組整合僅支持對應密鑰保存庫秘密。 不支援密碼編譯金鑰和憑證。

注意

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

必要條件

建立變數群組

  1. 在您的 Azure DevOps 專案中,選取 [管線連結>>+ 變數] 群組。
  2. 在 [ 變數群組] 頁面上,輸入變數群組的名稱和選擇性描述。
  3. 啟用 Azure 金鑰保存庫中的連結秘密作為變數切換。
  4. 選取您的 Azure 訂用帳戶端點和金鑰保存庫名稱。
  5. 選取保存庫名稱旁的 [ 授權 ],讓 Azure DevOps 存取金鑰保存庫。
  6. 在 [ 選擇秘密] 畫面上,從保存庫選取特定秘密以對應至此變數群組,然後選取 [ 確定]。
  7. 選取 [ 儲存 ] 以儲存秘密變數群組。

具有 Azure 金鑰保存庫整合之變數群組的螢幕快照。

注意

您的 Azure 服務連線至少 必須具有金鑰保存庫的 [取得 ] 和 [列出 ] 許可權,您可以在上述步驟中授權。 您也可以遵循下列步驟,從 Azure 入口網站 提供這些權限:

  1. 開啟金鑰保存庫的 [設定],然後選擇 [存取組態>移至存取原則]。
  2. 在 [存取原則] 頁面上,如果您的 Azure Pipelines 專案未列在 [至少取得列出許可權的應用程式] 底下,請選取 [建立]。
  3. 在 [秘密許可權] 底下,選取 [取得列表],然後選取 [下一步]。
  4. 選取您的服務主體,然後選取 [ 下一步]。
  5. 再次選取 [下一步 ],檢閱設定,然後選取 [ 建立]。

使用 Azure 金鑰保存庫 工作

您可以使用 Azure 金鑰保存庫 工作在管線中包含秘密。 此工作可讓管線連線到您的 Azure 金鑰保存庫,並擷取秘密做為管線變數。

  1. 在管線編輯器中,選取 [ 顯示小幫手 ] 以展開助理面板。

  2. 搜尋vault並選取 Azure 金鑰保存庫 工作

    新增 Azure 金鑰保存庫 工作。

Azure DevOps Server 2019 和 2020 目前不支援 [讓整個作業使用秘密] 選項。

若要深入瞭解 Azure 金鑰保存庫 工作,請參閱在 Azure Pipelines 中使用 Azure 金鑰保存庫 秘密。

使用記錄命令在指令碼中設定祕密變數

您可以使用 task.setvariable 記錄命令在 PowerShell 和 Bash 腳稿中設定變數。 這是使用秘密變數最不安全的方法,但對偵錯很有用。 設定祕密變數的建議方式是在 UI、變數群組和 Azure Key Vault 的變數群組中。

若要使用記錄命令將變數設定為腳本,您必須傳遞 issecret 旗標。

當 設定為 true 時 issecret ,變數的值將會儲存為秘密,並從記錄中遮罩。

注意

Azure Pipelines 會在將數據發出至管線記錄時,努力遮罩秘密,因此您可能會在未設定為秘密的輸出和記錄中看到其他變數和數據遮罩。

設定祕密變數 mySecretVal

- bash: |
    echo "##vso[task.setvariable variable=mySecretVal;issecret=true]secretvalue"

取得秘密變數 mySecretVal

- bash: |
    echo "##vso[task.setvariable variable=mySecretVal;issecret=true]secretvalue"
- bash: |
    echo $(mySecretVal)

bash 中的秘密變數輸出。

bash 變數輸出的螢幕快照。

深入瞭解如何在 腳本中設定和使用變數。