存取存放庫、成品和其他資源

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

在運行時間,管線中的每個作業都可能會存取 Azure DevOps 中的其他資源。 例如,作業可能會:

  • 從 Git 存放庫簽出原始程式碼
  • 將標籤新增至存放庫
  • 存取 Azure Artifacts 中的摘要
  • 將記錄從代理程式上傳至服務
  • 將測試結果和其他成品從代理程式上傳至服務
  • 更新工作項目

Azure Pipelines 會使用作業存取權杖來執行這些工作。 作業 存取令牌 是 Azure Pipelines 在運行時間針對每個作業動態產生的安全性令牌。 執行作業的代理程式會使用作業存取權杖,以便在 Azure DevOps 中存取這些資源。 您可以控制授與作業存取權杖權限的方式,來控制管線可以存取哪些資源。

權杖的權限衍生自 (a) 作業授權範圍及 (b) 您在專案或集合組建服務帳戶上設定的權限。

作業授權範圍

您可以將作業授權範圍設定為 集合專案。 藉由將範圍設定為 集合,您可以選擇讓管線存取集合或組織中的所有存放庫。 藉由將範圍設定為 專案,您可以選擇只限制存取與管線位於相同專案中的存放庫。

您可以針對整個 Azure DevOps 組織或特定項目設定作業授權範圍。

注意

在 Azure DevOps Server 2020 中, 將作業授權範圍限製為目前專案 僅適用於 YAML 管線和傳統組建管線。 它不適用於傳統發行管線。 傳統發行管線一律會以專案集合範圍執行。

若要設定組織的作業授權範圍:

  • 流覽至 Azure DevOps 使用者介面中的組織設定頁面。
  • 選取 [管線] 底下的 [設定]。
  • 啟用 將作業授權範圍限製為目前專案 ,以將範圍限製為專案。 這是建議的設定,因為它可增強管線的安全性。

若要設定特定項目的作業授權範圍:

  • 流覽至 Azure DevOps 使用者介面中的項目設定頁面。
  • 選取 [管線] 底下的 [設定]。
  • 啟用 將作業授權範圍限製為目前專案 ,以將範圍限製為專案。 這是建議的設定,因為它可增強管線的安全性。
  • 若要在所有項目的組織層級設定作業授權範圍,請選擇 [組織設定>管線> 設定]。
  • 若要設定特定專案的作業授權範圍,請選擇 [項目設定>管線> 設定]。

啟用下列一或多個設定。 建議啟用這些設定,因為它可增強管線的安全性。

  • 將作業授權範圍限制為非發行管線的目前專案 - 此設定適用於 YAML 管 線和傳統組建管線,不適用於 傳統發行管線
  • 將作業授權範圍限制為發行管線 目前的專案 - 此設定 僅適用於傳統發行管線

注意

如果範圍設定為組織層級的專案,則您無法變更每個專案中的範圍。

重要

如果範圍未限制在組織層級或專案層級,則 YAML 管線中的每個作業都會取得集合範圍的工作存取令牌。 換句話說,您的管線可以存取組織任何專案中的任何存放庫。 如果敵人能夠在單一專案中取得單一管線的存取權,他們將能夠存取您組織中的任何存放庫。 因此,建議您限制最高層級的範圍(組織設定),以包含對單一項目的攻擊。

如果您使用 Azure DevOps Server 2019,則所有 YAML 作業都會以設定為集合作業授權範圍執行。 換句話說,這些作業可以存取專案集合中的所有存放庫。 您無法在 Azure DevOps Server 2019 中變更此專案。

TFS 中無法使用YAML管線。

注意

如果您的管線位於 公用專案中,則不論您在任何設定中設定什麼,作業授權範圍都會自動限製為 專案 。 公用專案中的作業只能存取專案內的組建成品或測試結果等資源,而不是從組織的其他專案存取。

將作業授權範圍限制為參考的 Azure DevOps 存放庫

