パッケージオリジンコントロールの編集 - CodeArtifact

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

パッケージオリジンコントロールの編集

では AWS CodeArtifact、パッケージバージョンを直接公開するか、アップストリームリポジトリからプルダウンするか、外部パブリックリポジトリから取り込むことで、パッケージバージョンをリポジトリに追加できます。直接公開とパブリックリポジトリからの取り込みの両方の方法でパッケージバージョンの追加を許可すると、依存関係置換攻撃に対して脆弱になります。詳細については、「依存関係置換攻撃」を参照してください。依存関係置換攻撃から保護するには、リポジトリ内のパッケージにパッケージオリジンコントロールを設定して、パッケージバージョンをリポジトリに追加する方法を制限します。

さまざまなパッケージの新しいバージョンを、直接公開などの内部ソースとパブリックリポジトリなどの外部ソースの両方から入手できるようにしたいと考えているチームは、パッケージオリジンコントロールの設定を検討する必要があります。デフォルトでは、パッケージオリジンコントロールは、パッケージの最初のバージョンがリポジトリに追加された方法に基づいて設定されます。パッケージオリジンコントロール設定とそのデフォルト値については、「パッケージオリジンコントロール設定」を参照してください。

put-package-origin-configuration API オペレーションを使用した後にパッケージレコードを削除するには、「delete-package」を使用します (「パッケージまたはパッケージバージョンを削除する」を参照)。

一般的なパッケージアクセスコントロールシナリオ

このセクションでは、パッケージバージョンが CodeArtifact リポジトリに追加される一般的なシナリオをいくつか紹介します。パッケージオリジンコントロール設定は、最初のパッケージバージョンが追加された方法に基づいて、新しいパッケージに設定されます。

以下のシナリオの内部パッケージは、パッケージマネージャーからリポジトリに直接公開されるパッケージ (ユーザーまたはチームが作成、管理するパッケージなど) を指します。外部パッケージは、パブリックリポジトリに存在するパッケージで、外部接続でリポジトリに取り込むことができます。

外部パッケージバージョンが既存の内部パッケージに公開される

このシナリオでは、内部パッケージ「packageA」について考えてみます。チームは packageA の最初のパッケージバージョンを CodeArtifact リポジトリに公開します。これはパッケージの最初のパッケージバージョンであるため、パッケージオリジンコントロール設定は自動的に [公開: 許可] および [アップストリーム: ブロック] に設定されます。パッケージがリポジトリに存在すると、同じ名前のパッケージがリポジトリに接続されているパブリック CodeArtifact リポジトリに公開されます。これは、内部パッケージに対して試みられた依存関係置換攻撃である場合も、単なる偶然である場合もあり得ます。いずれの場合でも、パッケージオリジンコントロールは、潜在的な攻撃からパッケージバージョンを保護するために、新しい外部バージョンの取り込みをブロックするように設定されています。

次のイメージでは、repoA はパブリック CodeArtifact リポジトリへの外部接続を持つリポジトリです。リポジトリには packageA のバージョン 1.1 と 2.1 が含まれていますが、バージョン 3.0 はパブリックリポジトリに公開されています。通常、repoA はパッケージマネージャーからパッケージがリクエストされた後にバージョン 3.0 を取り込みます。パッケージの取り込みはブロック に設定されているため、バージョン 3.0 は CodeArtifact リポジトリに取り込まれず、それに接続されているパッケージマネージャーでは使用できません。

パブリックリポジトリからブロックされている新しい外部パッケージバージョンを示すシンプルな図。

内部パッケージバージョンが既存の外部パッケージに公開される

このシナリオでは、packageB という名前のパッケージは、リポジトリに接続したパブリックリポジトリの外部に存在します。リポジトリに接続しているパッケージマネージャーが packageB をリクエストすると、パッケージバージョンはパブリックリポジトリからリポジトリに取り込まれます。これは packageB の最初のパッケージバージョンであるため、パッケージオリジンコントロール設定は自動的に [公開: ブロック] および [アップストリーム: 許可] に設定されます。その後、ユーザーは同じパッケージ名のバージョンをリポジトリに公開しようとします。パブリックパッケージを認識しておらず、同じ名前で無関係なパッケージを公開しようとしているか、パッチが適用されたバージョンを公開しようとしているか、既に外部に存在する正確なパッケージバージョンを直接公開しようとしているかのいずれかです。 は公開しようとしているバージョンを拒否 CodeArtifact しますが、必要に応じて明示的に拒否を上書きしてバージョンを公開することができます。

次のイメージでは、repoA はパブリック CodeArtifact リポジトリへの外部接続を持つリポジトリです。リポジトリには、パブリックリポジトリから取り込んだバージョン 3.0 が含まれています。ユーザーは、バージョン 1.1 をリポジトリに公開したいと考えています。通常、バージョン 1.2 を repoA に公開できますが、公開が [ブロック] に設定されているため、バージョン 1.2 は公開できません。

