限制代理程式記錄

已完成

使用 Azure Pipelines 建置和部署應用程式時,請務必確保管線代理程式不會不小心記錄密碼、API 金鑰或其他祕密等機密資訊。 如果在建置或部署流程期間將敏感性資訊列印到主控台,就可能發生此情況,而導致嚴重的安全性風險。

在本單元中,了解如何設定 Azure Pipelines 和 YAML 管線,以使用最佳做法和安全方法限制祕密的代理程式記錄。

祕密記錄

Azure Pipelines 會盡可能嘗試從記錄中清除祕密。 此篩選作業係盡力而為,無法攔截祕密可能洩漏的每個方式。 避免將祕密回應至主控台、在命令列參數中使用祕密,或將其記錄到檔案。

使用稽核服務

稽核服務中會記錄許多管線事件。 定期檢閱稽核記錄檔,以確保沒有任何惡意變更過去。 請造訪 https://dev.azure.com/ORG-NAME/_settings/audit 以開始使用。

限制祕密代理程式記錄的方式

使用 Azure Pipelines 時,通常會使用服務連線,為敏感性資訊新增一層安全性,例如使用者名稱、密碼和 API 金鑰。 如果沒有服務連線或其他最佳做法,管線會保持不安全狀態,而且其資訊可以在管線記錄中輕鬆存取和公開,進而造成潛在的資料外泄和安全性風險。

依照這些建議和我們在其他單元中涵蓋的建議,您可以確定您的敏感性資訊會保持安全,而且您的管線仍為貴組織提供受信任且可靠的工具。

  • 使用 Azure Key Vault:您可以將敏感性資訊,例如密碼和 API 金鑰,與 Azure Key Vault 中的管線分開儲存。 您可以在管線中參考這些祕密,而不需在管線記錄中顯示這些祕密。 若要使用 Azure Key Vault,您可以建立新的 Azure Key Vault 執行個體、將祕密新增至保存庫,然後使用 Azure Key Vault 工作在管線中參考它們。
  • 使用變數群組:變數群組是儲存和管理跨多個管線使用的變數的便利方式。 您可以建立新的變數群組、將敏感性資訊新增為變數,然後在管線中加以參考。 藉由將這些變數標示為「祕密」,您可以確定它們不會顯示在管線記錄中。
  • 使用環境變數:您也可以使用環境變數來儲存敏感性資訊。 環境變數是儲存可在相同電腦上執行之流程存取之資料的一種方式。 在 Azure Pipelines 中,您可以定義管線、作業或工作環境變數。 藉由將這些變數標示為「祕密」,您可以確定它們不會顯示在管線記錄中。

無論您選擇的方法為何,請務必確定您的敏感性資訊無法在管線記錄中輕鬆存取。

使用代理程式層級記錄限制

限制祕密代理程式記錄的另一種方式是使用代理程式層級記錄限制。 這些限制可防止將特定命令或記錄層級列印到主控台,進一步降低公開敏感性資訊的風險。

若要使用代理程式層級記錄限制,請遵循下列步驟:

  1. 編輯您的管線。
  2. 選取 [變數]。
  3. 使用名稱 System.Debug 和值 true 新增變數。 Screenshot of Azure Pipelines showing how to add a new system.debug=true variable.
  4. 儲存新的變數。
  5. 執行管線以查看記錄。

此設定 System.Debug=False 會關閉所有執行的詳細資訊記錄。 使用 [啟用系統診斷] 核取方塊,您也可以設定單一執行的詳細資訊記錄。 如需詳細資訊,請參閱檢閱記錄以診斷管線問題。

使用 issecret 參數

參數 issecret 可讓您遮罩代理程式記錄中的祕密。

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

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

設定祕密變數 mySecretVal

- powershell: |
    Write-Host "##vso[task.setvariable variable=mySecretVal;issecret=true]secretvalue"

取得祕密變數 mySecretVal。

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

PowerShell 變數的輸出。

***
Finishing: Powershell

挑戰自己

使用將祕密變數記錄至代理程式記錄的工作,建立新的 YAML 管線。 使用 issecret參數,設定管線以遮罩記錄中的祕密。

如需祕密的詳細資訊,請參閱: