次の方法で共有


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

Azure DevOps Services |Azure DevOps Server 2022 |Azure DevOps Server 2020

Azure Artifacts アップストリーム ソースを使用すると、開発者は統合フィードを使用して、成果物フィードと、NuGet.org や npmjs.com などの一般的なパブリック レジストリからパッケージを発行および使用する利便性を得ることができます。

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

この機能を使用すると、開発者は、NuGet.org や npmjs.com などのパブリック レジストリのパッケージ バージョンを使用するかどうかを制御できます。

外部バージョンの許可 切り替えが特定のパッケージに対して有効になると、パブリック レジストリのバージョンをダウンロードできるようになります。 既定では、このオプションは無効になっており、パブリック レジストリから悪意のある可能性のあるパッケージへの露出を防ぐことにより、セキュリティレイヤーが追加されます。 外部から提供されるバージョン 機能を許可する を有効にするには、フィード所有者 である必要があります。

この設定を変更しても、フィードに既に保存されているパッケージのバージョンには影響しません。 これらのバージョンは、この設定に関係なく引き続きアクセスできます。

適用可能なシナリオ

次のセクションでは、外部バージョン (パブリック レジストリのパッケージ) がブロックされるか、フィードへの保存が許可される一般的なシナリオについて説明します。 この記事の残りの部分では、パブリック レジストリからのパッケージをパブリック パッケージとして、Azure Artifacts フィードのパッケージをプライベート パッケージと呼びます。

シナリオ 1: パブリック バージョンがブロックされる

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

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

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

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

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

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

シナリオ 2: パブリック バージョンがブロックされない

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  1. 個人用アクセス トークンを作成し、Packaging>の読み取り、書き込み、管理の権限を付与します。

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

  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