除了上一 節所述的作業授權範圍設定之外,Azure Pipelines 還提供限制作業授權範圍給參考的 Azure DevOps 存放庫 設定。

除非已啟用將作業授權範圍限制為參考的 Azure DevOps 存放庫,否則 管線可以存取授權專案中的任何 Azure DevOps 存放庫 。 啟用此選項后,您可以將所有管線的存取範圍縮減為只有使用該存放庫之管線作業中的步驟或uses語句明確參考checkout的 Azure DevOps 存放庫。

如需詳細資訊,請參閱 Azure Repos Git 存放庫 - 將作業授權範圍限制為參考的 Azure DevOps 存放庫

保護 YAML 管線中存放庫的存取

除了上一 節所述的作業授權範圍設定之外,Azure Pipelines 還提供保護 YAML 管線 中存放庫存取權設定。

除非已啟用保護 YAML 管線中存放庫的存取,否則管線可以存取授權專案中的任何 Azure DevOps 存放庫。 啟用此選項后,您可以將所有管線的存取範圍縮減為只有使用該存放庫之管線作業中的步驟或uses語句明確參考checkout的 Azure DevOps 存放庫。

如需詳細資訊,請參閱 Azure Repos Git 存放庫 - 保護 YAML 管線中存放庫的存取權。

重要

默認會針對在 2020 年 5 月之後建立的新組織和專案,啟用 YAML 管線 中存放庫的存取。

限定範圍的組建身分識別

Azure DevOps 會使用兩個內建身分識別來執行管線。

  • 集合範圍的身分識別,可存取集合中的所有專案(或 Azure DevOps Services 的組織)
  • 專案範圍的身分識別,可存取單一專案

這些身分識別是在回呼 Azure DevOps 系統時執行建置/發行運行時間活動所需的配置許可權。 有內建的默認許可權,您也可以視需要管理自己的許可權。

集合範圍識別名稱的格式如下:

  • Project Collection Build Service ({OrgName})
  • 例如,如果組織名稱為 fabrikam-tailspin,則此帳戶的名稱為 Project Collection Build Service (fabrikam-tailspin)

專案 範圍的身 分識別名稱具有下列格式:

  • {Project Name} Build Service ({Org Name})
  • 例如,如果組織名稱是 fabrikam-tailspin 且專案名稱為 SpaceGameWeb,則此帳戶的名稱為 SpaceGameWeb Build Service (fabrikam-tailspin)

根據預設,除非如先前 的作業授權範圍一節中所述設定,否則會使用集合範圍 識別。

管理組建服務帳戶許可權

設定專案範圍存取的其中一個結果可能是專案範圍身分識別可能沒有集合範圍資源的許可權。

在下列案例中,您可能想要變更作業存取令牌的許可權:

  • 您希望管線存取位於不同專案中的摘要。
  • 您希望管線受限於變更存放庫中的程序代碼。
  • 您希望管線受限於建立工作專案。

