共用方式為


防範惡意公共套件

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

使用 Azure Artifacts 上游來源,開發人員能夠更方便地使用統一的來源來發佈和取用套件,無論是從 Artifacts 提要還是像 NuGet.org 或 npmjs.com 等熱門公共儲存庫。

允許外部來源版本

這項功能可讓開發人員控制他們是否想要從公用登錄取用套件版本,例如 NuGet.org 或 npmjs.com。

一旦為特定套件啟用 [允許外部版本] 切換,來自公用註冊表的版本就可以下載。 根據預設,此選項已停用,藉由防止從公開註冊表暴露於潛在惡意套件,來增加一層額外的安全保障。 您必須是 訂閱資料擁有者,才能啟用 允許外部來源版本的功能

注意

變更此設定不會影響已儲存至饋送的套件版本。 無論此設定為何,這些版本都會保持可存取。

適用的案例

下一節概述外部版本(公用登錄中的套件)遭到封鎖或允許儲存至摘要的常見案例。 在本文其餘部分,我們將來自公開註冊表的套件稱為公用套件,而將 Azure Artifacts 資源饋送中的套件稱為私人套件。

案例 1:公用版本遭到封鎖

原為私人使用的套件版本已公開

在此情境中,團隊擁有的私人套件被公開了。 在此情況下,外部版本設定會導致資訊源封鎖來自公共來源的該套件名稱的任何新版本的取用。

此圖顯示公開的內部套件版本。

同時擁有私人和公用套件

在這種情況下,如果團隊使用私人和公共套件的組合,禁止外部來源的套件會阻止來自公開註冊表的任何新套件版本。

顯示可用私人和公用套件的圖例。

案例 2:不會封鎖公用版本

所有套件都是私人的*

如果所有現有的套件都是私人套件,且小組沒有計劃使用任何公用套件,則外部版本設定在此案例中不會影響小組的工作流程。

顯示僅含私人套件的供稿圖例。

所有套件都是公開的

在此案例中,如果小組完全取用公用套件,無論是從公用登錄或其他開放原始碼存放庫,則設定不會以任何方式影響其工作流程。

顯示僅包含公開套件的資料流插圖。

公共封包設為私有

在此情況下,當公用套件轉換成私人套件時,外部版本設定不會以任何方式影響小組的工作流程。

此圖顯示從公用轉換為私用的套件。

允許外部版本

注意

您必須是 Feed 擁有者,才能允許外部來源版本。 如需詳細資訊,請參閱 提要權限

  1. 登入您的 Azure DevOps 組織,然後瀏覽至您的專案。

  2. 選擇工件,然後從下拉功能表中選擇您的訂閱源。

  3. 選取您的套件,然後選取省略號按鈕以取得更多選項。 選取 [ 允許外部來源版本]。

    顯示如何允許外部來源版本的螢幕快照。

  4. 選取切換按鈕以允許外部版本。 完成時,請選取 [關閉 ]。

    顯示如何啟用外部版本的螢幕快照。

使用 REST API 允許外部版本

使用 PowerShell 允許外部版本

  1. 建立個人存取權杖,擁有封裝>讀取、寫入及管理權限。

    顯示如何選取封裝許可權的螢幕快照。

  2. 為您的個人存取令牌建立環境變數。

    $env:PATVAR = "YOUR_PERSONAL_ACCESS_TOKEN"
    
  3. 將您的個人存取令牌轉換為 baser64 編碼字串,並建構 HTTP 要求標頭。

    $token = [Convert]::ToBase64String(([Text.Encoding]::ASCII.GetBytes("username:$env:PatVar")))
    $headers = @{
        Authorization = "Basic $token"
    }
    
  4. 建構您的端點 URL。 範例://pkgs.dev.azure.com/MyOrg/MyProject/_apis/packaging/feeds/MyFeed/nuget/packages/pkg1.0.0.nupkg/upstreaming?api-version=6.1-preview.1

    • 專案範圍的摘要

      $url = "https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/<PROJECT_NAME>/_apis/packaging/feeds/<FEED_NAME>/<PROTOCOL>/packages/<PACKAGE_NAME>/upstreaming?api-version=6.1-preview.1"
      
    • 組織範圍的資訊流

      $url = "https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/_apis/packaging/feeds/<FEED_NAME>/<PROTOCOL>/packages/<PACKAGE_NAME>/upstreaming?api-version=6.1-preview.1"
      

執行下列命令以擷取封裝的上游行為狀態。 $url$headers 是我們在上一節中使用的相同變數。

Invoke-RestMethod -Uri $url -Headers $headers