悪意のあるパブリック パッケージから保護する

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

Azure Artifacts アップストリーム ソースを使用すると、開発者は統合フィードを使用して、成果物フィードと、NuGet.org や npmjs.com などの一般的なパブリック レジストリからパッケージを発行および使用する利便性を得ることができます。 以前は、Artifact フィードは、フィード自体と構成されているすべてのアップストリーム ソースの両方から利用可能なパッケージ バージョンの一覧を組み合わせていました。

フィードの内容を示す図。

Allow の外部ソース バージョンは、開発者が外部ソースパッケージのバージョンを使用するかどうかを選択できるようにする機能です。 特定のパッケージのパブリック レジストリからアクセスできるパッケージを管理します。

Allow 外部バージョントグルを無効にすると、パブリック レジストリのバージョンがブロックされ、ダウンロードできなくなります。 これにより、潜在的に悪意のあるパッケージがパブリック レジストリから公開されるのを防ぐことで、セキュリティの層が強化されます。

ただし、必要に応じて、 Allow 外部バージョン トグルを有効にして、パブリック レジストリからのパッケージへのアクセスと使用を許可できます。

Note

この設定では、フィードに既に保存されているパッケージ バージョンは変更されません。 この設定を変更しても、これらのパッケージ バージョンへのアクセスは変更されません。

適用可能なシナリオ

次のセクションでは、外部バージョン設定によって外部ソース パッケージのバージョンがブロックされるさまざまな一般的なシナリオと、パブリック パッケージへのアクセスをブロックする必要がないその他のシナリオについて説明します。

パブリック バージョンがブロックされる

プライベート パッケージのバージョンが公開されている

このシナリオでは、チームにはパブリックにされたプライベート パッケージがあります。 この場合、外部バージョンの設定により、フィードはパブリック ソースからのそのパッケージ名を持つ新しいバージョンの使用をブロックします。

公開された内部パッケージ バージョンを示す図。

プライベート パッケージとパブリック パッケージの両方を持つ

このシナリオでは、チームがプライベート パッケージとパブリック パッケージの組み合わせを使用する場合、外部から提供されるパッケージを禁止すると、パブリック レジストリから新しいパッケージ バージョンがブロックされます。

使用可能なプライベート パッケージとパブリック パッケージを示す図。

パブリック バージョンはブロックされません

すべてのパッケージはプライベートです*

既存のすべてのパッケージがプライベートであり、チームがパブリック パッケージを使用する予定がない場合、外部バージョンの設定は、このシナリオでのチームのワークフローには影響しません。

プライベート パッケージのみを含むフィードを示す図。

すべてのパッケージがパブリックである

このシナリオでは、パブリック レジストリやその他のオープンソース リポジトリから、チームがパブリック パッケージのみを使用する場合、設定はワークフローに影響しません。

パブリック パッケージのみを含むフィードを示す図。

プライベートにされたパブリック パッケージ

この状況では、パブリック パッケージがプライベート パッケージに変換されるとき、外部バージョンの設定はチームのワークフローに何も影響しません。

パブリックからプライベートに変換されたパッケージを示す図。

外部バージョンを許可する

Note

外部ソース バージョンを許可するには、 Feed 所有者 である必要があります。 詳細については、「 Feed アクセス許可」を参照してください。

  1. Azure DevOps 組織にサインインしてから、プロジェクトに移動します。

  2. [ 成果物] を選択し、ドロップダウン メニューからフィードを選択します。

  3. パッケージを選択し、省略記号ボタンを選択して他のオプションを表示します。 外部ソース バージョンを選択します。

    外部ソース バージョンを許可する方法を示すスクリーンショット。

  4. トグル ボタンを選択して、外部バージョンを許可します。 完了したら Close を選択します。

    外部バージョンを有効にする方法を示すスクリーンショット。

REST API を使用して外部バージョンを許可する

PowerShell を使用して外部バージョンを許可する

  1. 個人用アクセス トークンを作成 Packaging>Read、write、および manage アクセス許可を使用します。

    パッケージ化のアクセス許可を選択する方法を示すスクリーンショット。

  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