若要更新作業存取權杖的權限:

  • 首先,判斷管線的作業授權範圍。 請參閱上一節以瞭解作業授權範圍。 如果作業授權範圍是集合,則要管理許可權的對應組建服務帳戶是 Project Collection Build Service (your-collection-name)。 如果作業授權範圍是專案,則要管理許可權的組建服務帳戶是Your-project-name Build Service (your-collection-name)。

  • 若要限制或授與 Project Collection Build Service 的其他存取 權(your-collection-name)

    • 在 [管線] 頁面上的溢位功能表中,選取 [管理安全性]。
    • 在 [使用者] 底下,選取 [專案集合建置服務] [your-collection-name]。
    • 對此帳戶的管線相關許可權進行任何變更。
    • 流覽至 Azure DevOps 組織的組織設定(或專案集合的集合設定)。
    • 選取 [安全性] 底下的 [許可權]。
    • 在 [使用者] 索引標籤下,尋找 [專案集合建置服務] (your-collection-name)。
    • 對此帳戶的非管線相關許可權進行任何變更。
    • 由於 Project Collection Build Service (your-collection-name) 是貴組織或集合中的使用者,因此您可以將此帳戶明確新增至任何資源,例如,新增至 Azure Artifacts 中的摘要。
  • 若要限制或授與 Your-project-name Build Service (your-collection-name)的其他存取權:

    • 您只能在執行管線一次之後,才建立您可以管理許可權的組建服務帳戶。 請確定您已執行管線一次。
    • 在 [管線] 頁面上的溢位功能表中,選取 [管理安全性]。
    • 在 [使用者] 底下,選取 [Your-project-name Build Service] [your-collection-name]。
    • 對此帳戶的管線相關許可權進行任何變更。
    • 流覽至 Azure DevOps 組織的組織設定(或專案集合的集合設定)。
    • 選取 [安全性] 底下的 [許可權]。
    • 在 [ 使用者] 索引標籤下,尋找 Your-project-name 建置服務 (your-collection-name)
    • 對此帳戶的非管線相關許可權進行任何變更。
    • 因為 Your-project-name Build Service (your-collection-name) 是貴組織或集合中的使用者,因此您可以明確地將此帳戶新增至任何資源,例如,新增至 Azure Artifacts 中的摘要。

設定項目的許可權,以存取相同專案集合中的另一個專案

在此範例中 fabrikam-tailspin/SpaceGameWeb ,專案範圍的組建身分識別會獲授與存取 fabrikam-tailspin/FabrikamFiber 項目的許可權。

  1. FabrikamFiber 專案中,流覽至 [項目設定]、[許可權]。

    如何設定項目設定的螢幕快照。

  2. 建立名為 External Projects 的新群組,並新增 SpaceGameWeb Build Service 帳戶。 建立新安全組的螢幕快照。

  3. 選擇 [使用者],開始輸入SpaceGameWeb名稱,然後選取SpaceGameWeb建置服務帳戶。 如果您一開始看不到任何搜尋結果,請選取 [展開搜尋]。

    選取 SpaceGameWeb 專案範圍的組建身分識別用戶的螢幕快照。

  4. 授與該用戶的檢視 專案層級信息 許可權。

    如何授與用戶檢視專案層級資訊許可權的螢幕快照。

範例 - 設定許可權以存取相同專案集合中的另一個存放庫

在此範例中 fabrikam-tailspin/SpaceGameWeb ,專案範圍的組建身分識別會獲得存取專案中存放 FabrikamFiberfabrikam-tailspin/FabrikamFiber 的許可權。

  1. 請依照步驟授 SpaceGameWeb 專案範圍組建身分識別許可權,以存取 FabrikamFiber 專案

  2. 在 FabrikamFiber 專案中,流覽至 [項目設定]、[存放庫]、[FabrikamFiber]。

    設定存放庫存取權。

  1. +選擇圖示,開始輸入SpaceGameWeb名稱,然後選取SpaceGameWeb建置服務帳戶。

    新增使用者以進行存放庫存取。

  1. 開始輸入 SpaceGameWeb 名稱,然後選取 SpaceGameWeb Build Service 帳戶。

    如何新增使用者以進行存放庫存取的螢幕快照。

  1. 與該使用者的讀取 許可權。

    如何設定存放庫許可權的螢幕快照。

範例 - 設定許可權以存取相同專案集合中的其他資源

在此範例中 fabrikam-tailspin/SpaceGameWeb ,專案範圍的組建身分識別會獲得存取專案中其他資源 fabrikam-tailspin/FabrikamFiber 的許可權。

  1. 請依照步驟授 SpaceGameWeb 專案範圍組建身分識別許可權,以存取 FabrikamFiber 專案

  2. 設定該使用者所需的許可權。

    設定用戶權力。

常見問題集

