

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

# 套件群組原始伺服器控制
<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\_SPECIFIC\_REPOSITORIES**：套件版本只能直接發佈到允許發佈的儲存庫清單中指定的儲存庫。
+ **INHERIT**：`PUBLISH`設定繼承自第一個父系套件群組，其設定不是 `INHERIT`。

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

`EXTERNAL_UPSTREAM` 設定會設定套件管理員要求時，是否可以從外部公有儲存庫擷取套件版本。如需支援的外部儲存庫清單，請參閱 [支援的外部連線儲存庫](external-connection.md#supported-public-repositories)。
+ **允許**：任何套件版本都可以從具有外部連線的公有來源擷取到所有儲存庫。
+ **封鎖**：套件版本無法從具有外部連線的公有來源擷取到任何儲存庫。
+ **ALLOW\_SPECIFIC\_REPOSITORIES**：套件版本只能從公有來源擷取到外部上游的允許儲存庫清單中指定的儲存庫。
+ **INHERIT**：`EXTERNAL_UPSTREAM`設定繼承自第一個父系套件群組，其設定不是 `INHERIT`。

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

`INTERNAL_UPSTREAM` 設定會設定套件管理員請求時，是否可從相同 CodeArtifact 網域的內部上游儲存庫保留套件版本。
+ **允許**：任何套件版本都可以從設定為上游儲存庫的其他 CodeArtifact 儲存庫保留。
+ **封鎖**：套件版本無法從設定為上游儲存庫的其他 CodeArtifact 儲存庫保留。
+ **ALLOW\_SPECIFIC\_REPOSITORIES**：套件版本只能從設定為上游儲存庫的其他 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\_UPSTREAM： BLOCK** 和 **INTERNAL\_UPSTREAM： 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\_UPSTREAM：ALOW\_SPECIFIC\_REPOSITORIES** 和 **INTERNAL\_UPSTREAM： ALLOW\_SPECIFIC\_REPOSITORIES** 的原始伺服器限制設定。

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