

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

# パッケージオリジンコントロールの編集
<a name="package-origin-controls"></a>

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

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

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

## 一般的なパッケージアクセスコントロールシナリオ
<a name="package-origin-control-scenarios"></a>

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

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

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

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

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

![\[パブリックリポジトリからブロックされている新しい外部パッケージバージョンを示すシンプルな図。\]](http://docs.aws.amazon.com/ja_jp/codeartifact/latest/ug/images/package-origin-controls-one.png)


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

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

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

![\[パブリックリポジトリからブロックされている新しい外部パッケージバージョンを示すシンプルな図。\]](http://docs.aws.amazon.com/ja_jp/codeartifact/latest/ug/images/package-origin-controls-two.png)


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

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

## パッケージオリジンコントロール設定
<a name="package-origin-control-settings"></a>

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

**注記**  
パッケージグループでオリジンコントロールを設定する場合、使用できる設定項目や値は異なります。詳細については、「[パッケージグループのオリジンコントロール](package-group-origin-controls.md)」を参照してください。

**公開**

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

**アップストリーム**

この設定は、パッケージマネージャーからのリクエストに応じて、パッケージバージョンを外部のパブリックリポジトリから取り込むことができるか、アップストリームリポジトリから保持できるかを設定します。
+ **許可**: すべてのパッケージバージョンは、アップストリームリポジトリとして設定された他の CodeArtifact リポジトリから保持することも、外部接続を使用してパブリックソースから取り込むこともできます。
+ **ブロック**: すべてのパッケージバージョンは、アップストリームリポジトリとして設定された他の CodeArtifact リポジトリから保持することも、外部接続を使用してパブリックソースから取り込むこともできません。

## パッケージオリジンコントロールのデフォルト設定
<a name="default-package-origin-control-settings"></a>

デフォルトのパッケージオリジンコントロール設定は、パッケージに関連付けられたパッケージグループのオリジンコントロール設定に基づいて設定されます。パッケージグループとパッケージグループのオリジンコントロールの詳細については、「[CodeArtifact でのパッケージグループの操作](package-groups.md)」および「[パッケージグループのオリジンコントロール](package-group-origin-controls.md)」を参照してください。

パッケージが、すべての制限タイプについて `ALLOW` の制限設定を持つパッケージグループに関連付けられている場合、パッケージのデフォルトのパッケージオリジンコントロールは、そのパッケージの最初のバージョンがどのようにリポジトリに追加されたかに基づいて決まります。
+ 最初のパッケージバージョンがパッケージマネージャーによって直接公開された場合、設定は **[公開: 許可]** と **[アップストリーム: ブロック]** になります。
+ 最初のパッケージバージョンがパブリックソースから取り込まれた場合、設定は **[公開: ブロック]** と **[アップストリーム: 許可]** になります。

**注記**  
2022 年 5 月以前に CodeArtifact リポジトリに存在していたパッケージでは、デフォルトのパッケージオリジンコントロールは **[公開: 許可]** と **[アップストリーム: 許可]** になります。このようなパッケージでは、パッケージオリジンコントロールを手動で設定する必要があります。それ以降は、新しいパッケージには現在のデフォルト値が設定され、2022 年 7 月 14 日にこの機能がリリースされた時点でデフォルト値が強制されるようになりました。パッケージオリジンコントロールの設定の詳細については、「[パッケージオリジンコントロールの編集](#edit-package-origin-controls)」を参照してください。

パッケージが、少なくとも 1 つ以上の `BLOCK` または `ALLOW_SPECIFIC_REPOSITORIES` の制限設定を持つパッケージグループに関連付けられている場合、そのパッケージのデフォルトのオリジンコントロール設定は**公開: ALLOW** および**アップストリーム: ALLOW** に設定されます。

## パッケージオリジンコントロールとパッケージグループオリジンコントロールの相互作用
<a name="package-origin-controls-interaction-package-groups"></a>

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

両設定間の相互作用において、`BLOCK` の設定は常に `ALLOW` の設定よりも優先されます。次の表に、いくつかの設定例とその有効なオリジンコントロール設定を示します。


| パッケージオリジンコントロール設定 | パッケージグループオリジンコントロール設定 | 有効なオリジンコントロール設定 | 
| --- | --- | --- | 
| 公開: ALLOWアップストリーム: ALLOW | 公開: ALLOWアップストリーム: ALLOW | 公開: ALLOWアップストリーム: ALLOW | 
| 公開: BLOCKアップストリーム: ALLOW | 公開: ALLOWアップストリーム: ALLOW | 公開: BLOCKアップストリーム: ALLOW | 
| 公開: ALLOWアップストリーム: ALLOW | 公開: ALLOWアップストリーム: BLOCK | 公開: ALLOWアップストリーム: BLOCK | 

つまり、パッケージのオリジン設定が **公開: ALLOW** および**アップストリーム: ALLOW** になっている場合、そのパッケージは実質的に、関連付けられているパッケージグループのオリジンコントロール設定に従うことを意味します。

## パッケージオリジンコントロールの編集
<a name="edit-package-origin-controls"></a>

パッケージオリジンコントロールは、パッケージの最初のパッケージバージョンがリポジトリに追加された方法に基づいて自動的に設定されます。詳細については、「[パッケージオリジンコントロールのデフォルト設定](#default-package-origin-control-settings)」を参照してください。CodeArtifact リポジトリ内のパッケージのパッケージオリジンコントロールを追加または編集するには、次の手順に従います。

**パッケージオリジンコントロールを追加または編集するには (コンソール)**

1. [https://console.aws.amazon.com/codesuite/codeartifact/home](https://console.aws.amazon.com/codesuite/codeartifact/home) で AWS CodeArtifact コンソールを開きます。

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

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

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

1. **[オリジンコントロールの編集]** で、パッケージに設定するパッケージオリジンコントロールを選択します。[公開] と [アップストリーム] の両方のパッケージオリジンコントロール設定を同時に設定する必要があります。
   + パッケージバージョンを直接公開できるようにするには、**[公開]** で **[許可]** を選択します。パッケージバージョンの公開を禁止するには、**[ブロック]** を選択します。
   + 外部リポジトリからのパッケージの取り込みとアップストリームリポジトリからのパッケージの取得を許可するには、**[アップストリームソース]** で **[許可]** を選択します。外部リポジトリおよびアップストリームリポジトリからのパッケージバージョンの取り込みとプルをすべてブロックするには、**[ブロック]** を選択します。

**パッケージオリジンコントロールを追加または編集するには (AWS CLI)**

1. まだ設定していない場合は、 AWS CLI 「」の手順に従って を設定します[AWS CodeArtifact でのセットアップ](get-set-up-for-codeartifact.md)。

1. パッケージオリジンコントロールを追加または編集するには `put-package-origin-configuration` を使用します。次のフィールドを変更します。
   + *my\$1domain* を、更新するパッケージを含む CodeArtifact ドメインで置換します。
   + *my\$1repo* を、更新するパッケージを含む CodeArtifact リポジトリで置換します。
   + *npm* を、更新するパッケージのパッケージの形式で置換します。
   + *my\$1package* を、更新するパッケージのパッケージの名前で置換します。
   + *[許可]* と *[ブロック]* を使用するパッケージオリジンコントロール設定で置換します。

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

## 公開リポジトリとアップストリームリポジトリ
<a name="package-publishing-upstreams"></a>

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

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

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

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