

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Trabajar con grupos de paquetes en CodeArtifact
<a name="package-groups"></a>

Los *grupos de paquetes* se pueden usar para aplicar la configuración a varios paquetes que coincidan con un patrón definido mediante el formato del paquete, el espacio de nombres del paquete y el nombre del paquete. Puede usar grupos de paquetes para configurar de manera más cómoda los controles de origen de los paquetes para varios paquetes. Los controles de origen de los paquetes se utilizan para bloquear o permitir la ingesta o publicación de nuevas versiones de paquetes, lo que protege a los usuarios de acciones malintencionadas conocidas como ataques de sustitución de dependencias.

Cada dominio de CodeArtifact contiene automáticamente un grupo de paquetes raíz. Este grupo de paquetes raíz, `/*`, contiene todos los paquetes y permite que las versiones de paquetes ingresen a los repositorios del dominio desde todos los tipos de origen de forma predeterminada. El grupo de paquetes raíz se puede modificar, pero no se puede eliminar.

La característica Package Group Configuration funciona eventualmente de manera coherente al crear un grupo de paquetes nuevo o eliminar un grupo de paquetes existente. Esto significa que, al crear o eliminar un grupo de paquetes, los controles de origen se aplicarán a los paquetes asociados esperados, pero con cierto retraso debido al comportamiento coherente final. El tiempo necesario para lograr una coherencia final depende del número de grupos de paquetes en el dominio, así como del número de paquetes en el dominio. Puede haber un breve período en el que los controles de origen no se reflejen inmediatamente en los paquetes asociados tras la creación o eliminación de un grupo de paquetes.

Además, las actualizaciones de los controles de origen de los grupos de paquetes entran en vigor casi con carácter inmediato. A diferencia de la creación o eliminación de grupos de paquetes, los cambios en los controles de origen de un grupo de paquetes existente se reflejan en los paquetes asociados sin esta demora.

Estos temas contienen información sobre los grupos de paquetes de AWS CodeArtifact.

**Topics**
+ [Creación de un grupo de paquetes](create-package-group.md)
+ [Visualización o edición de un grupo de paquetes](view-edit-package-group.md)
+ [Eliminación de un grupo de paquetes](delete-package-group.md)
+ [Controles de origen de grupos de paquetes](package-group-origin-controls.md)
+ [Sintaxis de la definición de los grupos de paquetes y comportamiento coincidente](package-group-definition-syntax-matching-behavior.md)
+ [Etiquetado de un grupo de paquetes](package-group-tags.md)

# Creación de un grupo de paquetes
<a name="create-package-group"></a>

Puede crear un grupo de paquetes con la consola de CodeArtifact, la AWS Command Line Interface (AWS CLI) o CloudFormation. Para obtener más información acerca de la administración de grupos de paquetes de CodeArtifact con CloudFormation, consulte [Creación de recursos de CodeArtifact con AWS CloudFormation](cloudformation-codeartifact.md). 

## Creación de un grupo de paquetes (consola)
<a name="create-package-group-console"></a>

