

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 在 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 套件群組的詳細資訊，請參閱 [使用 建立 CodeArtifact 資源 AWS CloudFormation](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. 在**套件群組資訊**中，選擇性地新增套件群組的描述和聯絡人電子郵件。選擇 **Next (下一步)**。

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 CLI 請依照中的步驟進行設定[使用 AWS CodeArtifact 設定](get-set-up-for-codeartifact.md)。

```
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、聯絡人電子郵件和套件原始伺服器控制項。

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 CLI 請依照中的步驟進行設定[使用 AWS CodeArtifact 設定](get-set-up-for-codeartifact.md)。

若要檢視網域中的所有套件群組，請使用 `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，然後選擇 **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\$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\$1SPECIFIC\$1REPOSITORIES**：套件版本只能從公有來源擷取到外部上游的允許儲存庫清單中指定的儲存庫。
+ **INHERIT**：`EXTERNAL_UPSTREAM`設定繼承自第一個父系套件群組，其設定不是 `INHERIT`。

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

`INTERNAL_UPSTREAM` 設定會設定套件管理員請求時，是否可從相同 CodeArtifact 網域的內部上游儲存庫保留套件版本。
+ **允許**：任何套件版本都可以從設定為上游儲存庫的其他 CodeArtifact 儲存庫保留。
+ **封鎖**：套件版本無法從設定為上游儲存庫的其他 CodeArtifact 儲存庫保留。
+ **ALLOW\$1SPECIFIC\$1REPOSITORIES**：套件版本只能從設定為上游儲存庫的其他 CodeArtifact 儲存庫保留到內部上游的允許儲存庫清單中指定的儲存庫。
+ **INHERIT**：`INTERNAL_UPSTREAM`設定繼承自第一個父系套件群組，其設定不是 `INHERIT`。

## 允許儲存庫清單
<a name="package-group-origin-control-settings-repositories"></a>

當限制設定設定為 時`ALLOW_SPECIFIC_REPOSITORIES`，套件群組會包含隨附的允許儲存庫清單，其中包含該限制設定允許的儲存庫清單。因此，套件群組包含 0 到 3 個允許儲存庫清單的任何位置，每個設定為 的設定各一個`ALLOW_SPECIFIC_REPOSITORIES`。

當您將儲存庫新增至套件群組的允許儲存庫清單時，您必須指定要將其新增至哪個允許的儲存庫清單。

可能允許的儲存庫清單如下：
+ `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 CLI 請依照中的步驟進行設定[使用 AWS CodeArtifact 設定](get-set-up-for-codeartifact.md)。

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
   ```

   下列範例會在一個命令中新增多個限制和多個儲存庫。

   ```
   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) 和原始伺服器設定的模式 (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`

您想要允許從特定套件群組擷取套件，`/npm/space/anycompany~`從 `npmjs.com`到 `repoA`，但只能透過 `repoB`。您也想要封鎖將與套件群組相關聯的套件擷取到網域中的任何其他儲存庫，並封鎖使用套件管理員直接發佈套件。若要達成此目的，您可以建立和設定套件群組，如下所示：

**PUBLISH：BLOCK** 和 **EXTERNAL\$1UPSTREAM：ALOW\$1SPECIFIC\$1REPOSITORIES** 和 **INTERNAL\$1UPSTREAM： ALLOW\$1SPECIFIC\$1REPOSITORIES** 的原始伺服器限制設定。

`repoA` 和 `repoB`已新增至適當的允許儲存庫清單：
+ `repoA` 應新增至`INTERNAL_UPSTREAM`清單，因為它會從其內部上游 取得套件`repoB`。
+ `repoB` 應新增至`EXTERNAL_UPSTREAM`清單，因為它會從外部儲存庫 取得套件`npmjs.com`。

下列 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>

由於套件具有原始伺服器控制設定，且其相關聯的套件群組具有原始伺服器控制設定，因此請務必了解這兩個不同設定如何彼此互動。如需設定之間互動的相關資訊，請參閱 [套件原始伺服器控制如何與套件群組原始伺服器控制互動](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>

 用於定義套件群組的模式語法會密切遵循套件路徑的格式。套件路徑是從套件的座標元件 （格式、命名空間和名稱） 建立，方法是將正斜線新增至開頭，並以正斜線分隔每個元件。例如，命名*空間*中名為 *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)，套件群組不得包含命名空間。這些套件群組的套件群組定義包含空白命名空間區段。例如，名為 *請求*的 Python 套件路徑為 */python//requests*。

對於具有命名空間 (Maven、一般和 Swift) 的套件或套件格式，如果包含套件名稱，則必須包含命名空間。對於 Swift 套件格式，將使用標準化套件命名空間。如需如何標準化 Swift 套件命名空間的詳細資訊，請參閱 [Swift 套件名稱和命名空間標準化](swift-name-normalization.md)。

## 套件群組階層和模式特異性
<a name="package-group-hierarchy-pattern-specificity"></a>

「in」或「associated」套件群組的套件是具有符合群組模式但不符合更特定群組模式之套件路徑的套件。例如，假設套件群組 `/npm/*`和 `/npm/space/*`，套件路徑 */npm//react* 與第一個群組 (`/npm/*`) 相關聯，而 */npm/space/aui.components *和 */npm/space/amplify-ui-core* 與第二個群組 (`/npm/space/*`) 相關聯。即使套件可能符合多個群組，每個套件只會與單一群組相關聯、最具體的相符項目，而且只有一個群組的組態適用於套件。

當套件路徑符合多個模式時，可將「更具體」模式視為最長的相符模式。或者，更具體的模式是符合符合較不具體模式之套件適當子集的模式。從我們先前的範例中，每個符合 的套件`/npm/space/*`也都符合 `/npm/*`，但反向不是 true，這會讓模式`/npm/space/*`更具體，因為它是 的適當子集`/npm/*`。由於一個群組是另一個群組的子集，因此會建立階層，其中 `/npm/space/*` 是父群組的子群組 `/npm/*`。

雖然只有最特定的套件群組組態適用於套件，但該群組可設定為繼承其父群組的組態。

## 字詞、字詞邊界和字首比對
<a name="package-group-word-boundary-prefix"></a>

在討論字首比對之前，讓我們定義一些關鍵術語：
+ 字母或數字後面加上零個或多個字母、數字或標記字元的*單*字 （例如重音、跛行等）。
+ 當達到非*單字字元時，單字邊界*位於單字結尾。非單字字元是標點符號字元`.`，例如 `-`、 和 `_`。

具體而言，單字的 regex 模式是 `[\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}]*`代表零個或多個字母、數字或標記字元，且單字邊界位於此規則運算式模式的每個相符項目的結尾。

**注意**  
單字邊界比對是根據「單字」的定義。它不是以字典或 CameCase 中定義的單字為基礎。例如， `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//asyncstorage$`為 npm Public Registry：*AsyncStorage*`/npm//asyncStorage$`、*asyncStorage*、非同步儲存中存在的三個不同套件，建立具有模式 `/npm//AsyncStorage$`、 和 的個別套件群組。 **

雖然大小寫很重要，但如果套件的模式變化因大小寫而異，CodeArtifact 仍會將套件與套件群組建立關聯。如果使用者建立`/npm//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 會執行大小寫摺疊 （類似於轉換為小寫）、將破折號、點和底線字元的序列取代為單一點，以及正規化可混淆字元。

弱比對會將破折號、點和底線視為對等，但不會完全忽略它們。這表示 *foo-bar*、*foo.bar*、*foo..bar* 和 *foo\$1bar* 都是弱配對對等項目，但 *foobar* 不是。雖然數個公有儲存庫實作步驟來防止這些類型的變異，但公有儲存庫提供的保護不會讓套件群組的這項功能成為不必要的。例如，如 npm 公有登錄檔登錄檔等公有儲存庫，只有在 my*-package 已發佈時，才會防止名為 my-package* *的套件*出現新的變化。如果 *my-package* 是允許`/npm//my-package$`發佈和封鎖擷取的內部套件，則您可能不想將 *my-package* 發佈至 npm Public Registry，以防止允許 *my.package *等變體。

雖然 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 CLI 請依照中的步驟進行設定[使用 AWS CodeArtifact 設定](get-set-up-for-codeartifact.md)。

**提示**  
若要新增標籤，您必須提供套件群組的 Amazon Resource Name (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 Resource Name (ARN)，以及您要新增標籤的索引鍵和值。如需套件群組 ARNs 的詳細資訊，請參閱 [套件群組 ARNs](auth-and-access-control-permissions-reference.md#package-group-arns)。

您可以將多個標籤新增至套件群組。例如，若要標記套件群組，*/npm/scope/anycompany\$1* 有兩個標籤、一個標籤索引鍵名為 *key1* 且標籤值為 *value1*，以及一個標籤索引鍵名為 *key2* 且標籤值為 *value2*：

```
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 Resource Name (ARN) 執行 **list-tags-for-resource**命令。如需套件群組 ARNs 的詳細資訊，請參閱 [套件群組 ARNs](auth-and-access-control-permissions-reference.md#package-group-arns)。

例如，若要檢視套件群組的標籤索引鍵和標籤值清單，請命名為 */npm/scope/anycompany\$1*，其 ARN 值為 `arn:aws:codeartifact:us-west-2:123456789012:package-group/my_domain/npm/scope/anycompany~`

```
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，並指定標籤索引鍵和標籤值。如需套件群組 ARNs 的詳細資訊，請參閱 [套件群組 ARNs](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，以及您要移除之標籤的標籤索引鍵。如需套件群組 ARNs的相關資訊，請參閱 [套件群組 ARNs](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`命令檢視套件群組上的其餘標籤。