共用方式為


設定秘密變數

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 SecretOneSecretTwo和 中定義了兩個秘密變數。 的值 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. 選取 [管線連結>庫>+ 變數] 群組。

    Screenshot of Add variable group button highlighted with red box.

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

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

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

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

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

    Screenshot of saving a variable group.

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

將現有的 Azure 金鑰保存庫連結至變數群組,並將選擇性保存庫秘密對應至變數群組。

  1. 在 [ 變數群組 ] 頁面中,啟用 Azure 金鑰保存庫中的連結秘密作為變數。 您需要包含秘密的現有金鑰保存庫。 使用 Azure 入口網站 建立金鑰保存庫。

    Screenshot of variable group with Azure key vault integration.

  2. 指定您的 Azure 訂用帳戶端點,以及包含秘密的保存庫名稱。

    請確定 Azure 服務連線至少 具有保存庫的取得列出 秘密管理許可權。 選擇保存庫名稱旁的 [ 授權 ],讓 Azure Pipelines 設定這些許可權。 或者,在 Azure 入口網站手動設定許可權:

    1. 開啟保存庫 設定,然後選擇 [存取原則>] [新增]。
    2. 選取 [ 選取主體 ],然後選擇用戶端帳戶的服務主體。
    3. 選取 [秘密許可權],並確定 [取得] 和 [列表] 具有複選標記。
    4. 選取 [ 確定 ] 以儲存變更。
  3. 在 [ 變數群組] 頁面上,選取 [+ 新增 ] 以從保存庫選取特定秘密,以對應至此變數群組。

管理金鑰保存庫秘密

請參閱下列用於管理秘密的實用秘訣清單。

  • 只有秘密 名稱 會對應至變數群組,而不是秘密值。 從保存庫擷取的最新秘密值會用於連結至變數群組的管線執行中。

  • 對密鑰保存庫中現有秘密所做的任何變更,都會自動提供給變數群組所使用的所有管線。

  • 當新的秘密新增至保存庫或刪除時,不會自動更新相關聯的變數群組。 變數群組中包含的秘密必須明確更新,以便正確執行使用變數群組的管線。

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

使用 Azure 金鑰保存庫 工作

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

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

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

    Add the Azure Key Vault task.

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 中的秘密變數輸出。

Screenshot of bash variable output.

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