

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

# CodeArtifact でのパッケージグループの操作
<a name="package-groups"></a>

*パッケージグループ*を使用すると、パッケージ形式、パッケージ名前空間、パッケージ名を使用して、定義したパターンに一致する複数のパッケージに設定を適用できます。パッケージグループを使用すると、複数のパッケージのパッケージオリジンコントロールをより簡単に設定できます。パッケージオリジンコントロールは、新しいパッケージバージョンの取り込みや公開をブロックまたは許可するために使用します。これにより、依存関係置換攻撃と呼ばれる悪意のあるアクションからユーザーを保護できます。

CodeArtifact のすべてのドメインには、ルートパッケージグループが自動で含まれています。このルートパッケージグループ (`/*`) には、すべてのパッケージが含まれています。これにより、パッケージバージョンは、デフォルトですべてのオリジンタイプからドメイン内のリポジトリに入れます。ルートパッケージグループは変更できますが、削除はできません。

新しいパッケージグループを作成する場合、または既存のパッケージグループを削除する場合、パッケージグループ設定機能は、結果整合性のある形で動作します。つまり、パッケージグループを作成または削除すると、オリジンコントロールは想定される関連パッケージに適用されますが、結果整合性による遅延が生じるため、反映までに時間がかかるが場合があります。結果整合性に達するまでの時間は、ドメイン内パッケージグループの数と、ドメイン内パッケージの数によって異なります。パッケージグループの作成または削除後、関連パッケージへのオリジンコントロールの反映にわずかな遅れが生じる場合があります。

一方で、パッケージグループのオリジンコントロールを更新した場合は、ほぼ即時に反映されます。パッケージグループの作成または削除の場合とは異なり、既存のパッケージグループのオリジンコントロールの変更は、同様の遅延なく関連パッケージに反映されます。

これらのトピックには、AWS CodeArtifact のパッケージグループに関する情報が含まれます。

**Topics**
+ [パッケージグループを作成する](create-package-group.md)
+ [パッケージグループを表示または編集する](view-edit-package-group.md)
+ [パッケージグループを削除する](delete-package-group.md)
+ [パッケージグループのオリジンコントロール](package-group-origin-controls.md)
+ [パッケージグループ定義の構文と一致動作](package-group-definition-syntax-matching-behavior.md)
+ [パッケージグループにタグを付ける](package-group-tags.md)

# パッケージグループを作成する
<a name="create-package-group"></a>

CodeArtifact コンソール、AWS Command Line Interface (AWS CLI)、または CloudFormation を使用して、パッケージグループを作成できます。CloudFormation を使用して CodeArtifact パッケージグループを管理する方法の詳細については、「[AWS CloudFormation での CodeArtifact リソースの作成](cloudformation-codeartifact.md)」を参照してください。

## パッケージグループを作成する (コンソール)
<a name="create-package-group-console"></a>

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

1. ナビゲーションペインで **[ドメイン]** を選択し、パッケージグループを作成するドメインを選択します。

1. **[パッケージグループ]**、**[パッケージグループを作成]** を順に選択します。

1. **[パッケージグループの定義]** に、作成するパッケージグループの定義を入力します。パッケージグループの定義によって、グループに関連付けられるパッケージが決まります。パッケージグループの定義は、テキストとして手動入力できます。または、ビジュアルモードを使用して選択するとパッケージグループの定義が自動で作成されます。

