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

Azure DevOps Services |Azure DevOps Server 2020 |Azure DevOps Server 2019 |TFS 2018

注意

在 Microsoft Team Foundation Server (TFS) 2018 和舊版中,組建和發行管線稱為定義、執行稱為組建服務連線稱為服務端點階段稱為環境,而作業稱為階段

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

  • 從 Git 存放庫查看原始程式碼
  • 將標籤新增至存放庫
  • 存取Azure Artifacts中的摘要
  • Upload從代理程式到服務的記錄
  • Upload從代理程式到服務的測試結果和其他成品
  • 更新工作專案

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

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

作業授權範圍

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

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

注意

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

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

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

若要設定特定專案的作業授權範圍:

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

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

注意

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

重要

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

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

TFS 中無法使用 YAML 管線。

注意

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

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

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

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

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

重要

預設會針對在 2020 年 5 月之後建立的新組織和專案,將作業授權範圍限制為參考的存放庫Azure DevOps。

限定範圍的組建身分識別

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集合組建服務 (your-collection-name) 。 如果作業授權範圍是 專案,則要管理許可權的組建服務帳戶是 Your-project-name Build Service (your-collection-name)

  • 若要限制或授與Project集合組建服務的其他存取權, (your-collection-name)

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

    • 只有在執行管線一次之後,才會建立您可以管理許可權的組建服務帳戶。 請確定您已執行管線一次。
    • 選取[Pipelines] 頁面上溢位功能表中的 [管理安全性]。
    • [使用者] 底下,選取 [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 ,專案範圍的組建身分識別會獲得存取專案中存放 FabrikamFiberfabrikam-tailspin/FabrikamFiber 的許可權。

  1. FabrikamFiber專案中,流覽至Project設定存放庫FabrikamFiber

    Configure repository access.

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

    Add user for repository access.

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

    Configure repository permissions.

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

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

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

    Configure project settings.

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

    Select SpaceGameWeb project-scoped build identity user.

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

    Configure user permissions.

常見問題集

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

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

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

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

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

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

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

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

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