Share via


アップストリームの動作の構成

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

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

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

アップストリーム動作は、開発者が外部から提供されるパッケージ バージョンを使用するかどうかを選択できる機能です。 特定のパッケージのパブリック レジストリからアクセスできるパッケージを管理します。

アップストリームの動作が有効になると、パッケージが Azure Artifacts フィードに発行されると、パブリック レジストリのすべてのバージョンがブロックされ、ダウンロードできなくなります。

この方法では、パブリック レジストリに侵入した可能性のある悪意のあるパッケージへの潜在的な露出を防ぐことで、セキュリティの層が強化されます。

ただし、ユーザーはアップストリームの動作設定を非アクティブ化して、必要に応じてパブリック レジストリからパッケージを使用できます。

Note

新しい動作は、フィードの@local ビュー内に保持されるため、現在使用中のパッケージ バージョンには影響しません。

適用可能なシナリオ

次のセクションでは、アップストリームの動作がトリガーされて外部ソース パッケージのバージョンがブロックされるさまざまな一般的なシナリオと、パブリック パッケージへのアクセスをブロックする必要がないその他のシナリオを示します。

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

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

このシナリオでは、チームにはパブリックにされたプライベート パッケージがあります。 この場合のアップストリームの動作は、新しいパブリック バージョン (信頼されていないパッケージ) をブロックするためにトリガーされます。

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

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

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

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

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

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

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

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

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

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

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

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

このような状況では、パブリック パッケージがプライベート パッケージに変換されるとき、新しいアップストリーム動作はチームのワークフローに何らかの影響を与えません。

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

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

Note

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

  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