共用方式為


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

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 存放庫

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

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

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

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

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

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

  • 若要限制或授與 專案集合建置服務 (your-collection-name)的其他存取權:

    • 在 [管線 ] 頁面 的溢位功能表中,選取 [管理安全性]。
    • 在 [使用者] 底下,選取 [專案集合建置服務 [your-collection-name]
    • 對此帳戶的管線相關許可權進行任何變更。
    • 流覽至 Azure DevOps 組織的組織設定(或專案集合的集合設定)。
    • [安全性] 下,選取 [權限]
    • 在 [使用者] 索引標籤底下,尋找 Project Collection Build Service (your-collection-name)
    • 對此帳戶的非管線相關許可權進行任何變更。
    • 由於 專案集合建置服務(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. 建立名為 外部專案的新群組,並新增 SpaceGameWeb Build Service 帳戶。 建立新安全組的螢幕快照。

  3. 選擇 [Users],開始輸入 spaceGameWeb 名稱,然後選取 SpaceGameWeb Build Service 帳戶。 如果您一開始看不到任何搜尋結果,請選擇 [展開搜尋

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

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

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

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

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

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

  2. FabrikamFiber 專案中,流覽至 項目設定存放庫FabrikamFiber

    設定存放庫存取權。

  1. 選擇 + 圖示,開始輸入 name SpaceGameWeb,然後選取 SpaceGameWeb Build Service 帳戶。

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

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

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

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

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

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

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

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

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

    設定用戶權力。

常見問題

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

  • 如果您的專案是公用專案,不論任何其他設定為何,作業授權範圍一律 專案
  • 檢查 Azure DevOps 底下的管線設定 組織設定
    • 如果 啟用將作業授權範圍限制為目前的專案,則範圍會 專案
    • 如果 未啟用將作業授權範圍限制為目前的專案,請在 Azure DevOps 中的 [項目設定] 底下檢查 [管線設定]
      • 如果 啟用將作業授權範圍限制為目前的專案,則範圍會 專案
      • 否則,範圍會 集合
  • 如果管線位於私人專案中,請檢查 Azure DevOps 底下的管線設定 組織設定
    • 如果啟用 將非發行管線的工作授權範圍限製為目前專案,則範圍會 專案
    • 如果 未啟用非發行管線目前專案的作業授權範圍,請在 Azure DevOps 中的 [項目設定] 底下核取 [管線設定]
      • 如果啟用 將非發行管線的工作授權範圍限製為目前專案,則範圍會 專案
      • 否則,範圍會 集合

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

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

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

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

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

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