

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 程序包组来源控制
<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**：程序包版本只能直接发布到允许发布的存储库列表中指定的存储库。
+ **继承**：`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**：程序包版本只能从公有来源摄取到外部上游的允许存储库列表中指定的存储库中。
+ **继承**：`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 存储库保留到内部上游的允许存储库列表中指定的存储库中。
+ **继承**：`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>

这种情况很可能是程序包管理中的常见场景：
+ 允许将具有私有名称的程序包从程序包管理器发布到您域中的存储库，并阻止从外部公有存储库将这些程序包摄取到您域中的存储库。
+ 允许从外部公有存储库将所有其他程序包摄取到您域中的存储库，并阻止通过程序包管理器将这些程序包发布到您域中的存储库。

为此，应使用一种包含私有名称以及**发布：允许**、**EXTERNAL\_UPSTREAM：阻止**和 **INTERNAL\_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}}={{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` 实现。您还想阻止将与程序包组关联的程序包摄取到您域中的任何其他存储库中，并阻止通过程序包管理器直接发布程序包。为此，按如下方式创建和配置程序包组：

**发布：阻止**、**EXTERNAL\_UPSTREAM：ALLOW\_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)。