パブリックリポジトリからブロックされている新しい外部パッケージバージョンを示すシンプルな図。

既存の外部パッケージにパッチを適用したパッケージバージョンを公開する

このシナリオでは、packageB という名前のパッケージは、リポジトリに接続したパブリックリポジトリの外部に存在します。リポジトリに接続しているパッケージマネージャーが packageB をリクエストすると、パッケージバージョンはパブリックリポジトリからリポジトリに取り込まれます。これは packageB の最初のパッケージバージョンであるため、パッケージオリジンコントロール設定は自動的に [公開: ブロック] および [アップストリーム: 許可] に設定されます。チームは、このパッケージのパッチが適用されたパッケージバージョンをリポジトリに公開することを決めました。パッケージバージョンを直接公開するために、チームはパッケージのオリジンコントロール設定を [公開: 許可] および アップストリーム: ブロック] に変更します。これで、このパッケージのバージョンをリポジトリに直接公開し、パブリックリポジトリから取り込むことができます。チームがパッチを適用したパッケージバージョンを公開した後、チームはパッケージオリジンの設定を [公開: ブロック] および [アップストリーム: 許可] に戻します。

パッケージオリジンコントロール設定

パッケージオリジンコントロールでは、パッケージバージョンをリポジトリに追加する方法を設定できます。以下のリストには、使用可能なパッケージオリジンコントロールの設定と値が含まれています。

注記

パッケージグループでオリジンコントロールを設定する場合、使用可能な設定と値は異なります。詳細については、「パッケージグループのオリジンコントロール」を参照してください。

公開

この設定は、パッケージマネージャーや類似のツールを使用してパッケージのバージョンをリポジトリに直接公開できるかどうかを設定します。

  • 許可: パッケージバージョンを直接公開できます。

  • ブロック: パッケージバージョンは直接公開できません。

アップストリーム

この設定は、パッケージマネージャーからのリクエストに応じて、パッケージバージョンを外部のパブリックリポジトリから取り込むことができるか、アップストリームリポジトリから保持できるかを設定します。

  • 許可: 任意のパッケージバージョンは、アップストリーム CodeArtifact リポジトリとして設定された他のリポジトリから保持することも、外部接続を持つパブリックソースから取り込むこともできます。

  • ブロック: パッケージバージョンは、アップストリーム CodeArtifact リポジトリとして設定された他のリポジトリから保持したり、外部接続を持つパブリックソースから取り込んだりすることはできません。

パッケージオリジンコントロールのデフォルト設定

デフォルトのパッケージオリジンコントロール設定は、パッケージに関連付けられたパッケージグループのオリジンコントロール設定に基づいて設定されます。パッケージグループとパッケージグループのオリジンコントロールの詳細については、でのパッケージグループの使用 CodeArtifact「」および「」を参照してくださいパッケージグループのオリジンコントロール

パッケージがすべての制限タイプALLOWで の制限設定を持つパッケージグループに関連付けられている場合、パッケージのデフォルトのパッケージオリジンコントロールは、そのパッケージの最初のバージョンがリポジトリにどのように追加されるかに基づきます。

  • 最初のパッケージバージョンがパッケージマネージャーによって直接公開された場合、設定は [公開: 許可][アップストリーム: ブロック] になります。

  • 最初のパッケージバージョンがパブリックソースから取り込まれた場合、設定は [公開: ブロック][アップストリーム: 許可] になります。

注記

2022 年 5 月頃より前に CodeArtifact リポジトリに存在していたパッケージには、デフォルトのパッケージオリジンコントロールとして Publish: ALLOWUpstream: ALLOW があります。このようなパッケージでは、パッケージオリジンコントロールを手動で設定する必要があります。それ以降は、新しいパッケージには現在のデフォルト値が設定され、2022 年 7 月 14 日にこの機能がリリースされた時点でデフォルト値が強制されるようになりました。パッケージオリジンコントロールの設定の詳細については、「パッケージオリジンコントロールの編集」を参照してください。

それ以外の場合、パッケージが の制限設定が少なくとも 1 つあるパッケージグループに関連付けられている場合BLOCK、そのパッケージのデフォルトのオリジン制御設定は Publish: ALLOW および Upstream: ALLOW に設定されます。

パッケージオリジンコントロールとパッケージグループオリジンコントロールの相互作用

パッケージにはオリジンコントロール設定があり、関連するパッケージグループにはオリジンコントロール設定があるため、これらの 2 つの異なる設定が相互にどのように相互作用するかを理解することが重要です。