1. ビジュアルモードを使用してパッケージグループの定義を作成する方法:

   1. **[ビジュアル]** を選択してビジュアルモードに切り替えます。

   1. **[パッケージの形式]** で、このグループに関連付けるパッケージの形式を選択します。

   1. **[名前空間 (スコープ)]** で、一致させたい名前空間条件を選択します。
      + **[次と等しい:]**: 指定された名前空間と完全に一致します。選択した場合、一致させたい名前空間を入力します。
      + **[空白]**: 名前空間のないパッケージと一致します。
      + **[次で始まる:]**: 指定された単語で始まる名前空間と一致します。選択した場合、一致させるプレフィックスの単語を入力します。単語および単語境界の詳細については、「[単語、単語境界、プレフィックスマッチング](package-group-definition-syntax-matching-behavior.md#package-group-word-boundary-prefix)」を参照してください。
      + **[すべて]**: すべての名前空間のパッケージと一致します。

   1. **[次と等しい:]**、**[空白]**、または **[次で始まる:]** が選択されている場合は、**[パッケージ名]** で、一致させたいパッケージ名条件を選択します。
      + **[完全に等しい:]**: 指定されたパッケージ名と完全に一致します。選択した場合、一致させるパッケージ名を入力します。
      + **[次のプレフィックスで始まる:]**: 指定されたプレフィックスで始まるパッケージと一致します。
      + **[次で始まる:]**: 指定された単語で始まるパッケージと一致します。選択した場合、一致させるプレフィックスの単語を入力します。単語および単語境界の詳細については、「[単語、単語境界、プレフィックスマッチング](package-group-definition-syntax-matching-behavior.md#package-group-word-boundary-prefix)」を参照してください。
      + **[すべて]**: すべてのパッケージと一致します。

   1. **[次へ]** を選択して、定義を確認します。

1. テキストでパッケージグループ定義を入力する方法:

   1. **[テキスト]** を選択してテキストモードに切り替えます。

   1. **[パッケージグループの定義]** に、パッケージグループの定義を入力します。パッケージグループ定義の構文の詳細については、「[パッケージグループ定義の構文と一致動作](package-group-definition-syntax-matching-behavior.md)」を参照してください。

   1. **[次へ]** を選択して、定義を確認します。

1. **[レビューの定義]** で、前述の定義に基づき、新しいパッケージグループに含まれるパッケージを確認します。パッケージを確認したら、**[次へ]** を選択します。

1. **[パッケージグループの情報]** に、パッケージグループの説明と連絡先メールアドレスを任意で追加します。**[次へ]** を選択します。

1. **[パッケージオリジンコントロール]** で、グループ内のパッケージに適用するオリジンコントロールを設定します。パッケージグループオリジンコントロールの設定の詳細については、「[パッケージグループのオリジンコントロール](package-group-origin-controls.md)」を参照してください。

1. **[パッケージグループを作成]** を選択します。

## パッケージグループを作成する (AWS CLI)
<a name="create-package-group-cli"></a>

`create-package-group` コマンドを使用して、ドメインにパッケージグループを作成します。`--package-group` オプションで、グループに関連付けられるパッケージを決定するパッケージグループの定義を入力します。パッケージグループ定義の構文の詳細については、「[パッケージグループ定義の構文と一致動作](package-group-definition-syntax-matching-behavior.md)」を参照してください。

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

```
aws codeartifact create-package-group \
         --domain my_domain \
         --package-group '/nuget/*' \
         --domain-owner 111122223333 \
         --contact-info contact@email.com \
         --description "a new package group" \
         --tags key=key1,value=value1
```

# パッケージグループを表示または編集する
<a name="view-edit-package-group"></a>

CodeArtifact コンソールまたは AWS Command Line Interface (AWS CLI) を使用して、すべてのパッケージグループを一覧表示したり、特定のパッケージグループの詳細を表示したり、パッケージグループの詳細や設定を編集したりできます。

## パッケージグループを表示または編集する (コンソール)
<a name="view-edit-package-group-console"></a>

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

1. ナビゲーションペインで **[ドメイン]** を選択し、表示または編集するパッケージグループを含むドメインを選択します。

1. **[パッケージグループ]** を選択し、表示または編集するパッケージグループを選択します。

1. **[詳細]** で、親グループ、説明、ARN、連絡先 E メール、パッケージオリジンコントロールなど、パッケージグループに関する情報を表示します。

1. **[サブグループ]** では、このグループを親グループとするパッケージグループを一覧表示できます。このリスト内のパッケージグループは、このパッケージグループから設定を継承できます。詳細については、「[パッケージグループの階層とパターンの特異度](package-group-definition-syntax-matching-behavior.md#package-group-hierarchy-pattern-specificity)」を参照してください。

1. **[パッケージ]** で、パッケージグループの定義に基づいて、このパッケージグループに属するパッケージを表示します。**[強度]** 列には、パッケージの関連付けの強度が表示されます。詳細については、「[パッケージグループの階層とパターンの特異度](package-group-definition-syntax-matching-behavior.md#package-group-hierarchy-pattern-specificity)」を参照してください。

1. パッケージグループ情報を編集するには、**[パッケージグループを編集]** を選択します。

   1. **[情報]** で、パッケージグループの説明または連絡先情報を更新します。パッケージグループの定義を編集することはできません。

   1. **[パッケージグループのオリジンコントロール]** で、パッケージグループのオリジンコントロール設定を更新します。これにより、関連パッケージがドメイン内のリポジトリに入れられる方法が決まります。詳細については、「[パッケージグループのオリジンコントロール](package-group-origin-controls.md)」を参照してください。

## パッケージグループを表示または編集する (AWS CLI)
<a name="view-edit-package-group-cli"></a>

次のコマンドを使用して、AWS CLI でパッケージグループを表示または編集します。まだ設定していない場合は、「[AWS CodeArtifact でのセットアップ](get-set-up-for-codeartifact.md)」の手順に従って AWS CLI を設定してください。

ドメイン内のすべてのパッケージグループを表示するには、`list-package-groups` コマンドを使用します。

```
aws codeartifact list-package-groups \
         --domain my_domain \
         --domain-owner 111122223333
```

パッケージグループの詳細を表示するには、`describe-package-group` コマンドを使用します。パッケージグループ定義の詳細については、「[パッケージグループ定義の構文と例](package-group-definition-syntax-matching-behavior.md#package-group-definition-syntax-examples)」を参照してください。

```
aws codeartifact describe-package-group \
         --domain my_domain \
         --domain-owner 111122223333 \
         --package-group '/nuget/*'
```

パッケージグループの子パッケージグループを表示するには、`list-sub-package-groups` コマンドを使用します。

```
aws codeartifact list-sub-package-groups \
         --domain my_domain \
         --domain-owner 111122223333 \
         --package-group '/nuget/*' \
```

パッケージに関連付けられるパッケージグループを表示するには、`get-associated-package-group` コマンドを使用します。NuGet、Python、Swift パッケージ形式では、正規化されたパッケージ名と名前空間を使用しなければなりません。パッケージ名と名前空間を正規化する方法の詳細については、[NuGet](nuget-name-normalization.md)、[Python](python-name-normalization.md)、[Swift](swift-name-normalization.md) の名前の正規化ドキュメントを参照してください。

```
aws codeartifact get-associated-package-group \
         --domain my_domain \
         --domain-owner 111122223333 \
         --format npm \
         --package packageName \
         --namespace scope
```

パッケージグループを編集するには、`update-package-group` コマンドを使用します。このコマンドは、パッケージグループの連絡先情報または説明の更新に使用されます。パッケージグループのオリジンコントロール設定とその追加または編集については、「[パッケージグループのオリジンコントロール](package-group-origin-controls.md)」を参照してください。パッケージグループ定義の詳細については、「[パッケージグループ定義の構文と例](package-group-definition-syntax-matching-behavior.md#package-group-definition-syntax-examples)」を参照してください。

```
aws codeartifact update-package-group \
         --domain my_domain \
         --package-group '/nuget/*' \
         --domain-owner 111122223333 \
         --contact-info contact@email.com \
         --description "updated package group description"
```

# パッケージグループを削除する
<a name="delete-package-group"></a>

CodeArtifact コンソールまたは AWS Command Line Interface (AWS CLI) を使用してパッケージグループを削除できます。

パッケージグループを削除する際は、次の動作に注意してください。
+ ルートパッケージグループ (`/*`) は削除できません。
+ 当該パッケージグループに関連付けられているパッケージとパッケージバージョンは削除されません。
+ パッケージグループを削除すると、直接の子パッケージグループは、パッケージグループの直上の親パッケージグループの子になります。したがって、いずれかの子グループが親の設定を継承している場合、それらの設定は変更される可能性があります。

## パッケージグループを削除する (コンソール)
<a name="delete-package-group-console"></a>

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

1. ナビゲーションペインで **[ドメイン]** を選択し、表示または編集するパッケージグループを含むドメインを選択します。

1. **[パッケージグループ]** を選択します。

1. 削除するパッケージグループを選択し、**[削除]** を選択します。

1. フィールドに「delete」と入力し、**[削除]** を選択します。

## パッケージグループを削除する (AWS CLI)
<a name="delete-package-group-cli"></a>

パッケージグループを削除するには、`delete-package-group` コマンドを使用します。

```
aws codeartifact delete-package-group \
         --domain my_domain \
         --domain-owner 111122223333 \
         --package-group '/nuget/*'
```

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

パッケージオリジンコントロールを使用して、パッケージバージョンをドメインに入れる方法を設定します。パッケージグループでオリジンコントロールを設定することで、パッケージグループに関連付けられたすべてのパッケージのバージョンを、特定のドメイン内リポジトリに入れる方法を設定できます。

パッケージグループのオリジンコントロール設定には、以下の項目が含まれます。
+ [制限設定](#package-group-origin-control-settings-restrictions): この設定は、パッケージを、CodeArtifact のリポジトリに、公開、内部アップストリーム、外部パブリックリポジトリのいずれから入れることが出来るかを定義します。
+ [許可されたリポジトリリスト](#package-group-origin-control-settings-repositories): 各制限項目ごとに、どのリポジトリを許可するかを個別に指定できます。特定のリポジトリを許可するように制限が設定されている場合、その制限には対応する許可されたリポジトリのリストが含まれます。

**注記**  
パッケージグループのオリジンコントロール設定は、個別パッケージのオリジンコントロール設定と若干異なります。パッケージオリジンコントロール設定の詳細については、「[パッケージオリジンコントロール設定](package-origin-controls.md#package-origin-control-settings)」を参照してください。

## 制限設定
<a name="package-group-origin-control-settings-restrictions"></a>

パッケージグループのオリジンコントロール設定の制限設定によって、そのグループに関連付けられたパッケージがドメイン内のリポジトリに入る方法が決まります。

### 発行
<a name="package-group-origin-control-settings-restrictions-publish"></a>

`PUBLISH` 設定は、パッケージマネージャーや類似のツールを使用してパッケージバージョンをあらゆるドメイン内リポジトリに直接公開できるかどうかを設定します。
+ **[ALLOW]**: すべてのパッケージバージョンを直接公開できます。
+ **[BLOCK]**: パッケージバージョンはどのリポジトリにも直接公開できません。
+ **[ALLOW\$1SPECIFIC\$1REPOSITORIES]**: パッケージバージョンは、公開を許可されたリポジトリリストで指定されたリポジトリにのみ、直接公開できます。
+ **[INHERIT]**: `PUBLISH` 設定は、`INHERIT` ではない設定を持つ最初の親パッケージグループから継承されます。

### EXTERNAL\$1UPSTREAM
<a name="package-group-origin-control-settings-restrictions-ext-upstream"></a>

`EXTERNAL_UPSTREAM` 設定は、パッケージマネージャーからのリクエストに応じて、パッケージバージョンを外部のパブリックリポジトリから取り込むことができるかどうかを設定します。サポートされている外部リポジトリのリストについては、「[サポートされている外部接続リポジトリ](external-connection.md#supported-public-repositories)」を参照してください。
+ **[ALLOW]**: すべてのパッケージバージョンは、外部接続を持つパブリックソースからすべてのリポジトリに取り込むことができます。
+ **[BLOCK]**: パッケージバージョンは、外部接続を持つパブリックソースからリポジトリに取り込むことはできません。
+ **[ALLOW\$1SPECIFIC\$1REPOSITORIES]**: パッケージバージョンは、パブリックソースから、外部アップストリームの許可されたリポジトリリスト内の指定されたリポジトリにのみ取り込むことができます。
+ **[INHERIT]**: `EXTERNAL_UPSTREAM` 設定は、`INHERIT` ではない設定を持つ最初の親パッケージグループから継承されます。

### INTERNAL\$1UPSTREAM
<a name="package-group-origin-control-settings-restrictions-int-upstream"></a>

`INTERNAL_UPSTREAM` 設定は、パッケージマネージャーからのリクエストに応じて、パッケージバージョンを同じ CodeArtifact ドメインの内部アップストリームリポジトリから保持できるかどうかを設定します。
+ **[ALLOW]**: アップストリームリポジトリとして設定された他の CodeArtifact リポジトリからは、任意のパッケージバージョンを保持することができます。
+ **[BLOCK]**: アップストリームリポジトリとして設定された他の CodeArtifact リポジトリからは、パッケージバージョンを保持することはできません。
+ **[ALLOW\$1SPECIFIC\$1REPOSITORIES]**: パッケージバージョンは、アップストリームリポジトリとして設定された他の CodeArtifact リポジトリから、内部アップストリームの許可されたリポジトリリストで指定されたリポジトリに対してのみ保持できます。
+ **[INHERIT]**: `INTERNAL_UPSTREAM` 設定は、`INHERIT` 以外の設定を持つ最初の親パッケージグループから継承されます。

## 許可されたリポジトリリスト
<a name="package-group-origin-control-settings-repositories"></a>

制限設定が `ALLOW_SPECIFIC_REPOSITORIES` として設定されている場合、パッケージグループには、その制限設定で許可されるリポジトリリストを含む、付随する許可されたリポジトリリストが含まれます。したがって、パッケージグループには、`ALLOW_SPECIFIC_REPOSITORIES` として設定された設定ごとに 1 つずつ、0～3 個の許可されたリポジトリリストが含まれます。

パッケージグループの許可されたリポジトリリストにリポジトリを追加するときは、追加先の許可されたリポジトリリストを指定しなければなりません。

許可されるリポジトリリストは次のとおりです。
+ `EXTERNAL_UPSTREAM`: 追加するリポジトリ内の外部リポジトリからのパッケージバージョンの取り込みを許可またはブロックします。
+ `INTERNAL_UPSTREAM`: 追加するリポジトリ内の別の CodeArtifact リポジトリからのパッケージバージョンのプルを許可またはブロックします。
+ `PUBLISH`: パッケージマネージャーから追加するリポジトリへのパッケージバージョンの直接公開を許可またはブロックします。

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

パッケージグループのオリジンコントロールを追加または編集するには、次の手順に従います。パッケージグループオリジンコントロール設定については、「[制限設定](#package-group-origin-control-settings-restrictions)」および「[許可されたリポジトリリスト](#package-group-origin-control-settings-repositories)」を参照してください。

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

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

1. パッケージオリジンコントロールを追加または編集するには `update-package-group-origin-configuration` を使用します。
   + `--domain` には、更新するパッケージグループを含む CodeArtifact ドメインを入力します。
   + `--domain-owner` には、ドメインの所有者のアカウント番号を入力します。
   + `--package-group` には、更新するパッケージグループを入力します。
   + `--restrictions` には、オリジンコントロールの制限を表すキーと値のペアを入力します。
   + `--add-allowed-repositories` には、制限タイプとリポジトリ名を含む JSON オブジェクトを入力します。これは、制限に対応する許可されたリポジトリリストに追加されます。
   + `--remove-allowed-repositories` には、制限タイプとリポジトリ名を含む JSON オブジェクトを入力します。これは、制限に対応する許可されたリポジトリリストから削除されます。

   ```
   aws codeartifact update-package-group-origin-configuration \
      --domain my_domain \
      --domain-owner 111122223333 \
      --package-group '/nuget/*' \
      --restrictions INTERNAL_UPSTREAM=ALLOW_SPECIFIC_REPOSITORIES \
      --add-allowed-repositories originRestrictionType=INTERNAL_UPSTREAM,repositoryName=my_repo \
      --remove-allowed-repositories originRestrictionType=INTERNAL_UPSTREAM,repositoryName=my_repo2
   ```

   次の例では、複数の制限と複数のリポジトリを 1 つのコマンドに追加します。

   ```
   aws codeartifact update-package-group-origin-configuration \
      --domain my_domain \
      --domain-owner 111122223333 \
      --package-group '/nuget/*' \
      --restrictions PUBLISH=BLOCK,EXTERNAL_UPSTREAM=ALLOW_SPECIFIC_REPOSITORIES,INTERNAL_UPSTREAM=ALLOW_SPECIFIC_REPOSITORIES \
      --add-allowed-repositories originRestrictionType=INTERNAL_UPSTREAM,repositoryName=my_repo originRestrictionType=INTERNAL_UPSTREAM,repositoryName=my_repo2 \
      --remove-allowed-repositories originRestrictionType=INTERNAL_UPSTREAM,repositoryName=my_repo2
   ```

## パッケージグループのオリジンコントロール設定の例
<a name="package-group-origin-control-examples"></a>

次の例は、一般的なパッケージ管理シナリオにおけるパッケージオリジンのコントロール設定です。

### プライベート名を持つパッケージの公開の許可 (取り込みは許可しない)
<a name="package-group-origin-control-examples-one"></a>

このシナリオは、パッケージ管理における一般的なシナリオであると考えられます。
+ プライベート名を持つパッケージについて、パッケージマネージャーからドメイン内リポジトリに公開されることを許可し、外部パブリックリポジトリからドメイン内リポジトリに取り込まれることをブロックします。
+ 他のすべてのパッケージについて、外部パブリックリポジトリからドメイン内リポジトリに取り込まれることを許可し、パッケージマネージャーからドメイン内リポジトリに公開されるることをブロックします。

これを実現するには、プライベート名 (複数可)、および **PUBLISH: ALLOW**、**EXTERNAL\$1UPSTREAM: BLOCK**、および **INTERNAL\$1UPSTREAM: ALLOW** のオリジン設定を含むパターンでパッケージグループを設定する必要があります。これにより、プライベート名を持つパッケージは直接公開されるようになりますが、外部リポジトリから取り込むことはできなくなります。

次の AWS CLI コマンドは、目的の動作に一致するオリジン制限設定を使用してパッケージグループを作成して設定します。

パッケージグループを作成する方法:

```
aws codeartifact create-package-group \
   --domain my_domain \
   --package-group /npm/space/anycompany~ \
   --domain-owner 111122223333 \
   --contact-info contact@email.com | URL \
   --description "my package group"
```

パッケージグループのオリジン設定を更新する方法:

```
aws codeartifact update-package-group-origin-configuration \
   --domain my_domain \
   --domain-owner 111122223333 \
   --package-group '/npm/space/anycompany~' \
   --restrictions PUBLISH=ALLOW,EXTERNAL_UPSTREAM=BLOCK,INTERNAL_UPSTREAM=ALLOW
```

### 特定のリポジトリを介した外部リポジトリからの取り込みの許可
<a name="package-group-origin-control-examples-ingestion-one-repo"></a>

このシナリオでは、ドメインに複数のリポジトリがあります。これらのリポジトリのうち、以下に示すように、`repoA` は `repoB` にアップストリーム接続し、さらに、公開リポジトリ (`npmjs.com`) に外部接続しています。

`repoA --> repoB --> npmjs.com`

特定のパッケージグループからのパッケージの取り込み (`npmjs.com` から `repoA` への `/npm/space/anycompany~` の取り込み) を、`repoB` からのみ許可します。また、パッケージグループに関連付けられたパッケージがドメイン内の他のいかなるリポジトリにも取り込まれないように、またパッケージマネージャーからパッケージが直接公開されないようにブロックしたい場合があります。これを実現するには、パッケージグループを次のように作成、設定します。

**PUBLISH: BLOCK**、**EXTERNAL\$1UPSTREAM: ALLOW\$1SPECIFIC\$1REPOSITORIES**、**INTERNAL\$1UPSTREAM: ALLOW\$1SPECIFIC\$1REPOSITORIES** のオリジン制限設定。

`repoA` と `repoB` を適切な許可されたリポジトリリストに追加します。
+ `repoA` は、内部アップストリーム (`repoB`) からパッケージを取得するため、`INTERNAL_UPSTREAM` リストに追加する必要があります。
+ `repoB` は、外部リポジトリ (`npmjs.com`) からパッケージを取得するため、`EXTERNAL_UPSTREAM` リストに追加する必要があります。

次の AWS CLI コマンドは、目的の動作に一致するオリジン制限設定を使用してパッケージグループを作成して設定します。

パッケージグループを作成する方法:

```
aws codeartifact create-package-group \
   --domain my_domain \
   --package-group /npm/space/anycompany~ \
   --domain-owner 111122223333 \
   --contact-info contact@email.com | URL \
   --description "my package group"
```

パッケージグループのオリジン設定を更新する方法:

```
aws codeartifact update-package-group-origin-configuration \
   --domain my_domain \
   --domain-owner 111122223333 \
   --package-group /npm/space/anycompany~ \
   --restrictions PUBLISH=BLOCK,EXTERNAL_UPSTREAM=ALLOW_SPECIFIC_REPOSITORIES,INTERNAL_UPSTREAM=ALLOW_SPECIFIC_REPOSITORIES \
   --add-allowed-repositories originRestrictionType=INTERNAL_UPSTREAM,repositoryName=repoA originRestrictionType=EXTERNAL_UPSTREAM,repositoryName=repoB
```

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

パッケージ、および関連するパッケージグループはそれぞれオリジンコントロール設定を備えているため、これらの 2 つの異なる設定がどのように相互作用するかを理解することが重要です。設定間の相互作用については、「[パッケージオリジンコントロールとパッケージグループオリジンコントロールの相互作用](package-origin-controls.md#package-origin-controls-interaction-package-groups)」を参照してください。

# パッケージグループ定義の構文と一致動作
<a name="package-group-definition-syntax-matching-behavior"></a>

このトピックには、パッケージグループの定義、パターンマッチング動作、パッケージの関連付け強度、パッケージグループ階層に関する情報が含まれます。

**Contents**
+ [パッケージグループ定義の構文と例](#package-group-definition-syntax-examples)
  + [パッケージグループの定義と正規化](#package-group-definition-syntax-examples-normalization)
  + [パッケージグループ定義の名前空間](#package-group-definition-syntax-examples-namespaces)
+ [パッケージグループの階層とパターンの特異度](#package-group-hierarchy-pattern-specificity)
+ [単語、単語境界、プレフィックスマッチング](#package-group-word-boundary-prefix)
+ [大文字と小文字の区別](#package-group-case-sensitivity)
+ [強い一致と弱い一致](#package-group-strong-and-weak-match)
+ [その他のバリエーション](#package-group-additional-variations)

## パッケージグループ定義の構文と例
<a name="package-group-definition-syntax-examples"></a>

 パッケージグループを定義するためのパターン構文は、パッケージパスの形式に厳密に従います。パッケージパスは、パッケージの座標コンポーネント (形式、名前空間、名前) に基づき作成されます。先頭にスラッシュを追加し、各コンポーネントをスラッシュで区切ります。例えば、*space* という名前空間の *anycompany-ui-components* という npm パッケージのパッケージパスは、*/npm/space/anycompany-ui-components* です。

パッケージグループパターンは、パッケージパスと同じ構造に従います。ただし、グループ定義の一部として指定されていないコンポーネントは省略され、パターンの末尾にはサフィックスが付きます。付加されるサフィックスによって、パターンの一致動作が次のように決まります。
+ サフィックスが `$` の場合、完全なパッケージ座標が一致します。
+ サフィックスが `~` の場合、プレフィックスが一致します。
+ サフィックスが `*` の場合、以前に定義したコンポーネントのすべての値が一致します。

使用できる各組み合わせのパターン例を以下に示します。

1. すべてのパッケージ形式: `/*`

1. 特定のパッケージ形式: `/npm/*`

1. パッケージ形式と名前空間プレフィックス: `/maven/com.anycompany~`

1. パッケージ形式と名前空間: `/npm/space/*`

1. パッケージ形式、名前空間、名前プレフィックス: `/npm/space/anycompany-ui~`

1. パッケージ形式、名前空間、名前: `/maven/org.apache.logging.log4j/log4j-core$`

上記の例に示すように、`~` サフィックスは、プレフィックスの一致を表すために名前空間または名前の末尾に付加されます。パス内の次のコンポーネントのすべての値 (すべての形式、すべての名前空間、またはすべての名前) を一致させるために使用する場合、スラッシュの後に `*` が付加されます。

### パッケージグループの定義と正規化
<a name="package-group-definition-syntax-examples-normalization"></a>

CodeArtifact は、NuGet、Python、Swift パッケージ名を正規化し、保存する前に Swift パッケージ名前空間を正規化します。CodeArtifact は、パッケージグループ定義でパッケージを照合するときに、これらの正規化された名前を使用します。したがって、これらの形式の名前空間または名前を含むパッケージグループは、正規化された名前空間と名前を使用しなければなりません。パッケージ名と名前空間を正規化する方法の詳細については、[NuGet](nuget-name-normalization.md)、[Python](python-name-normalization.md)、[Swift](swift-name-normalization.md) の名前の正規化ドキュメントを参照してください。

### パッケージグループ定義の名前空間
<a name="package-group-definition-syntax-examples-namespaces"></a>

名前空間を含まないパッケージまたはパッケージ形式の場合 (Python および NuGet)、パッケージグループに名前空間を含めることはできません。これらのパッケージグループのパッケージグループ定義には、空白の名前空間セクションが含まれています。例えば、*requests* という名前の Python パッケージのパスは */python//requests* です。

名前空間を含むパッケージまたはパッケージ形式の場合 (Maven、汎用、Swift)、パッケージ名が含まれていれば名前空間を含める必要があります。Swift パッケージ形式の場合は、正規化されたパッケージ名前空間が使用されます。Swift パッケージ名前空間の正規化方法の詳細については、「[Swift パッケージ名と名前空間の正規化](swift-name-normalization.md)」を参照してください。

## パッケージグループの階層とパターンの特異度
<a name="package-group-hierarchy-pattern-specificity"></a>

パッケージグループに「含まれる」または「関連付けられる」パッケージとは、そのグループのパターンには一致するが、より詳細なパターンを持つ別のグループには一致しないパッケージです。例えば、パッケージグループ `/npm/*`と `/npm/space/*` の場合、パッケージパス */npm//react* は最初のグループ (`/npm/*`) に関連付けられ、*/npm/space/aui.components* と */npm/space/amplify-ui-core* は 2 番目のグループ (`/npm/space/*`) に関連付けられます。パッケージが複数のグループに一致する場合でも、そのパッケージが実際に関連付けられるのは 1 つのグループだけであり、それは最も特異的に一致するグループです。

パッケージパスが複数のパターンに一致する場合、より「特異的」なパターンとは、最長一致するパターンと考えることができます。別の言い方をすると、より特異的なパターンとは、より一般的なパターンに一致するパッケージのうち、真部分集合にだけ一致するパターンを指します。前の例では、`/npm/space/*` に一致するすべてのパッケージが `/npm/*` とも一致しますが、その逆は成り立ちません。つまり、`/npm/space/*` は、`/npm/*` の真部分集合であるため、より特異的なパターンになります。一方のグループがもう一方のグループの部分集合である場合、そこには階層が生じ、`/npm/space/*` は親グループである `/npm/*` のサブグループとなります。

パッケージには最も特異的なパッケージグループの設定のみが適用されますが、そのグループが親グループの設定を継承するように構成されている場合もあります。

## 単語、単語境界、プレフィックスマッチング
<a name="package-group-word-boundary-prefix"></a>

プレフィックスマッチングについて説明する前に、いくつかの重要な用語を定義します。
+ *単語*は、文字または数字であり、0 個以上の文字、数字、またはマーク文字 (アクセント、ウムラウトなど) が続きます。
+ *単語境界*は、単語以外の文字に達したときの単語の末尾にあります。単語以外の文字は、`.`、`-`、`_` などの句読点文字です。

具体的には、単語の正規表現パターンは `[\p{L}\p{N}][\p{L}\p{N}\p{M}]*` で、次のように分解できます。
+ `\p{L}` は任意の文字を表しています。
+ `\p{N}` は任意の数字を表しています。
+ `\p{M}` は、アクセント、ウムラウトなどのマーク文字を表しています。

したがって、`[\p{L}\p{N}]` は数字または文字を表し、`[\p{L}\p{N}\p{M}]*` は 0 個以上の文字、数字、またはマーク文字を表します。この正規表現パターンの各一致の末尾には単語境界があります。

**注記**  
単語境界の一致は、この「単語」の定義に基づいています。これは、辞書で定義される単語や CamelCase を基準にしたものではありません。例えば、`oneword` または `OneWord` に単語境界はありません。

以上のように単語と単語境界を定義したので、CodeArtifact のプレフィックスマッチングについて説明できます。単語境界のプレフィックスの一致を示すために、単語文字の後に一致文字 (`~`) が使用されます。例えば、パターン `/npm/space/foo~` は、パッケージパス `/npm/space/foo` と `/npm/space/foo-bar` に一致しますが、`/npm/space/food` と `/npm/space/foot` には一致しません。

パターン `/npm/*` のように、単語以外の文字に続く場合は `~` の代わりにワイルドカード (`*`) を使用する必要があります。

## 大文字と小文字の区別
<a name="package-group-case-sensitivity"></a>

パッケージグループ定義では大文字と小文字が区別されます。つまり、大文字と小文字だけが異なるパターンでも、個別のパッケージグループとして存在できます。例えば、ユーザーは、npm Public Registry に存在する、大文字と小文字のみが異なる *AsyncStorage*、*asyncStorage*、*asyncstorage* という 3 つの個別のパッケージに対して、パターン `/npm//AsyncStorage$`、`/npm//asyncStorage$`、および `/npm//asyncstorage$` を備える個別のパッケージグループを作成できます。

大文字と小文字は区別されますが、パッケージに大文字と小文字が異なるパターンのバリエーションがあっても、CodeArtifact はパッケージをパッケージグループに関連付けます。ユーザーが、上記のうち `/npm//AsyncStorage$` のパッケージグループのみを作成し、他の 2 つのグループを作成しない場合、*AsyncStorage* の大文字と小文字のすべてのバリエーション (*asyncStorage* と *asyncstorage* など) がパッケージグループに関連付けられます。ただし、次のセクション ([強い一致と弱い一致](#package-group-strong-and-weak-match)) で説明するように、これらのバリエーションはパターンと完全に一致する *AsyncStorage* とは異なる方法で処理されます。

## 強い一致と弱い一致
<a name="package-group-strong-and-weak-match"></a>

前のセクション ([大文字と小文字の区別](#package-group-case-sensitivity)) では、パッケージグループでは大文字と小文字が区別されると述べたうえで、大文字と小文字は同じように扱われると説明しました。これは、CodeArtifact のパッケージグループ定義には、強い一致 (完全一致) と弱い一致 (バリエーション一致) の概念があるためです。強い一致は、パッケージがパターンと完全に一致し、バリエーションがない場合です。弱い一致は、パッケージがパターンのバリエーション (大文字と小文字が異なるなど) と一致する場合です。弱い一致の動作により、パッケージグループのパターンのバリエーションにあたるパッケージが、より一般的なパッケージグループに割り当てられてしまうことを防ぎます。パッケージが、最も特異的に一致するグループのパターンのバリエーション (弱い一致) である場合、パッケージはグループに関連付けられます。ただし、グループのオリジンコントロール設定が適用されることはなく、パッケージはブロックされるため、パッケージの新しいバージョンがアップストリームからプルされたり公開されたりすることはありません。この動作により、ほぼ同名のパッケージの依存関係の混乱に起因するサプライチェーン攻撃のリスクが軽減されます。

弱い一致の動作を示す例として、パッケージグループ `/npm/*` が取り込みを許可し、公開をブロックするとします。より具体的なパッケージグループ `/npm//anycompany-spicy-client$` は、取り込みをブロックし、公開を許可するように設定されています。*anycompany-spicy-client* という名前のパッケージは、そのパッケージグループの強い一致であり、パッケージバージョンの公開を許可し、パッケージバージョンの取り込みをブロックします。公開が許可される、大文字と小文字を区別するパッケージ名は、パッケージ定義パターンとの強い一致である *anycompany-spicy-client* のみです。*AnyCompany-spicy-client* などの大文字と小文字が異なるバリエーションは、弱い一致であるため公開がブロックされます。さらに重要なのは、パッケージグループはパターンで使用される小文字の名前だけでなく、大文字と小文字のすべてのバリエーションの取り込みをブロックします。これにより、依存関係撹乱攻撃のリスクが低減されます。

## その他のバリエーション
<a name="package-group-additional-variations"></a>

大文字と小文字の違いに加えて、弱い一致では、ダッシュ (`-`)、ドット (`.`)、アンダースコア (`_`)、および紛らわしい文字 (別のアルファベットに見た目が似ている文字など) の並びの違いも無視されます。弱い一致に使用される正規化の際に、CodeArtifact は大文字小文字の畳み込み (小文字への変換と同様) を実行し、ダッシュ、ドット、アンダースコアの文字の並びを 1 つのドットに置き換え、混同されやすい文字を正規化します。

弱い一致では、ダッシュ、ドット、アンダースコアは同等に扱われますが、完全に無視されることはありません。つまり、*foo-bar*、*foo.bar*、*foo..bar*、および *foo\$1bar* はすべて同等の弱い一致ですが、*foobar* は同じではありません。一部のパブリックリポジトリには、これらのタイプのバリエーションを防ぐためのステップが実装されていますが、パブリックリポジトリによって提供される保護により、パッケージグループのこの機能が不要になることはありません。例えば、npm Public Registry レジストリなどのパブリックリポジトリは、*my-package* という名前のパッケージが既に公開されている場合にのみ、*my-package* の新しいバリエーションを防止します。*my-package* が内部パッケージであり、公開を許可して取り込みをブロックするパッケージグループ `/npm//my-package$` が作成されている場合は、*my.package* などのバリアントが許可されないように、*my-package* を npm Public Registry に公開しないことが推奨されます。

Maven などの一部のパッケージ形式はこれらの文字を異なるものとして扱いますが (Maven では、`.` は名前空間階層の区切り文字として扱われますが、`-` や `_` はそのように扱われません)、*com.act-on* のようなものはそれでも *com.act.on* と混同される可能性があります。

**注記**  
なお、複数のバリエーションがパッケージグループに関連付けられるたびに、管理者は特定のバリエーションの新しいパッケージグループを作成して、そのバリエーションに異なる動作を設定する場合があります。

# CodeArtifact でパッケージグループにタグを付ける
<a name="package-group-tags"></a>

タグは、AWS リソースに関連付けられるキーと値のペアです。CodeArtifact では、パッケージグループにタグを適用できます。CodeArtifact リソースのタグ付け、ユースケース、タグのキーと値の制約、サポートされているリソースタイプの詳細については、[リソースのタグ付け](tag-resources.md)を参照してください。

パッケージグループを作成するとき、または、既存のパッケージグループのタグ値を追加、削除、更新するときに CLI を使用してタグを指定できます。

## パッケージグループにタグを付ける (CLI)
<a name="package-group-tags-cli"></a>

CLI を使用してパッケージグループのタグを管理します。

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

**ヒント**  
タグを追加するには、パッケージグループの Amazon リソースネーム (ARN) の指定が必要です。パッケージグループの ARN を取得するには、`describe-package-group` コマンドを実行します。  

```
aws codeartifact describe-package-group \
   --domain my_domain \
   --package-group /npm/scope/anycompany~ \
   --query packageGroup.arn
```

**Topics**
+ [パッケージグループにタグを追加する (CLI)](#package-group-tags-add-cli)
+ [パッケージグループのタグを表示する (CLI)](#package-group-tags-list-cli)
+ [パッケージグループのタグを編集する (CLI)](#package-group-tags-edit-cli)
+ [パッケージグループからタグを削除する (CLI)](#package-group-tags-delete-cli)

### パッケージグループにタグを追加する (CLI)
<a name="package-group-tags-add-cli"></a>

タグは、パッケージグループの作成時に追加したり、既存のパッケージグループに追加したりできます。パッケージグループの作成時にタグを追加する方法については、「[パッケージグループを作成する](create-package-group.md)」を参照してください。

AWS CLI を使用して既存のパッケージグループにタグを追加するには、ターミナルまたはコマンドラインで、**tag-resource** コマンドを実行して、タグを追加するパッケージグループの Amazon リソースネーム (ARN) と、追加するタグのキーおよび値を指定します。パッケージグループの ARN については、「[パッケージグループ ARN](auth-and-access-control-permissions-reference.md#package-group-arns)」を参照してください。

パッケージグループには 1 つ以上のタグを追加できます。例えば、*/npm/scope/anycompany\$1* という名前のパッケージグループに 2 つのタグを付けます。*value1* のタグ値がある *key1* という名前のタグキーと、*value2* のタグ値がある *key2* という名前のタグキーです。

```
aws codeartifact tag-resource \
   --resource-arn arn:aws:codeartifact:us-west-2:123456789012:package-group/my_domain/npm/scope/anycompany~ \
   --tags key=key1,value=value1 key=key2,value=value2
```

成功した場合は、コマンドの出力はありません。

### パッケージグループのタグを表示する (CLI)
<a name="package-group-tags-list-cli"></a>

AWS CLI を使用してパッケージグループの AWS タグを表示するには、以下の手順に従います。タグが追加されていない場合、返されるリストは空になります。

ターミナルまたはコマンドラインで、パッケージグループの Amazon リソースネーム (ARN) を指定して **list-tags-for-resource** コマンドを実行します。パッケージグループの ARN については、「[パッケージグループ ARN](auth-and-access-control-permissions-reference.md#package-group-arns)」を参照してください。

例えば、ARN 値が `arn:aws:codeartifact:us-west-2:123456789012:package-group/my_domain/npm/scope/anycompany~` のパッケージグループ */npm/scope/anycompany\$1* のタグキーとタグ値のリストを表示する方法は次のとおりです。

```
aws codeartifact list-tags-for-resource \
   --resource-arn arn:aws:codeartifact:us-west-2:123456789012:package-group/my_domain/npm/scope/anycompany~
```

成功した場合、このコマンドは次のような情報を返します。

```
{
    "tags": {
        "key1": "value1",
        "key2": "value2"
    }
}
```

### パッケージグループのタグを編集する (CLI)
<a name="package-group-tags-edit-cli"></a>

AWS CLI を使用してパッケージグループのタグを編集するには、以下の手順に従います。既存のキーの値を変更したり、別のキーを追加できます。次のセクションに示すように、パッケージグループからタグを削除することもできます。

ターミナルまたはコマンドラインで、**tag-resource** コマンドを実行して、タグを更新するパッケージグループの ARN、およびタグキーとタグ値を指定します。パッケージグループの ARN については、「[パッケージグループ ARN](auth-and-access-control-permissions-reference.md#package-group-arns)」を参照してください。

```
aws codeartifact tag-resource \
   --resource-arn arn:aws:codeartifact:us-west-2:123456789012:package-group/my_domain/npm/scope/anycompany~ \
   --tags key=key1,value=newvalue1
```

成功した場合は、コマンドの出力はありません。

### パッケージグループからタグを削除する (CLI)
<a name="package-group-tags-delete-cli"></a>

AWS CLI を使用してパッケージグループからタグを削除するには、以下の手順に従います。

**注記**  
パッケージグループを削除すると、削除されたパッケージグループのすべてのタグの関連付けが解除されます。パッケージグループを削除する前にタグを削除する必要はありません。

ターミナルまたはコマンドラインで、**untag-resource** コマンドを実行して、タグを削除するパッケージグループの ARN と、削除するタグのタグキーを指定します。パッケージグループの ARN については、「[パッケージグループ ARN](auth-and-access-control-permissions-reference.md#package-group-arns)」を参照してください。

例えば、タグキー *key1* と *key2* を使用して、パッケージグループ */npm/scope/anycompany\$1* の複数のタグを削除する方法は次のとおりです。

```
aws codeartifact untag-resource \
   --resource-arn arn:aws:codeartifact:us-west-2:123456789012:package-group/my_domain/npm/scope/anycompany~ \
   --tag-keys key1 key2
```

成功した場合は、コマンドの出力はありません。タグを削除した後、パッケージグループに残っているタグは、`list-tags-for-resource` コマンドを使用して表示できます。