共用方式為


保護 Azure Pipelines 中的秘密

本文提供保護 Azure Pipelines 中秘密的最佳做法。 祕密是指任何您想要嚴密控制存取的項目,例如 API 金鑰、密碼、憑證或密碼編譯金鑰。

Azure Pipelines 不會產生祕密值。 不過,您可能需要將祕密新增至管線,以儲存 API 金鑰等敏感資料。 若要深入了解如何設定祕密變數,請參閱設定祕密變數

如果有其他方法可用,請勿使用秘密

保護秘密的最佳方法是一開始沒有秘密。 檢查您的管線是否可以使用與使用秘密來執行工作不同的方法。

使用秘密變數

敏感性值絕不應儲存為純文本在 Azure Pipelines .yml 檔案中。

秘密變數可用於私人資訊,例如密碼、標識符,以及您不想在管線中公開的其他識別數據。 設定秘密變數的建議方式是使用 Azure 金鑰保存庫。 您也可以在 UI 或變數群組中設定秘密變數。 不建議使用記錄命令來設定秘密變數。 當您使用記錄命令設定秘密時,任何可以存取管線的人都能看到秘密。

秘密變數會加密,而且可以在管線中使用,而不公開其值。 雖然不會公開其值,但絕不會以輸出的形式回應秘密,也不會在命令行上傳遞秘密。 相反地,我們建議您將祕密對應至環境變數。

當您建立秘密時,請遵循 變數命名指導方針 ,並確定您的秘密名稱不會揭露敏感性資訊。

限制對秘密變數的存取

若要限制對 Azure DevOps 中秘密的存取,您可以:

  • 將您的秘密儲存在 Azure 金鑰保存庫。 使用 Azure 金鑰保存庫,您就可以使用 Azure 的角色型存取控制模型來限制對秘密或秘密群組的存取。
  • 在管線的UI中設定秘密變數。 在管線設定UI中設定的秘密變數會限定於其設定所在的管線。 因此,您可以擁有只有可存取該管線之使用者的秘密。
  • 在變數群組中設定秘密。 變數群組會遵循連結 庫安全性模型。 您可以控制誰可以在文檔庫中定義新專案,以及誰可以使用現有的專案。

不要將秘密寫入記錄

Azure Pipelines 會盡可能嘗試從記錄中清除祕密。 此篩選作業係盡力而為,無法攔截祕密可能洩漏的每個方式。 避免將祕密回應至主控台、在命令列參數中使用祕密,或將其記錄到檔案。 例如,某些 Azure CLI 命令輸出資訊,您必須保護。 如果您從管線呼叫 Azure CLI,請使用 None 輸出格式,而且如果您需要從 Azure CLI 呼叫擷取秘密,請使用無輸出格式,並將安全性資訊擷取至秘密變數。

請勿使用結構化數據做為秘密

結構化數據可能會導致記錄檔內的秘密修訂失敗,因為修訂在很大程度上依賴尋找特定秘密值的完全相符專案。 例如,請勿使用 JSON、XML 或 YAML 的 Blob 來封裝秘密值,包括歸位字元(\r)和換行字元(\n),因為這樣可大幅降低秘密正確修訂的機率。 相反地,請為每個敏感性值建立個別的秘密。

稽核秘密的處理方式

稽核秘密的使用方式,以協助確保秘密如預期般處理。 您可以檢閱裝載管線之存放庫的原始程式碼,並檢查管線中使用的任何工作,以執行此動作。 例如,檢查它們未傳送至非預期的主機,或明確地列印至記錄輸出。

在測試有效/無效的輸入之後,檢視管線的執行記錄,並檢查秘密是否已正確修改,或未顯示。 您叫用的命令或工具不一定會發出錯誤,而且秘密稍後可能會出現在錯誤記錄中。 Azure Pipelines 會盡可能嘗試從記錄中清除祕密。 此篩選作業係盡力而為,無法攔截祕密可能洩漏的每個方式。 因此,最好在測試有效且無效的輸入之後,手動檢閱管線記錄。

稽核和輪替秘密

定期檢閱管線所使用的已註冊秘密,以確認它們仍然需要,並移除不再需要的秘密。

定期輪替秘密,以減少遭入侵秘密有效期間的時間範圍。

管線使用的秘密型態可能包括:

下一步