2 つの設定間の相互作用は、 の設定がBLOCK常に の設定よりも優先されることですALLOW。次の表に、設定例と有効なオリジンコントロール設定を示します。

パッケージオリジン制御設定 パッケージグループのオリジンコントロール設定 有効なオリジン制御設定

公開: 許可

UPSTREAM: 許可

公開: 許可

UPSTREAM: 許可

公開: 許可

UPSTREAM: 許可

公開: ブロック

UPSTREAM: 許可

公開: 許可

UPSTREAM: 許可

公開: ブロック

UPSTREAM: 許可

公開: 許可

UPSTREAM: 許可

公開: 許可

UPSTREAM: ブロック

公開: 許可

UPSTREAM: ブロック

つまり、オリジン設定が Publish: ALLOW および Upstream: ALLOW のパッケージは、関連するパッケージグループのオリジン制御設定に実質的に延期されます。

パッケージオリジンコントロールの編集

パッケージオリジンコントロールは、パッケージの最初のパッケージバージョンがリポジトリに追加された方法に基づいて自動的に設定されます。詳細については、「パッケージオリジンコントロールのデフォルト設定」を参照してください。 CodeArtifact リポジトリ内のパッケージのパッケージオリジンコントロールを追加または編集するには、以下の手順を実行します。

パッケージオリジンコントロールを追加または編集するには (コンソール)
  1. https://console.aws.amazon.com/codesuite/codeartifact/home で AWS CodeArtifact コンソールを開きます。

  2. ナビゲーションペインで [リポジトリ] を選択し、編集するパッケージを含むリポジトリを選択します。

  3. [パッケージ] の表で、編集するパッケージを検索して選択します。

  4. パッケージの概要ページの [オリジンコントロール] で、[編集] を選択します。

  5. [オリジンコントロールの編集] で、パッケージに設定するパッケージオリジンコントロールを選択します。[公開] と [アップストリーム] の両方のパッケージオリジンコントロール設定を同時に設定する必要があります。

    • パッケージバージョンを直接公開できるようにするには、[公開][許可] を選択します。パッケージバージョンの公開を禁止するには、[ブロック] を選択します。

    • 外部リポジトリからのパッケージの取り込みとアップストリームリポジトリからのパッケージの取得を許可するには、[アップストリームソース][許可] を選択します。外部リポジトリおよびアップストリームリポジトリからのパッケージバージョンの取り込みとプルをすべてブロックするには、[ブロック] を選択します。

パッケージオリジンコントロールを追加または編集するには (AWS CLI)
  1. まだ設定していない場合は、 AWS CLI 「」の手順に従って を設定しますで をセットアップする AWS CodeArtifact

  2. パッケージオリジンコントロールを追加または編集するには put-package-origin-configuration を使用します。次のフィールドを変更します。

    • my_domain を更新したいパッケージを含む CodeArtifact ドメインに置き換えます。

    • my_repo を更新したいパッケージを含む CodeArtifact リポジトリに置き換えます。

    • npm を、更新するパッケージのパッケージの形式で置換します。

    • my_package を、更新するパッケージのパッケージの名前で置換します。

    • [許可][ブロック] を使用するパッケージオリジンコントロール設定で置換します。

    aws codeartifact put-package-origin-configuration --domain my_domain \ --repository my_repo --format npm --package my_package \ --restrictions publish=ALLOW,upstream=BLOCK

公開リポジトリとアップストリームリポジトリ

CodeArtifact は、到達可能なアップストリームリポジトリまたはパブリックリポジトリに存在するパッケージバージョンの公開を許可しません。例えば、Maven パッケージcom.mycompany.mypackage:1.0をリポジトリmyrepoに公開するとし、myrepoが Maven Central への外部接続を持つアップストリームリポジトリを持つとします。次のシナリオを考えてみます。

  1. com.mycompany.mypackage 上のパッケージオリジンコントロール設定は、[公開: 許可][アップストリーム: 許可] です。com.mycompany.mypackage:1.0 がアップストリームリポジトリまたは Maven Central に存在する場合、 は 409 競合エラーmyrepoでそのリポジトリに発行しようとする試み CodeArtifact を拒否します。com.mycompany.mypackage:1.1 などの別のバージョンを公開することもできます。

  2. com.mycompany.mypackage 上のパッケージオリジンコントロール設定は、[公開: 許可][アップストリーム: ブロック] です。ユーザーはパッケージバージョンにはアクセスできないため、まだ存在していないすべてのバージョンの com.mycompany.mypackage をリポジトリに公開できます。

  3. com.mycompany.mypackage 上のパッケージオリジンコントロール設定は、[公開: ブロック][アップストリーム: 許可] です。この場合、どのパッケージバージョンもリポジトリに直接公開することはできません。