Edición de los controles de origen de los paquetes
En AWS CodeArtifact, las versiones de los paquetes se pueden agregar a un repositorio publicándolas directamente, retirándolas de un repositorio anterior o ingiriéndolas desde un repositorio público externo. Permitir que las versiones en paquetes de un paquete se agreguen mediante publicación directa o ingesta desde repositorios públicos hace que sea vulnerable a un ataque de sustitución de dependencias. Para obtener más información, consulte Ataques de sustitución de dependencias. Para protegerle de un ataque de sustitución de dependencias, puede configurar los controles de origen de los paquetes de un repositorio para limitar la forma en que se pueden añadir las versiones de ese paquete al repositorio.
Cualquier equipo que desee permitir que las nuevas versiones de diferentes paquetes provengan tanto de fuentes internas, como la publicación directa, como de fuentes externas, como los repositorios públicos, debería considerar la posibilidad de configurar los controles de origen de los paquetes. De forma predeterminada, los controles de origen de los paquetes se configurarán en función de cómo se añada la primera versión del paquete al repositorio. Para obtener información sobre la configuración del control de origen del paquete y sus valores predeterminados, consulte Configuración de los controles de origen del paquete.
Para eliminar el registro del paquete después de utilizar la operación de la API put-package-origin-configuration, utilice delete-package (consulte Eliminar un paquete o una versión de un paquete).
Escenarios comunes de control de acceso a paquetes
Esta sección incluye algunos escenarios comunes cuando se agrega una versión de paquete a un repositorio de CodeArtifact. Los ajustes de control de origen del paquete se establecerán para los paquetes nuevos en función de cómo se añada la primera versión del paquete.
En los siguientes escenarios, un paquete interno es un paquete que se publica directamente desde un administrador de paquetes en su repositorio, como un paquete que usted o su equipo crean y mantienen. Un paquete externo es un paquete que existe en un repositorio público y que puede incorporarse a su repositorio mediante una conexión externa.
Se publica una versión de paquete externo para un paquete interno existente
En este escenario, consideremos un paquete interno, packageA. Su equipo publica la primera versión del paquete packageA en un repositorio de CodeArtifact. Como esta es la primera versión del paquete, la configuración del control de origen del paquete se establece automáticamente en Publish: Allow and Upstream: Block. Una vez que el paquete existe en su repositorio, se publica un paquete con el mismo nombre en un repositorio público que está conectado a su repositorio de CodeArtifact. Podría tratarse de un intento de ataque de sustitución de dependencias contra el paquete interno, o podría ser simplemente una coincidencia. En cualquier caso, los controles de origen de los paquetes están configurados para bloquear la ingesta de la nueva versión externa y protegerse así de un posible ataque.
En la siguiente imagen, repoA es su repositorio de CodeArtifact con una conexión externa a un repositorio público. Su repositorio contiene las versiones 1.1 y 2.1 de packageA, pero la versión 3.0 está publicada en el repositorio público. Normalmente, repoA ingiere la versión 3.0 después de que un administrador de paquetes solicite el paquete. Como la ingesta de paquetes está configurada como Block, la versión 3.0 no se ingiere en su repositorio de CodeArtifact y no está disponible para los administradores de paquetes conectados a él.
Se publica una versión de paquete interno para un paquete externo existente
En este escenario, un paquete, packageB, existe externamente en un repositorio público que usted ha conectado a su repositorio. Cuando un administrador de paquetes conectado a su repositorio solicita el packageB, la versión del paquete se introduce en su repositorio desde el repositorio público. Como esta es la primera versión de paquete de packageB que se agrega a su repositorio, los ajustes de origen del paquete están configurados como Publish: BLOCK y Upstream: ALLOW. Más adelante, intenta publicar una versión con el mismo nombre de paquete en el repositorio. O bien no conoce el paquete público y está intentando publicar un paquete no relacionado con el mismo nombre, o bien está intentando publicar una versión parcheada, o bien está intentando publicar directamente la versión exacta del paquete que ya existe externamente. CodeArtifact rechazará la versión que intentas publicar, pero le permitirá anular explícitamente el rechazo y publicar la versión si es necesario.
En la siguiente imagen, repoA es su repositorio de CodeArtifact con una conexión externa a un repositorio público. Su repositorio contiene la versión 3.0 que ingirió del repositorio público. Quiere publicar la versión 1.1 en su repositorio. Normalmente, podría publicar la versión 1.2 en repoA, pero como la publicación está configurada en Block, la versión 1.2 no se puede publicar.
Publicar una versión parcheada de un paquete externo existente
En este escenario, un paquete, packageB, existe externamente en un repositorio público que usted ha conectado a su repositorio. Cuando un administrador de paquetes conectado a su repositorio solicita el packageB, la versión del paquete se introduce en su repositorio desde el repositorio público. Como esta es la primera versión de paquete de packageB que se agrega a su repositorio, los ajustes de origen del paquete están configurados como Publish: BLOCK y Upstream: ALLOW. Su equipo decide que necesita publicar las versiones de los paquetes parcheados de este paquete en el repositorio. Para poder publicar las versiones de los paquetes directamente, su equipo cambia la configuración del control de origen de los paquetes a Publish: ALLOW y Upstream: BLOCK. Las versiones de este paquete ahora se pueden publicar directamente en su repositorio e ingerir desde los repositorios públicos. Una vez que su equipo publique las versiones de los paquetes parcheados, cambiará la configuración de origen del paquete a Publish: BLOCK and Upstream: ALLOW.
Configuración de los controles de origen del paquete
Con los controles de origen de los paquetes, puede configurar cómo se pueden añadir las versiones de los paquetes a un repositorio. Las siguientes listas incluyen la configuración y los valores de control de origen de los paquetes disponibles.
nota
Los ajustes y los valores disponibles son diferentes cuando los controles de origen se configuran en los grupos de paquetes. Para obtener más información, consulte Controles de origen de grupos de paquetes.
Publicar
Esta configuración configura si las versiones de los paquetes se pueden publicar directamente en el repositorio mediante administradores de paquetes o herramientas similares.
ALLOW: las versiones de los paquetes se pueden publicar directamente.
BLOCK: las versiones de los paquetes no se pueden publicar directamente.
Repositorios ascendentes
Esta configuración configura si las versiones de los paquetes pueden ingerirse desde repositorios públicos externos o conservarse desde repositorios originales cuando lo solicite un administrador de paquetes.
ALLOW: cualquier versión del paquete se puede conservar de otros repositorios de CodeArtifact configurados como repositorios ascendentes o se puede ingerir desde una fuente pública con una conexión externa.
BLOCK: las versiones de los paquetes no se pueden conservar de otros repositorios de CodeArtifact configurados como repositorios ascendentes ni se pueden ingerir desde una fuente pública con una conexión externa.
Configuración predeterminada de los controles de origen de los paquetes
La configuración predeterminada de los controles de origen de los paquetes se determina en función de la configuración de los controles de origen del grupo de paquetes asociado al paquete. Para obtener más información sobre los grupos de paquetes y los controles de origen de los grupos de paquetes, consulte Trabajar con grupos de paquetes en CodeArtifact y Controles de origen de grupos de paquetes.
Si un paquete está asociado a un grupo de paquetes con una configuración de restricción ALLOW para cada tipo de restricción, los controles de origen predeterminados de los paquetes se basarán en la forma en que se añada la primera versión de dicho paquete al repositorio.
Si un administrador de paquetes publica directamente la primera versión del paquete, la configuración será Publish: ALLOW y Upstream: BLOCK.
Si la primera versión del paquete proviene de una fuente pública, los ajustes serán Publish: BLOCK y Upstream: BLOCK.
nota
Los paquetes que existían en los repositorios de CodeArtifact antes de aproximadamente mayo de 2022 tendrán los controles de origen de paquete predeterminados de Publish: ALLOW y Upstream: ALLOW. Los controles de origen de los paquetes deben configurarse manualmente para dichos paquetes. Desde entonces, los valores predeterminados actuales se han establecido en los paquetes nuevos y comenzaron a aplicarse cuando se lanzó la característica el 14 de julio de 2022. Para obtener más información sobre la configuración de los controles de origen de los paquetes, consulte Edición de los controles de origen de los paquetes.
De lo contrario, si un paquete está asociado a un grupo de paquetes que tiene al menos una configuración de restricción BLOCK o ALLOW_SPECIFIC_REPOSITORIES, la configuración de los controles de origen predeterminada para ese paquete se definirá como Publish: ALLOW y Upstream: ALLOW.
Cómo interactúan los controles de origen de los paquetes con los controles de origen de los grupos de paquetes
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í.
La interacción entre las dos configuraciones es que una configuración BLOCK prevalece sobre una configuración ALLOW. En la siguiente tabla se muestran algunos ejemplos de configuraciones y sus configuraciones efectivas de los controles de origen.
| Configuración de los controles de origen de los paquetes | Configuración de los controles de origen de los grupos de paquetes | Configuración efectiva de los controles de origen |
|---|---|---|
PUBLISH: ALLOW UPSTREAM: ALLOW |
PUBLISH: ALLOW UPSTREAM: ALLOW |
PUBLISH: ALLOW UPSTREAM: ALLOW |
PUBLISH: BLOCK UPSTREAM: ALLOW |
PUBLISH: ALLOW UPSTREAM: ALLOW |
PUBLISH: BLOCK UPSTREAM: ALLOW |
PUBLISH: ALLOW UPSTREAM: ALLOW |
PUBLISH: ALLOW UPSTREAM: BLOCK |
PUBLISH: ALLOW UPSTREAM: BLOCK |
Lo que esto significa es que un paquete con la configuración de origen Publish: ALLOW y Upstream: ALLOW está, en la práctica, quedando supeditado a la configuración de los controles de origen del grupo de paquetes asociado.
Edición de los controles de origen de los paquetes
Los controles de origen de los paquetes se configuran automáticamente en función de cómo se agrega la primera versión del paquete al repositorio; para obtener más información, consulte Configuración predeterminada de los controles de origen de los paquetes. Para agregar o editar controles de origen de paquetes para un repositorio de CodeArtifact, siga los pasos que se indican en el siguiente procedimiento.
Para añadir o editar los controles de origen del paquete (consola)
Abra la consola de AWS CodeArtifact en https://console.aws.amazon.com/codesuite/codeartifact/home
. -
En el panel de navegación, elija Repositorios y elija el repositorio que contiene el paquete que desea editar.
-
En la tabla Paquetes, busque y seleccione el paquete que desee editar.
-
En la página de resumen del paquete, en controles de Origin, seleccione Editar.
-
En Editar controles de origen, seleccione los controles de origen del paquete que desea configurar para este paquete. Los dos ajustes de control de origen del paquete, Publish y Upstream, deben configurarse al mismo tiempo.
-
Para permitir la publicación directa de las versiones de los paquetes, en Publicar, seleccione Permitir. Para bloquear la publicación de versiones de paquetes, seleccione Bloquear.
-
Para permitir la ingesta de paquetes de repositorios externos y la extracción de paquetes de repositorios anteriores, en Recursos ascendentes, seleccione Permitir. Para bloquear la ingesta y la extracción de versiones de paquetes desde repositorios externos y ascendentes, seleccione Bloquear.
-
Para añadir o editar los controles de origen del paquete (AWS CLI)
Si no lo ha hecho, configure AWS CLI siguiendo los pasos que se indican en Configuración con AWS CodeArtifact.
Utilice el comando
put-package-origin-configurationpara añadir o editar los controles de origen de los paquetes. Sustituya los campos siguientes:Sustituya
my_domainpor el dominio CodeArtifact que contiene el paquete que desea actualizar.Sustituya
my_repopor el repositorio de CodeArtifact que contiene el paquete que desea actualizar.Reemplace
npmcon el formato de paquete que desea actualizar.Reemplace
my_packagecon el nombre del paquete que desea actualizar.Sustituya
ALLOWyBLOCKpor la configuración de los controles de origen del paquete que desee.
aws codeartifact put-package-origin-configuration --domainmy_domain\ --repositorymy_repo--formatnpm--packagemy_package\ --restrictions publish=ALLOW,upstream=BLOCK
Repositorios editoriales y originales
CodeArtifact no permite publicar versiones de paquetes que estén presentes en repositorios ascendentes o repositorios públicos accesibles. Por ejemplo, supongamos que desea publicar un paquete de Maven com.mycompany.mypackage:1.0 en un repositorio myrepo y myrepo tiene un repositorio ascendente con una conexión externa al central de Maven. Considere los siguientes escenarios.
Los ajustes de control de origen de los paquetes de
com.mycompany.mypackageson Publish: ALLOW y Upstream: ALLOW. Sicom.mycompany.mypackage:1.0está presente en el repositorio principal o en el central de Maven, CodeArtifact rechaza cualquier intento de publicación enmyrepocon un error de conflicto 409. Aún puede publicar una versión diferente, por ejemplocom.mycompany.mypackage:1.1.Los ajustes de control de origen de los paquetes de
com.mycompany.mypackageson Publish: ALLOW y Upstream: BLOCK. Puede publicar en su repositorio cualquier versión decom.mycompany.mypackageque aún no exista porque no se puede acceder a las versiones de los paquetes.Los ajustes de control de origen de los paquetes de
com.mycompany.mypackageson Publish: BLOCK y Upstream: ALLOW. No puede publicar ninguna versión del paquete directamente en su repositorio.