次の方法で共有


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

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

Azure Artifacts アップストリーム ソースを使用すると、開発者は 1 つのフィードを使用してパッケージ管理を一元化し、発行されたパッケージと、NuGet.org などのパブリック レジストリから使用されるパッケージの両方を格納できます。

アップストリーム ソースには、シンプルさ、信頼性、パッケージの整合性など、依存関係を管理するためのいくつかの利点があります。 アップストリーム ソース を参照してください。詳細については、 を参照してください。

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

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

特定のパッケージに対して [ 外部バージョンの許可 ] トグルが有効になると、パブリック レジストリのバージョンをフィードに保存できるようになります。 既定では、このオプションは無効になっており、パブリック レジストリから悪意のある可能性のあるパッケージへの露出を減らすことで、セキュリティのレイヤーを追加します。 この設定を変更しても、フィードに既に保存されているパッケージのバージョンには影響しません。 これらのバージョンは、この設定に関係なく引き続きアクセスできます。 外部から提供されるバージョン 機能を許可する を有効にするには、フィード所有者 である必要があります。

パッケージの外部バージョンを許可する

特定のパッケージの外部バージョンの使用を有効にするには、次の手順に従います。

外部ソース バージョンを許可するには、 Feed 所有者 である必要があります。

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

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

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

  4. [ 外部バージョンを許可 する] を切り替えて機能を有効にし、完了したら [閉じる ] を選択します。

    Azure Artifacts で特定のパッケージの外部バージョンを有効にする方法を示すスクリーンショット。

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

REST API を使用して特定のパッケージの外部バージョンを有効にするには、次のエンドポイントを使用します。

パッケージの種類 API エンドポイント
NuGet - アップストリーム動作を設定する
- アップストリームの挙動を取得する
npm - アップストリーム動作を設定する
- スコープ付きアップストリーム動作を設定する
- パッケージのアップストリーム動作を取得する
- スコープ付きパッケージのアップストリーム動作を取得する
ニシキヘビ - アップストリームの挙動を取得する
- アップストリーム動作を設定する
Maven - アップストリームの挙動を取得する
- アップストリーム動作を設定する
貨物 - アップストリームの挙動を取得する
- アップストリーム動作を設定する

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

PowerShell を使用して特定のパッケージの外部バージョンを有効にするには、次の手順に従います。

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

  2. 個人用アクセス トークンの環境変数を作成します。

    $env:PATVAR = "YOUR_PERSONAL_ACCESS_TOKEN"
    
  3. 個人用アクセス トークンを Base64 でエンコードされた文字列に変換し、HTTP 要求ヘッダーを作成します。

    $token = [Convert]::ToBase64String(([Text.Encoding]::ASCII.GetBytes("username:$env:PatVar")))
    $headers = @{
        Authorization = "Basic $token"
    }
    
  4. フィードの種類に基づいてエンドポイント URL を構築します。

    • プロジェクト スコープのフィード:

      $url = "https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/<PROJECT_NAME>/_apis/packaging/feeds/<FEED_NAME>/<PROTOCOL>/packages/<PACKAGE_NAME>/upstreaming?api-version=7.2-preview.1"
      
    • 組織スコープのフィード:

      $url = "https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/_apis/packaging/feeds/<FEED_NAME>/<PROTOCOL>/packages/<PACKAGE_NAME>/upstreaming?api-version=7.2-preview.1"
      
  5. シナリオに基づいて、テーブルからコマンドを実行します。

    アクション Description Command
    アップストリーム動作を取得する パッケージのアップストリーム動作状態を取得します。 前の手順の $url$headers を使用します。 Invoke-RestMethod -Uri $url -Headers $headers
    アップストリーム動作の設定 versionsFromExternalUpstreamsAllowExternalVersions に設定して、パッケージの外部ソース バージョンを許可します。 $body = '{"versionsFromExternalUpstreams": "AllowExternalVersions"}'
    Invoke-RestMethod -Uri $url -Headers $headers -Body $body -Method Patch -ContentType "application/json"
    アップストリーム処理のクリア versionsFromExternalUpstreamsAuto に設定してアップストリームの動作をリセットします。 $body = '{"versionsFromExternalUpstreams": "Auto"}'
    Invoke-RestMethod -Uri $url -Headers $headers -Body $body -Method Patch -ContentType "application/json"

アップストリームの動作に対する変更は、サービス全体に反映されるまでに時間がかかる場合があります。 設定を更新した後にパッケージを使用できない場合は、変更が有効になるまで最大 3 時間かかります。

適用可能なシナリオ

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

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

次の 2 つのケースで [外部バージョンの許可 ] 機能が有効になっている場合、パブリック バージョンはフィードに保存されません。

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

プライベート パッケージが後でパブリックになった場合、フィードは、パブリック ソースから同じパッケージ名を持つすべての新しいバージョンをブロックします。

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

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

チームがプライベート パッケージとパブリック パッケージの両方を使用する場合、外部バージョンの許可が有効になっていると、フィードによってパブリック レジストリから新しいパッケージ バージョンがブロックされます。

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

シナリオ 2: パブリック バージョンが許可されている

次の 3 つのケースで [ 外部バージョンの許可 ] 機能が有効になっている場合、パブリック バージョンはフィードに保存できます。

すべてのパッケージがプライベートである

すべてのパッケージがプライベートであり、チームがパブリック パッケージを使用する予定がない場合、この設定を有効にしてもチームのワークフローには影響しません。

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

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

チームがレジストリまたはオープンソース リポジトリのパブリック パッケージのみを使用する場合、設定を有効にしてもワークフローには影響しません。

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

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

パブリック パッケージが後でプライベートに変換された場合、外部バージョンの許可設定を有効にしても、チームのワークフローには影響しません。

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