共用方式為


防範惡意公用套件

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

有了 Azure Artifacts 上游來源,開發人員即可使用統一摘要,從成品摘要發佈和取用套件,以及 NuGet.org 或 npmjs.com 等熱門公用登錄。 先前,成品摘要會結合摘要本身和所有已設定上游來源的可用套件版本清單。

顯示摘要內容的圖例。

[允許外部來源版本] 是一項功能,可讓開發人員選擇是否想要取用外部來源套件版本。 它會控管可從特定套件的公用登錄存取哪些套件。

當您停用 [ 允許外部版本] 切換時,會封鎖公用登錄中的版本,並無法下載。 這增加了額外的安全性層,方法是防止從公用登錄暴露到潛在的惡意套件。

不過,如果使用者偏好,他們可以啟用 [允許外部版本 ] 切換,以允許從公用登錄存取和取用套件。

注意

此設定不會變更已儲存至摘要的任何套件版本。 由於變更此設定,這些套件版本的存取將不會變更。

適用的案例

下一節說明外部版本設定會封鎖外部來源套件版本的各種常見案例,以及不需要封鎖公用套件存取的其他案例。

公用版本遭到封鎖

公開的私人套件版本

在此案例中,小組具有公開的私人套件。 在此情況下,外部版本設定會導致摘要封鎖使用該套件名稱從公用來源取用任何新版本。

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

同時擁有私人和公用套件

在此案例中,如果小組使用私人和公用套件的組合,則不允許外部來源套件封鎖來自公用登錄的任何新套件版本。

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

不會封鎖公用版本

所有套件都是私人的*

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

顯示只包含私人套件之摘要的圖例。

所有套件都是公用的

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

顯示只包含公用套件之摘要的圖例。

公用套件設為私人

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

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

允許外部版本

注意

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

  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