1. Abra la consola de AWS CodeArtifact en [https://console.aws.amazon.com/codesuite/codeartifact/home](https://console.aws.amazon.com/codesuite/codeartifact/home).

1. En el panel de navegación, elija **Dominios** y luego elija el dominio en el que quiera crear un grupo de paquetes.

1. Seleccione **Grupos de paquetes** y, después, **Crear grupo de paquetes**.

1. En **Definición del grupo de paquetes**, introduzca la definición del grupo de paquetes para el suyo. La definición de un grupo de paquetes determina qué paquetes están asociados a él. Puede introducir la definición del grupo de paquetes de forma manual con texto, o bien utilizar el modo visual para hacer selecciones y que la definición del grupo de paquetes se cree automáticamente.

1. Para usar el modo visual con la intención de crear la definición del grupo de paquetes:

   1. Seleccione **Visual** para cambiar al modo visual.

   1. En **Formato de los paquetes**, elija el formato de los paquetes que se van a asociar a este grupo.

   1. En **Espacio de nombres (ámbito)**, elija los criterios del espacio de nombres que desee que coincidan.
      + **Igual**: coincidencias exactas con el espacio de nombres especificado. Si marca esta opción, introduzca el espacio de nombres que quiera hacer coincidir.
      + **En blanco**: coincidencias con paquetes sin espacio de nombres.
      + **Empieza por la palabra**: coincidencias con espacios de nombres que empiezan por una palabra específica. Si marca esta opción, introduzca una palabra prefijo con la que buscar coincidencias. Para obtener más información sobre las palabras y las restricciones asociadas, consulte [Coincidencia de palabras, de límites de palabra y de prefijos](package-group-definition-syntax-matching-behavior.md#package-group-word-boundary-prefix).
      + **Todos**: coincidencias con paquetes de todos los espacios de nombres.

   1. Si selecciona **Igual**, **En blanco** o **Empieza por la palabra**, en **Nombre del paquete**, elija los criterios que quiera hacer coincidir respecto de los nombres de los paquetes.
      + **Exactamente igual**: coincidencias exactas con el nombre del paquete especificado. Si marca esta opción, introduzca el nombre del paquete que quiera hacer coincidir.
      + **Empieza por el prefijo**: coincidencias con paquetes que empiezan por un prefijo específico.
      + **Empieza por la palabra**: coincidencias con paquetes que empiezan por una palabra específica. Si marca esta opción, introduzca una palabra prefijo con la que buscar coincidencias. Para obtener más información sobre las palabras y las restricciones asociadas, consulte [Coincidencia de palabras, de límites de palabra y de prefijos](package-group-definition-syntax-matching-behavior.md#package-group-word-boundary-prefix).
      + **Todos**: coincidencias con todos los paquetes.

   1. Pulse **Siguiente** para revisar la definición.

1. Para introducir la definición del grupo de paquetes con texto:

   1. Seleccione **Texto** para cambiar al modo de texto.

   1. En **Definición del grupo de paquetes**, introduzca la definición del grupo de paquetes. Para obtener más información sobre la sintaxis de definición de los grupos de paquetes, consulte [Sintaxis de la definición de los grupos de paquetes y comportamiento coincidente](package-group-definition-syntax-matching-behavior.md).

   1. Pulse **Siguiente** para revisar la definición.

1. En **Revisar la definición**, revise los paquetes que se van a incluir en el grupo de paquetes nuevo en función de la definición proporcionada anteriormente. Una vez completada la revisión, pulse **Siguiente**.

1. En **Información del grupo de paquetes**, agregue opcionalmente una descripción y el correo electrónico de contacto del grupo de paquetes. Pulse **Siguiente**.

1. En **Controles de origen de paquetes**, configure los controles de origen para aplicarlos a los paquetes del grupo. Para obtener más información sobre los controles de origen de paquetes, consulte [Controles de origen de grupos de paquetes](package-group-origin-controls.md).

1. Seleccione **Crear grupo de paquetes**.

## Creación de un grupo de paquetes (AWS CLI)
<a name="create-package-group-cli"></a>

Utilice el comando `create-package-group` para crear un grupo de paquetes en su dominio. Para la opción `--package-group`, introduzca la definición del grupo que paquetes que determina qué paquetes están asociados a él. Para obtener más información sobre la sintaxis de definición de los grupos de paquetes, consulte [Sintaxis de la definición de los grupos de paquetes y comportamiento coincidente](package-group-definition-syntax-matching-behavior.md).

Si no lo ha hecho, configure AWS CLI siguiendo los pasos que se indican en [Configuración con 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
```

# Visualización o edición de un grupo de paquetes
<a name="view-edit-package-group"></a>

Puede ver una lista de todos los grupos de paquetes, ver los detalles de un grupo de paquetes específico o editar los detalles o la configuración de un grupo de paquetes mediante la consola de CodeArtifact o la AWS Command Line Interface (AWS CLI). 

## Visualización o edición de un grupo de paquetes (consola)
<a name="view-edit-package-group-console"></a>

1. Abra la consola de AWS CodeArtifact en [https://console.aws.amazon.com/codesuite/codeartifact/home](https://console.aws.amazon.com/codesuite/codeartifact/home).

1. En el panel de navegación, elija **Dominios** y luego elija el dominio que contenga el grupo de paquetes que quiera ver o editar.

1. Pulse **Grupos de paquetes** y elija el grupo de paquetes que quiera ver o editar.

1. En **Detalles**, consulte la información sobre el grupo de paquetes, incluido su grupo principal, descripción, ARN, correo electrónico de contacto y controles de origen del paquete.

1. En **Subgrupos** puede ver una lista de los grupos de paquetes que tienen a este grupo como principal. Los grupos de paquetes de esta lista pueden heredar la configuración de este grupo de paquetes. Para obtener más información, consulte [Jerarquía de los grupos de paquetes y especificidad de los patrones](package-group-definition-syntax-matching-behavior.md#package-group-hierarchy-pattern-specificity).

1. En **Paquetes**, consulte los paquetes que pertenecen a este grupo de paquetes según la definición del grupo de paquetes. En la columna **Solidez**, puede ver lo sólida que es una asociación de paquetes. Para obtener más información, consulte [Jerarquía de los grupos de paquetes y especificidad de los patrones](package-group-definition-syntax-matching-behavior.md#package-group-hierarchy-pattern-specificity).

1. Para editar la información del grupo de paquetes, seleccione **Editar grupo de paquetes**.

   1. En **Información**, actualice la descripción o la información de contacto del grupo de paquetes. No se puede editar la definición de un grupo de paquetes.

   1. En **Controles de origen del grupo de paquetes**, actualice la configuración de los controles de origen del grupo de paquetes, que determinan cómo los paquetes asociados pueden ingresar repositorios en el dominio. Para obtener más información, consulte [Controles de origen de grupos de paquetes](package-group-origin-controls.md).

## Visualización o edición de un grupo de paquetes (AWS CLI)
<a name="view-edit-package-group-cli"></a>

Utilice los siguientes comandos para ver o editar grupos de paquetes con la AWS CLI. Si no lo ha hecho, configure AWS CLI siguiendo los pasos que se indican en [Configuración con AWS CodeArtifact](get-set-up-for-codeartifact.md).

Para ver todos los grupos de paquetes de un dominio, utilice el comando `list-package-groups`.

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

Utilice el comando `describe-package-group` para ver los detalles de un grupo de paquetes. Para obtener más información sobre las definiciones de grupos de paquetes, consulte [Sintaxis de la definición de los grupos de paquetes y ejemplos](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/*'
```

Para ver los grupos de paquetes secundarios de un grupo de paquetes, utilice el comando `list-sub-package-groups`.

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

Para ver el grupo de paquetes asociado a un paquete, utilice el comando `get-associated-package-group`. Debe usar el nombre y el espacio de nombres del paquete normalizados para los formatos de paquete NuGet, Python y Swift. Para obtener más información sobre cómo se normalizan los nombres y los espacios de nombres de los paquetes, consulte la documentación de normalización de nombres de [NuGet](nuget-name-normalization.md), [Python](python-name-normalization.md) y [Swift](swift-name-normalization.md). 

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

Utilice el comando `update-package-group` para editar un grupo de paquetes. Este comando se usa para actualizar la información de contacto o la descripción de un grupo de paquetes. Para obtener información sobre la configuración de los controles de origen de un grupo de paquetes y sobre cómo añadirla o editarla, consulte [Controles de origen de grupos de paquetes](package-group-origin-controls.md). Para obtener más información sobre las definiciones de grupos de paquetes, consulte [Sintaxis de la definición de los grupos de paquetes y ejemplos](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"
```

# Eliminación de un grupo de paquetes
<a name="delete-package-group"></a>

Puede eliminar un grupo de paquetes con la consola de CodeArtifact o la AWS Command Line Interface (AWS CLI).

Tenga en cuenta el siguiente comportamiento al eliminar grupos de paquetes:
+ El grupo de paquetes raíz (`/*`) no se puede eliminar.
+ Los paquetes y las versiones de paquetes que están asociados a ese grupo de paquetes no se eliminan.
+ Cuando se elimina un grupo de paquetes, los grupos de paquetes secundarios directos pasarán a ser secundarios del grupo de paquetes principal directo del grupo de paquetes. Por lo tanto, si alguno de los grupos secundarios hereda alguna configuración del principal, dicha configuración podría cambiar.

## Eliminación de un grupo de paquetes (consola)
<a name="delete-package-group-console"></a>

1. Abra la consola de AWS CodeArtifact en [https://console.aws.amazon.com/codesuite/codeartifact/home](https://console.aws.amazon.com/codesuite/codeartifact/home).

1. En el panel de navegación, elija **Dominios** y luego elija el dominio que contenga el grupo de paquetes que quiera ver o editar.

1. Pulse **Grupos de paquetes**.

1. Seleccione el grupo de paquetes que desea eliminar y, a continuación, haga clic en **Eliminar**.

1. Escriba delete en el cuadro y haga clic en **Eliminar**.

## Eliminación de un grupo de paquetes (AWS CLI)
<a name="delete-package-group-cli"></a>

Utilice el comando `delete-package-group` para eliminar un grupo de paquetes.

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

# Controles de origen de grupos de paquetes
<a name="package-group-origin-controls"></a>

Los controles de origen de los paquetes se utilizan para configurar la forma en que las versiones de los paquetes pueden ingresar en un dominio. Puede configurar los controles de origen en un grupo de paquetes para configurar la forma en que las versiones de cada paquete asociado al grupo de paquetes puede ingresar en los repositorios específicos del dominio.

La configuración de los controles de origen del grupo de paquetes consta de lo siguiente:
+ [Configuración de restricción](#package-group-origin-control-settings-restrictions): esta configuración define si los paquetes pueden ingresar a un repositorio de CodeArtifact desde fuentes de publicación internas o desde repositorios externos públicos.
+ [Listas de repositorios permitidos](#package-group-origin-control-settings-repositories): cada configuración de restricción se puede definir para permitir repositorios específicos. Si se define una configuración de restricción para permitir repositorios específicos, dicha restricción tendrá la lista de repositorios permitidos correspondiente.

**nota**  
La configuración de los controles de origen de los grupos de paquetes es ligeramente diferente de la configuración de los controles de origen de los paquetes independientes. Para obtener más información sobre la configuración de los controles de origen para paquetes, consulte [Configuración de los controles de origen del paquete](package-origin-controls.md#package-origin-control-settings).

## Configuración de restricción
<a name="package-group-origin-control-settings-restrictions"></a>

La configuración de restricción de la configuración de los controles de origen de un grupo de paquetes determina cómo los paquetes asociados a ese grupo pueden ingresar en los repositorios del dominio.

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

La configuración `PUBLISH` determina si las versiones de los paquetes se pueden publicar directamente en cualquier repositorio del dominio mediante administradores de paquetes o herramientas similares.
+ **ALLOW**: las versiones de los paquetes se pueden publicar directamente en todos los repositorios.
+ **BLOCK**: las versiones de los paquetes no se pueden publicar directamente en ningún repositorio.
+ **ALLOW\$1SPECIFIC\$1REPOSITORIES**: las versiones de los paquetes solo se pueden publicar directamente en los repositorios especificados en la lista de repositorios permitidos para su publicación.
+ **INHERIT**: la configuración `PUBLISH` se hereda del primer grupo de paquetes principal con una configuración distinta a `INHERIT`.

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

La configuración `EXTERNAL_UPSTREAM` determina si las versiones de los paquetes pueden ingerirse desde repositorios públicos externos cuando lo solicite un administrador de paquetes. Para ver una lista de los repositorios externos admitidos, consulte [Repositorios de conexiones externas compatibles](external-connection.md#supported-public-repositories).
+ **ALLOW**: se puede ingerir cualquier versión de los paquetes en todos los repositorios desde una fuente pública con una conexión externa.
+ **BLOCK**: no se pueden ingerir versiones de los paquetes en ningún repositorio desde una fuente pública con una conexión externa.
+ **ALLOW\$1SPECIFIC\$1REPOSITORIES**: las versiones de los paquetes solo se pueden ingerir desde un origen público a los repositorios especificados en la lista de repositorios permitidos para secuencias ascendentes externas.
+ **INHERIT**: la configuración `EXTERNAL_UPSTREAM` se hereda del primer grupo de paquetes principal con una configuración distinta a `INHERIT`.

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

La configuración `INTERNAL_UPSTREAM` determina si las versiones de los paquetes pueden conservarse desde los repositorios originales internos en el mismo dominio de CodeArtifact cuando lo solicite un administrador de paquetes.
+ **ALLOW**: cualquier versión de los paquetes se puede conservar de otros repositorios de CodeArtifact configurados como repositorios ascendentes.
+ **BLOCK**: las versiones de los paquetes no se pueden conservar de otros repositorios de CodeArtifact configurados como repositorios ascendentes.
+ **ALLOW\$1SPECIFIC\$1REPOSITORIES**: las versiones de los paquetes solo se pueden conservar desde otros repositorios de CodeArtifact configurados como repositorios ascendentes en los repositorios especificados en la lista de repositorios permitidos para las secuencias ascendentes internas.
+ **INHERIT**: la configuración `INTERNAL_UPSTREAM` se hereda del primer grupo de paquetes principal con una configuración distinta a `INHERIT`.

## Listas de repositorios permitidos
<a name="package-group-origin-control-settings-repositories"></a>

Cuando una configuración de restricción se define como`ALLOW_SPECIFIC_REPOSITORIES`, el grupo de paquetes contiene una lista de repositorios permitidos adjunta donde se enumeran los repositorios permitidos para esa configuración de restricción. Por lo tanto, un grupo de paquetes contiene entre 0 y 3 listas de repositorios permitidos, una para cada configuración establecida como `ALLOW_SPECIFIC_REPOSITORIES`.

Cuando agregue un repositorio a la lista de repositorios permitidos de un grupo de paquetes, debe especificar a qué lista de repositorios permitidos desea agregarlo.

Las listas de repositorios permitidos posibles son las siguientes:
+ `EXTERNAL_UPSTREAM`: permita o bloquee la ingesta de versiones de paquetes desde repositorios externos en el repositorio agregado.
+ `INTERNAL_UPSTREAM`: permite o bloquee la extracción de versiones de paquetes de otro repositorio de CodeArtifact en el repositorio agregado.
+ `PUBLISH`: permita o bloquee la publicación directa de versiones de paquetes desde los administradores de paquetes en el repositorio agregado.

## Edición de la configuración de los controles de origen de los grupos de paquetes
<a name="package-group-edit-origin-controls"></a>

Para agregar o editar controles de origen para un grupo de paquetes, siga los pasos que se indican en el siguiente procedimiento. Para obtener información sobre la configuración de los controles de origen de un grupo de paquetes, consulte [Configuración de restricción](#package-group-origin-control-settings-restrictions) y [Listas de repositorios permitidos](#package-group-origin-control-settings-repositories).

**Cómo añadir o editar los controles de origen de un grupo de paquetes (CLI)**

1. Si no lo ha hecho, configure AWS CLI siguiendo los pasos que se indican en [Configuración con AWS CodeArtifact](get-set-up-for-codeartifact.md).

1. Utilice el comando `update-package-group-origin-configuration` para añadir o editar los controles de origen de los paquetes.
   + Para `--domain`, introduzca el dominio de CodeArtifact que contiene el grupo de paquetes que desea actualizar.
   + Para `--domain-owner`, introduzca el número de la cuenta del propietario del dominio.
   + Para `--package-group`, introduzca el grupo de paquetes que desea actualizar.
   + Para `--restrictions`, introduzca pares clave-valor que representen las restricciones de los controles de origen.
   + Para `--add-allowed-repositories`, introduzca un objeto JSON que contenga el tipo de restricción y el nombre del repositorio para añadirlo a la lista de repositorios permitidos correspondiente a la restricción.
   + Para `--remove-allowed-repositories`, introduzca un objeto JSON que contenga el tipo de restricción y el nombre del repositorio para eliminarlo de la lista de repositorios permitidos correspondiente a la restricción.

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

   En el siguiente ejemplo, se añaden varias restricciones y varios repositorios en un solo comando.

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

## Ejemplos de configuración de los controles de origen de grupos de paquetes
<a name="package-group-origin-control-examples"></a>

Los siguientes ejemplos muestran las configuraciones de los controles de origen de los paquetes para situaciones habituales de gestión de paquetes.

### Permiso para que los paquetes con nombres privados se publiquen, pero no se ingieran
<a name="package-group-origin-control-examples-one"></a>

Es probable que esta situación sea habitual en la gestión de paquetes:
+ Permita que los paquetes con nombres privados se publiquen en los repositorios de su dominio desde administradores de paquetes e impida que se ingieran a los repositorios de su dominio desde repositorios públicos externos.
+ Permita que el resto de paquetes se ingieran a los repositorios de su dominio desde repositorios públicos externos e impida que se publiquen en los repositorios de su dominio desde administradores de paquetes de repositorios públicos externos.

Para ello, tiene que configurar un grupo de paquetes con un patrón que incluya los nombres privados y la configuración de origen de **PUBLISH: ALLOW**, **EXTERNAL\$1UPSTREAM: BLOCK** e **INTERNAL\$1UPSTREAM: ALLOW**. Así, garantizará que los paquetes con nombres privados se puedan publicar directamente, pero no se puedan ingerir desde repositorios externos.

Los comandos AWS CLI siguientes crean y configuran un grupo de paquetes con configuraciones de restricción de origen que coinciden con el comportamiento deseado:

Para crear el grupo de paquetes:

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

Para actualizar de la configuración del origen de un grupo de paquetes:

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

### Permiso para la ingesta desde repositorios externos a través de un repositorio
<a name="package-group-origin-control-examples-ingestion-one-repo"></a>

En esta situación, su dominio tiene varios repositorios. De esos repositorios, `repoA` tiene una conexión ascendente a `repoB`, que tiene una conexión externa al repositorio público (`npmjs.com`) como se muestra a continuación:

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

Desea permitir la ingesta de paquetes desde un grupo de paquetes específico, `/npm/space/anycompany~` desde `npmjs.com` hacia `repoA`, pero solo a través de `repoB`. También quiere bloquear la ingesta de paquetes asociados al grupo de paquetes en cualquier otro repositorio de su dominio, así como la publicación directa de paquetes con administradores de paquetes. Para ello, debe crear y configurar el grupo de paquetes de la siguiente manera:

Configuración de restricción del origen de **PUBLISH: BLOCK**, **EXTERNAL\$1UPSTREAM: ALLOW\$1SPECIFIC\$1REPOSITORIES** e **INTERNAL\$1UPSTREAM: ALLOW\$1SPECIFIC\$1REPOSITORIES**.

`repoA` y `repoB` se agregaron a la lista de repositorios permitidos correspondiente:
+ `repoA` debería añadirse a la lista `INTERNAL_UPSTREAM`, ya que obtendrá los paquetes de su secuencia ascendente interna, `repoB`.
+ `repoB` debería añadirse a la lista `EXTERNAL_UPSTREAM`, ya que obtendrá los paquetes desde el repositorio externo, `npmjs.com`.

Los comandos AWS CLI siguientes crean y configuran un grupo de paquetes con configuraciones de restricción de origen que coinciden con el comportamiento deseado:

Para crear el grupo de paquetes:

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

Para actualizar de la configuración del origen de un grupo de paquetes:

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

## Cómo interactúa la configuración de los controles de origen de los grupos de paquetes con la configuración de los controles de origen de los paquetes
<a name="package-group-origin-control-settings-interaction"></a>

Como los paquetes y los grupos de paquetes tienen configuraciones de los controles de origen diferentes, es importante entender cómo interactúan ambas entre sí. Para obtener información sobre la interacción entre las configuraciones, consulte [Cómo interactúan los controles de origen de los paquetes con los controles de origen de los grupos de paquetes](package-origin-controls.md#package-origin-controls-interaction-package-groups).

# Sintaxis de la definición de los grupos de paquetes y comportamiento coincidente
<a name="package-group-definition-syntax-matching-behavior"></a>

Este tema contiene información sobre la definición de los grupos de paquetes, el comportamiento coincidente de patrones, la solidez de la asociación de paquetes y la jerarquía de los grupos de paquetes.

**Contents**
+ [Sintaxis de la definición de los grupos de paquetes y ejemplos](#package-group-definition-syntax-examples)
  + [Definición y normalización de grupos de paquetes](#package-group-definition-syntax-examples-normalization)
  + [Espacios de nombres en las definiciones de grupos de paquetes](#package-group-definition-syntax-examples-namespaces)
+ [Jerarquía de los grupos de paquetes y especificidad de los patrones](#package-group-hierarchy-pattern-specificity)
+ [Coincidencia de palabras, de límites de palabra y de prefijos](#package-group-word-boundary-prefix)
+ [Sensibilidad de mayúsculas y minúsculas](#package-group-case-sensitivity)
+ [Coincidencias férreas e inconsistentes](#package-group-strong-and-weak-match)
+ [Otras variantes](#package-group-additional-variations)

## Sintaxis de la definición de los grupos de paquetes y ejemplos
<a name="package-group-definition-syntax-examples"></a>

 La sintaxis de los patrones para definir los grupos de paquetes es muy similar al formato de las rutas de los paquetes. La ruta de un paquete se crea a partir de los componentes de coordenadas del paquete (formato, espacio de nombres y nombre) añadiendo una barra inclinada al principio y separando cada uno de los componentes con otras. Por ejemplo, la ruta del paquete npm denominado *anycompany-ui-components* en el espacio de nombres *space* es */npm/space/anycompany-ui-components*.

El patrón de un grupo de paquetes sigue la misma estructura que la ruta de un paquete, salvo porque se omiten los componentes que no se especifican como parte de la definición del grupo y el patrón termina con un sufijo. El sufijo que se incluye determina el comportamiento coincidente del patrón de la siguiente manera:
+ Un sufijo `$` coincidirá con la coordenada completa del paquete.
+ Un sufijo `~` coincidirá con un prefijo.
+ Un sufijo `*` coincidirá con todos los valores del componente definido anteriormente.

A continuación, encontrará ejemplos de patrones para cada una de las combinaciones permitidas:

1. Todos los formatos de paquete: `/*`

1. Un formato de paquete específico: `/npm/*`

1. Formato del paquete y prefijo del espacio de nombres: `/maven/com.anycompany~`

1. Formato del paquete y espacio de nombres: `/npm/space/*`

1. Formato del paquete, espacio de nombres y prefijo del nombre: `/npm/space/anycompany-ui~`

1. Formato del paquete, espacio de nombres y nombre: `/maven/org.apache.logging.log4j/log4j-core$`

Como se muestra en los ejemplos anteriores, el sufijo `~` se añade al final de un espacio de nombres o un nombre para representar una coincidencia de prefijos y `*` se añade tras una barra inclinada para hacer coincidir todos los valores del siguiente componente de la ruta (todos los formatos, todos los espacios de nombres o todos los nombres).

### Definición y normalización de grupos de paquetes
<a name="package-group-definition-syntax-examples-normalization"></a>

CodeArtifact normaliza los nombres de los paquetes de NuGet, Python y Swift, así como los espacios de nombres de los paquetes de Swift antes de almacenarlos. CodeArtifact usa estos nombres normalizados al hacer coincidir paquetes con definiciones de grupos de paquetes. Por lo tanto, los grupos de paquetes que contienen un espacio de nombres o un nombre con estos formatos deben usar el espacio de nombres y el nombre normalizados. Para obtener más información sobre cómo se normalizan los nombres y los espacios de nombres de los paquetes, consulte la documentación de normalización de nombres de [NuGet](nuget-name-normalization.md), [Python](python-name-normalization.md) y [Swift](swift-name-normalization.md).

### Espacios de nombres en las definiciones de grupos de paquetes
<a name="package-group-definition-syntax-examples-namespaces"></a>

Para los paquetes o formatos de paquetes sin espacios de nombres (Python y NuGet), los grupos de paquetes no deben contener un espacio de nombres. La definición del grupo de paquetes de estos grupos de paquetes contiene una sección de espacio de nombres en blanco. Por ejemplo, la ruta del paquete de Python denominado *requests* es */python//requests*.

Para los paquetes o los formatos de paquetes con un espacio de nombres (Maven, genérico y Swift), el espacio de nombres debe incluirse si se incluye el nombre del paquete. Para el formato de paquete Swift, se utilizará el espacio de nombres del paquete normalizado. Para obtener más información sobre cómo se normalizan los espacios de nombres de los paquetes de Swift, consulte [Normalización del nombre del paquete y del espacio de nombres de Swift](swift-name-normalization.md).

## Jerarquía de los grupos de paquetes y especificidad de los patrones
<a name="package-group-hierarchy-pattern-specificity"></a>

Los paquetes que están «dentro de» o «asociados a» un grupo de paquetes son paquetes con una ruta que coincide con el patrón del grupo, pero no con el patrón de un grupo más específico. Por ejemplo, dados los grupos de paquetes `/npm/*` y `/npm/space/*`, la ruta del paquete */npm//react* está asociada al primer grupo (`/npm/*`), mientras que */npm/space/aui.components* y */npm/space/amplify-ui-core* están asociadas al segundo grupo (`/npm/space/*`). Aunque un paquete puede coincidir con varios grupos, cada paquete solo está asociado a un grupo, la coincidencia más específica, y solo la configuración de ese grupo se aplica al paquete.

Cuando la ruta de un paquete coincide con varios patrones, el patrón «más específico» puede considerarse el patrón coincidente más largo. Como alternativa, el patrón más específico es el que coincide con un subconjunto adecuado de los paquetes que coinciden con el patrón menos específico. En el ejemplo anterior, todos los paquetes que coinciden con `/npm/space/*` también coinciden con `/npm/*`, pero no ocurre lo contrario, lo que hace que `/npm/space/*` sea el patrón más específico, ya que es un subconjunto adecuado de `/npm/*`. Como un grupo es un subconjunto de otro grupo, crea una jerarquía, en la que `/npm/space/*` es un subgrupo del grupo principal, `/npm/*`.

Aunque solo la configuración del grupo de paquetes más específica se aplica a un paquete, ese grupo puede configurarse para heredar la configuración de su grupo principal.

## Coincidencia de palabras, de límites de palabra y de prefijos
<a name="package-group-word-boundary-prefix"></a>

Antes de hablar sobre la coincidencia de prefijos, tenemos que definir algunos términos clave:
+ Una *palabra* es una letra o un número seguido de ninguna o más letras, números o marcas diacríticas (como tildes, diéresis, etc.).
+ Un *límite de palabra* se encuentra al final de una palabra, cuando se llega a un carácter que no es una palabra. Estos caracteres no considerados palabras son los signos de puntuación, como `.`, `-` y `_`.

En concreto, el patrón de expresiones regulares de una palabra es `[\p{L}\p{N}][\p{L}\p{N}\p{M}]*`, que se puede desglosar de la siguiente manera:
+ `\p{L}` representa cualquier letra.
+ `\p{N}` representa cualquier número.
+ `\p{M}` representa cualquier marca diacrítica (acentos, diéresis, etc.).

Por lo tanto, `[\p{L}\p{N}]` representa un número o una letra y `[\p{L}\p{N}\p{M}]*` representa cero o más letras, números o marcas diacríticas, y el límite de una palabra se encuentra al final de cada coincidencia de este patrón de expresiones regulares.

**nota**  
La concordancia de los límites de las palabras se basa en esta definición de «palabra» y no en el concepto de «palabra» definido en un diccionario o asociado a la convención CamelCase. Por ejemplo, no hay límite de palabra ni en `oneword` ni en `OneWord`.

Ahora que ya sabemos lo que son las palabras y los límites de palabras, podemos usarlos para describir las coincidencias de prefijos en CodeArtifact. Para indicar una coincidencia de prefijo en un límite de palabra, se utiliza un carácter coincidente (`~`) tras un carácter de palabra. Por ejemplo, el patrón `/npm/space/foo~` coincide con las rutas de los paquetes `/npm/space/foo` y`/npm/space/foo-bar`, pero no con `/npm/space/food` ni `/npm/space/foot`.

Es necesario utilizar un comodín (`*`) en vez de `~` tras un carácter distinto a una palabra, como en el patrón `/npm/*`.

## Sensibilidad de mayúsculas y minúsculas
<a name="package-group-case-sensitivity"></a>

Las definiciones de los grupos de paquetes distinguen entre mayúsculas y minúsculas, lo que significa que los patrones que solo difieren en cuanto a las mayúsculas y las minúsculas pueden existir como grupos de paquetes independientes. Por ejemplo, un usuario puede crear grupos de paquetes independientes con los patrones `/npm//AsyncStorage$`, `/npm//asyncStorage$` y `/npm//asyncstorage$` para los tres paquetes independientes que existen en el registro público de npm: *AsyncStorage*, *asyncStorage* y *asyncstorage*, que solo difieren respecto de las mayúsculas y las minúsculas. 

Si bien las mayúsculas y las minúsculas importan, CodeArtifact sigue asociando paquetes a un grupo de paquetes si el paquete solo varía en las mayúsculas y minúsculas del patrón. Si un usuario crea el grupo de paquetes `/npm//AsyncStorage$` sin crear los otros dos grupos que se muestran arriba, todas las variantes respecto de las mayúsculas y las minúsculas del nombre *AsyncStorage*, incluidas *asyncStorage* y *asyncstorage*, se asociarán al grupo de paquetes. Sin embargo, como se describe en la siguiente sección, [Coincidencias férreas e inconsistentes](#package-group-strong-and-weak-match), estas variantes se gestionarán de forma diferente a *AsyncStorage*, que es una coincidencia exacta del patrón. 

## Coincidencias férreas e inconsistentes
<a name="package-group-strong-and-weak-match"></a>

En la sección anterior, [Sensibilidad de mayúsculas y minúsculas](#package-group-case-sensitivity), se indica que los grupos de paquetes distinguen mayúsculas de minúsculas y, a continuación, se explica que no distinguen mayúsculas de minúsculas. Esto se debe a que las definiciones de los grupos de paquetes de CodeArtifact contemplan los conceptos de «coincidencia férrea» (exacta) y «coincidencia inconsistente» (variante). Una coincidencia férrea es cuando el paquete coincide exactamente con el patrón, sin variantes. Una coincidencia inconsistente se produce cuando el paquete coincide con una variante del patrón; por ejemplo, con diferencias en cuanto al uso de mayúsculas y minúsculas. El comportamiento de coincidencia inconsistente impide que los paquetes que son variantes del patrón de un grupo de paquetes se acumulen en un grupo de paquetes más general. Cuando un paquete es una variante (coincidencia inconsistente) del patrón del grupo coincidente más específico, el paquete se asocia al grupo, pero el paquete se bloquea en lugar de aplicar la configuración de los controles de origen del grupo, lo que impide que cualquier versión nueva del paquete se extraiga de secuencias ascendentes o se publique. Este comportamiento reduce el riesgo de que se produzcan ataques a la cadena de suministro por confusión de dependencias entre paquetes con nombres casi idénticos.

Para ilustrar el comportamiento de coincidencia inconsistente, supongamos que el grupo de paquetes `/npm/*` permite la ingesta y bloquea la publicación. Un grupo de paquetes más específico, `/npm//anycompany-spicy-client$`, está configurado para bloquear la ingesta y permitir la publicación. El paquete denominado *anycompany-spicy-client* representa una coincidencia férrea del grupo de paquetes, lo que permite publicar versiones de los paquetes y bloquea su ingesta. Solo puede publicarse el nombre del paquete con el formato de mayúsculas y minúsculas *anycompany-spicy-client*, pues supone una coincidencia férrea del patrón de definiciones del paquete. Cualquier variante en cuanto a las mayúsculas y las minúsculas, como *AnyCompany-spicy-client*, no puede publicarse porque constituye una coincidencia inconsistente. Y lo que es más importante: el grupo de paquetes bloquea la ingesta de todas las variantes de mayúsculas y minúsculas, no solo del nombre en minúscula utilizado en el patrón, lo que reduce el riesgo de que se produzca un ataque de confusión de dependencias.

## Otras variantes
<a name="package-group-additional-variations"></a>

Además de las diferencias entre mayúsculas y minúsculas, las coincidencias inconsistentes también ignoran las diferencias en las secuencias de guiones (`-`), puntos (`.`), guiones bajos (`_`) y caracteres que pueden confundirse (como aquellos caracteres que se parecen en forma pero pertenecen a alfabetos diferentes). Durante la normalización utilizada para las coincidencias inconsistentes, CodeArtifact convierte los nombres a formas canónicas independientes de mayúsculas y minúsculas (parecido a pasarlos a minúsculas), reemplaza las secuencias de guiones, puntos y guiones bajos por un solo punto y normaliza los caracteres que pueden confundirse.

Las coincidencias inconsistentes consideran que los guiones, puntos y guiones bajos son equivalentes, pero no los ignoran por completo. Esto significa que *foo-bar*, *foo.bar*, *foo..bar* y *foo\$1bar* son coincidencias inconsistentes equivalentes, pero que *foobar* no lo es. Si bien son varios los repositorios públicos que implementan medidas para evitar este tipo de variantes, la protección que proporcionan este tipo de repositorios no hace innecesaria esta características de los grupos de paquetes. Por ejemplo, los repositorios públicos, como el registro público de npm, solo evitarán nuevas variantes del paquete denominado *my-package* si *my-package* ya está publicado en ellos. Si *my-package* es un paquete interno y se crea un grupo de paquetes `/npm//my-package$` que permite la publicación y bloquea la ingesta, muy probablemente no va a querer publicar *my-package* en el registro público de npm, porque es la manera de evitar permitir variantes tipo *my.package*.

Si bien algunos formatos de paquete, como Maven, tratan estos caracteres de manera diferente (Maven considera `.` un separador jerárquico de los espacios de nombres, pero no lo hace con `-` ni `_`), algo como *com.act-on* todavía podría confundirse con *com.act.on*.

**nota**  
Tenga en cuenta que siempre que se asocien varias variantes a un grupo de paquetes, el administrador puede crear un grupo de paquetes nuevo para una variante específica a fin de configurar un comportamiento diferente para dicha variante. 

# Etiquetado de un grupo de paquetes en CodeArtifact
<a name="package-group-tags"></a>

Las etiquetas son pares clave-valor asociados a los recursos de AWS. Puede aplicar etiquetas a sus grupos de paquetes en CodeArtifact. Para obtener información sobre el etiquetado de recursos de CodeArtifact, los casos de uso, las restricciones de las claves y los valores de las etiquetas y los tipos de recursos admitidos, consulte [Etiquetado de recursos](tag-resources.md).

Puede usar la CLI para especificar etiquetas al crear un grupo de paquetes o al agregar, eliminar o actualizar el valor de las etiquetas de un grupo de paquetes existente.

## Etiquetado de grupos de paquetes (CLI)
<a name="package-group-tags-cli"></a>

Puede utilizar la CLI para gestionar etiquetas de grupos de paquetes.

Si no lo ha hecho, configure AWS CLI siguiendo los pasos que se indican en [Configuración con AWS CodeArtifact](get-set-up-for-codeartifact.md).

**sugerencia**  
Para añadir etiquetas, debe proporcionar el nombre de recurso de Amazon (ARN) del grupo de paquetes. Para obtener el ARN del grupo de paquetes, ejecute el comando `describe-package-group`:  

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

**Topics**
+ [Agregado de etiquetas a un grupo de paquetes (CLI)](#package-group-tags-add-cli)
+ [Visualización de etiquetas de un grupo de paquetes (CLI)](#package-group-tags-list-cli)
+ [Edición de etiquetas de un grupo de paquetes (CLI)](#package-group-tags-edit-cli)
+ [Eliminación de etiquetas de un grupo de paquetes (CLI)](#package-group-tags-delete-cli)

### Agregado de etiquetas a un grupo de paquetes (CLI)
<a name="package-group-tags-add-cli"></a>

Puede agregar etiquetas a los grupos de paquetes nuevos al crearlos, o bien a los grupos de paquetes existentes. Para obtener más información sobre cómo agregar etiquetas a un grupo de paquetes al crearlo, consulte [Creación de un grupo de paquetes](create-package-group.md).

Para agregar una etiqueta a un grupo de paquetes existente con la AWS CLI, en el terminal o la línea de comandos ejecute el comando **tag-resource**, especificando el nombre de recurso de Amazon (ARN) del grupo de paquetes al que desea agregar etiquetas y la clave y el valor de la etiqueta que desea agregar. Para obtener información sobre los ARN de los grupos de paquetes, consulte [Grupo de paquetes ARNs](auth-and-access-control-permissions-reference.md#package-group-arns).

Puede agregar más de una etiqueta a un grupo de paquetes. Por ejemplo, para etiquetar un grupo de paquetes llamado */npm/scope/anycompany\$1* con dos etiquetas, una clave de etiqueta llamada *key1* con el valor de etiqueta *value1* y una clave de etiqueta llamada *key2* con el valor de etiqueta *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
```

Si se ejecuta correctamente, este comando no genera ninguna salida.

### Visualización de etiquetas de un grupo de paquetes (CLI)
<a name="package-group-tags-list-cli"></a>

Siga estos pasos para utilizar la AWS CLI para consultar las etiquetas de AWS de un grupo de paquetes. Si no se han añadido etiquetas, la lista obtenida está vacía.

En el terminal o en la línea de comandos, ejecute el comando **list-tags-for-resource** con el nombre de recurso de Amazon (ARN) del grupo de paquetes. Para obtener información sobre los ARN de los grupos de paquetes, consulte [Grupo de paquetes ARNs](auth-and-access-control-permissions-reference.md#package-group-arns).

Por ejemplo, para ver una lista de claves y valores de etiqueta de un grupo de paquetes llamado */npm/scope/anycompany\$1* con un valor ARN de `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~
```

Si se ejecuta correctamente, este comando proporciona información similar a la siguiente:

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

### Edición de etiquetas de un grupo de paquetes (CLI)
<a name="package-group-tags-edit-cli"></a>

Siga estos pasos para utilizar la AWS CLI para editar una etiqueta de un grupo de paquetes. Puede cambiar el valor de una clave existente o añadir otra clave. También puede eliminar etiquetas de un grupo de paquetes, tal y como se muestra en la sección siguiente.

En el terminal o la línea de comandos, ejecute el comando **tag-resource**, especificando el ARN del grupo de paquetes en el que desea actualizar una etiqueta y especifique la clave y el valor de la etiqueta. Para obtener información sobre los ARN de los grupos de paquetes, consulte [Grupo de paquetes 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
```

Si se ejecuta correctamente, este comando no genera ninguna salida.

### Eliminación de etiquetas de un grupo de paquetes (CLI)
<a name="package-group-tags-delete-cli"></a>

Siga estos pasos para utilizar la AWS CLI para eliminar una etiqueta de un grupo de paquetes.

**nota**  
Si elimina un grupo de paquetes, se eliminan todas las asociaciones de etiquetas del grupo de paquetes eliminado. No es necesario eliminar las etiquetas antes de eliminar un grupo de paquetes.

En el terminal o la línea de comandos, ejecute el comando **untag-resource**, especificando el ARN del grupo de paquetes cuyas etiquetas desea eliminar y la clave de la etiqueta que desea eliminar. Para obtener información sobre los ARN de los grupos de paquetes, consulte [Grupo de paquetes ARNs](auth-and-access-control-permissions-reference.md#package-group-arns).

Por ejemplo, para eliminar varias etiquetas de un grupo de paquetes, */npm/scope/anycompany\$1* con las claves de etiqueta *key1* y *key2*:

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

Si se ejecuta correctamente, este comando no genera ninguna salida. Tras eliminar las etiquetas, puede ver las etiquetas restantes del grupo de paquetes mediante el comando `list-tags-for-resource`.