如何? 判斷 YAML 管線的作業授權範圍嗎?

  • 如果您的專案是公用專案,不論任何其他設定為何,作業授權範圍一律 是專案

Azure DevOps Server 2019 中的所有 YAML 管線都會在集合作業授權範圍下執行。

  • 檢查 Azure DevOps 組織設定底下的管線設定
    • 如果 已啟用將作業授權範圍限製為目前專案 ,則範圍是 專案
    • 如果未 啟用將作業授權範圍限制為目前的專案,請在 Azure DevOps 中的 [ 項目設定] 底下 檢查 [管線] 設定
      • 如果 已啟用將作業授權範圍限製為目前專案 ,則範圍是 專案
      • 否則,範圍是 集合
  • 如果管線位於私人專案中,請檢查 Azure DevOps 組織設定下的管線設定
    • 如果 已啟用將非發行管線 的工作授權範圍限製為目前專案,則範圍為 專案
    • 如果未啟用將非發行管線的工作授權範圍限制為目前專案,請在 Azure DevOps 中的 Project 設定底下檢查管線設定
      • 如果 已啟用將非發行管線 的工作授權範圍限製為目前專案,則範圍為 專案
      • 否則,範圍是 集合

如何? 判斷傳統組建管線的工作授權範圍嗎?

  • 如果管線位於公用專案中,則不論任何其他設定為何,作業授權範圍都是 專案
  • 開啟管線的編輯器,然後流覽至 [ 選項 ] 索引標籤。
    • 如果 [建置 作業授權範圍 ] 是 [目前專案],則 scope 是 project
    • 否則,範圍是 集合
  • 檢查 Azure DevOps 組織設定底下的管線設定
    • 如果 已啟用將作業授權範圍限製為目前專案 ,則範圍是 專案
    • 如果未 啟用將作業授權範圍限制為目前的專案,請在 Azure DevOps 中的 [ 項目設定] 底下 檢查 [管線] 設定
      • 如果 已啟用將作業授權範圍限製為目前專案 ,則範圍是 專案
      • 如果未 啟用將作業授權範圍限制為目前的專案 ,請開啟管線的編輯器,然後流覽至 [選項 ] 索引標籤。
        • 如果 [建置 作業授權範圍 ] 是 [目前專案],則 scope 是 project
        • 否則,範圍是 集合
  • 如果管線位於私人專案中,請檢查 Azure DevOps 組織設定下的管線設定
    • 如果 已啟用將非發行管線 的工作授權範圍限製為目前專案,則範圍為 專案
    • 如果未啟用將非發行管線的工作授權範圍限制為目前專案,請在 Azure DevOps 中的 Project 設定底下檢查管線設定
      • 如果 已啟用將非發行管線 的工作授權範圍限製為目前專案,則範圍為 專案
      • 如果未 啟用將作業授權範圍限制為非發行管線的目前專案,請開啟管線 的編輯器,然後流覽至 [選項 ] 索引標籤。
        • 如果 [建置 作業授權範圍 ] 是 [目前專案],則 scope 是 project
        • 或者,範圍是 集合

建立新的傳統管線時, 作業授權範圍 會設定為 目前的專案 ,而 建置作業授權範圍 預設會設定為 專案

如何? 判斷傳統發行管線的工作授權範圍嗎?

Azure DevOps Server 2020 和以下版本中的傳統發行管線會以 集合 範圍執行。

  • 如果管線位於公用專案中,則不論任何其他設定為何,作業授權範圍都是 專案
  • 如果管線位於私人專案中,請檢查 Azure DevOps 組織設定下的管線設定
    • 如果 已啟用將作業授權範圍限制為目前發行管線 的專案,則範圍為 專案
    • 如果未啟用將作業授權範圍限制為目前發行管線的專案,請在 Azure DevOps 中的 Project 設定底下檢查管線設定
      • 如果 已啟用將作業授權範圍限制為目前發行管線 的專案,則範圍為 專案
      • 否則,範圍是 集合