Editar controles de origem do pacote - CodeArtifact

Editar controles de origem do pacote

No CodeArtifact AWS, as versões do pacote podem ser adicionadas a um repositório publicando-as diretamente, retirando-as de um repositório upstream ou ingerindo-as de um repositório público externo. Permitir que versões de um pacote sejam adicionadas por publicação direta e ingestão de repositórios públicos torna você vulnerável a um ataque de substituição de dependências. Para obter mais informações, consulte Ataques de substituição de dependências. Para se proteger contra um ataque de substituição de dependência, você pode configurar os controles de origem do pacote em um pacote em um repositório para limitar como as versões desse pacote podem ser adicionadas ao repositório.

A configuração dos controles de origem do pacote deve ser considerada por qualquer equipe que queira permitir que novas versões de pacotes diferentes venham tanto de fontes internas, como publicação direta, quanto de fontes externas, como repositórios públicos. Por padrão, os controles de origem do pacote serão configurados com base em como a primeira versão de um pacote é adicionada ao repositório. Para obter informações sobre as configurações de controle de origem do pacote e seus valores padrão, consulte Configurações de controle de origem do pacote.

Para remover o registro do pacote depois de usar a operação da API put-package-origin-configuration, use delete-package (consulte Excluir um pacote ou uma versão do pacote).

Cenários comuns de controle de acesso a pacotes

Esta seção inclui alguns cenários comuns quando uma versão de pacote é adicionada a um repositório do CodeArtifact. As configurações de controle de origem do pacote serão definidas para novos pacotes, dependendo de como a primeira versão do pacote for adicionada.

Nos cenários a seguir, um pacote interno é um pacote publicado diretamente de um gerenciador de pacotes no seu repositório, como um pacote que você ou sua equipe cria e mantém. Um pacote externo é um pacote que existe em um repositório público que pode ser ingerido em seu repositório com uma conexão externa.

Uma versão de pacote externo é publicada para um pacote interno existente

Nesse cenário, considere um pacote interno, packageA. Sua equipe publica a primeira versão do pacote de packageA em um repositório do CodeArtifact. Como essa é a primeira versão desse pacote, as configurações de controle de origem do pacote são automaticamente definidas como Publicar: Permitir e Upstream: Bloquear. Depois que o pacote existe no repositório, um pacote com o mesmo nome é publicado em um repositório público conectado ao repositório do CodeArtifact. Isso pode ser uma tentativa de ataque de substituição de dependência contra o pacote interno ou pode ser apenas uma coincidência. Independentemente disso, os controles de origem do pacote são configurados para bloquear a ingestão da nova versão externa para se protegerem contra um possível ataque.

Na imagem a seguir, repoA é o repositório do CodeArtifact com uma conexão externa para o repositório público. Seu repositório contém as versões 1.1 e 2.1 de packageA, mas a versão 3.0 é publicada no repositório público. Normalmente, repoA poderia ingerir a versão 3.0 depois que o pacote fosse solicitado por um gerenciador de pacotes. Como a ingestão de pacotes está definida como Bloquear, a versão 3.0 não é ingerida no repositório do CodeArtifact e não está disponível para gerenciadores de pacotes conectados a ele.

Gráfico simples mostrando uma nova versão de pacote externo sendo bloqueada de um repositório público.

Uma versão de pacote interno é publicada para um pacote externo existente

Nesse cenário, um pacote, packageB, existe externamente em um repositório público que você conectou ao seu repositório. Quando um gerenciador de pacotes conectado ao seu repositório solicita packageB, a versão do pacote é ingerida no seu repositório a partir do repositório público. Como esta é a primeira versão do pacote de packageB adicionada ao seu repositório, as configurações de origem do pacote são definidas como Publicação: BLOQUEAR e Upstream: PERMITIR. Mais tarde, você tenta publicar uma versão com o mesmo nome de pacote no repositório. Ou você não conhece o pacote público e está tentando publicar um pacote não relacionado com o mesmo nome ou está tentando publicar uma versão corrigida ou está tentando publicar diretamente a versão exata do pacote que já existe externamente. O CodeArtifact rejeitará a versão que você está tentando publicar, mas permitirá que você substitua explicitamente a rejeição e publique a versão, se necessário.

Na imagem a seguir, repoA é o repositório do CodeArtifact com uma conexão externa para o repositório público. Seu repositório contém a versão 3.0 que foi ingerida do repositório público. Você deseja publicar a versão 1.1 no seu repositório. Normalmente, você poderia publicar a versão 1.2 em repoA, mas como a publicação está definida como Bloquear, a versão 1.2 não pode ser publicada.

Gráfico simples mostrando uma nova versão de pacote externo sendo bloqueada de um repositório público.

Publicar uma versão corrigida de um pacote externo existente

Nesse cenário, um pacote, packageB, existe externamente em um repositório público que você conectou ao seu repositório. Quando um gerenciador de pacotes conectado ao seu repositório solicita packageB, a versão do pacote é ingerida no seu repositório a partir do repositório público. Como esta é a primeira versão do pacote de packageB adicionada ao seu repositório, as configurações de origem do pacote são definidas como Publicação: BLOQUEAR e Upstream: PERMITIR. Sua equipe decide que precisa publicar versões corrigidas desse pacote no repositório. Para poder publicar versões de pacotes diretamente, sua equipe altera as configurações de controle de origem do pacote para Publicação: PERMITIR e Upstream: BLOQUEAR. Agora, as versões desse pacote podem ser publicadas diretamente no seu repositório e ingeridas de repositórios públicos. Depois que sua equipe publica as versões corrigidas do pacote, ela reverte as configurações de origem do pacote para Publicação: BLOQUEAR e Upstream: PERMITIR.

Configurações de controle de origem do pacote

Com os controles de origem do pacote, você pode configurar como as versões do pacote podem ser adicionadas a um repositório. As listas a seguir incluem as configurações e os valores disponíveis do controle de origem do pacote.

nota

As configurações e valores disponíveis são diferentes ao configurar os controles de origem em grupos de pacotes. Para obter mais informações, consulte Controles de origem do grupo de pacotes.

Publicar

Essa configuração define se as versões do pacote podem ser publicadas diretamente no repositório usando gerenciadores de pacotes ou ferramentas similares.

  • PERMITIR: as versões do pacote podem ser publicadas diretamente.

  • BLOCK: as versões do pacote não podem ser publicadas diretamente.

Upstream

Essa configuração define se as versões do pacote podem ser ingeridas de repositórios externos públicos ou retidas de repositórios upstream quando solicitadas por um gerenciador de pacotes.

  • PERMITIR: qualquer versão do pacote pode ser retida de outros repositórios do CodeArtifact configurados como repositórios upstream ou ingerida de uma fonte pública com uma conexão externa.

  • BLOCK: as versões do pacote não podem ser retidas de outros repositórios do CodeArtifact configurados como repositórios upstream ou ingeridas de uma fonte pública com uma conexão externa.

Configurações de controle de origem do pacote padrão

As configurações de controle de origem do pacote padrão são definidas com base nas configurações de controle de origem do grupo de pacotes associado ao pacote. Para obter mais informações sobre grupos de pacotes e controles de origem de grupos de pacotes, consulte Trabalhar com grupos de pacotes no CodeArtifact e Controles de origem do grupo de pacotes.

Se um pacote estiver associado a um grupo de pacotes com configurações de restrição de ALLOW para cada tipo de restrição, os controles de origem de pacote padrão serão baseados em como a primeira versão desse pacote é adicionada ao repositório.

  • Se a primeira versão do pacote for publicada diretamente por um gerenciador de pacotes, as configurações serão Publicação: PERMITIR e Upstream: BLOQUEAR.

  • Se a primeira versão do pacote for ingerida de uma fonte pública, as configurações serão Publicação: BLOQUEAR e Upstream: PERMITIR.

nota

Os pacotes que existiam em repositórios do CodeArtifact antes de maio de 2022 terão controles de origem de pacote padrão de Publicação: PERMITIR e Upstream: PERMITIR. Os controles de origem do pacote devem ser definidos manualmente para esses pacotes. Os valores padrão atuais foram definidos em novos pacotes desde aquela época e começaram a ser aplicados quando o atributo foi lançado em 14 de julho de 2022. Para obter mais informações sobre a configuração de controles de origem de pacotes, consulte Editar controles de origem do pacote.

Caso contrário, se um pacote estiver associado a um grupo de pacotes que tenha pelo menos uma configuração de restrição de BLOCK ou ALLOW_SPECIFIC_REPOSITORIES, as configurações de controle de origem padrão desse pacote serão definidas como Publish: ALLOW e Upstream: ALLOW.

Como os controles de origem do pacote interagem com os controles de origem do grupo de pacotes

Como tanto os pacotes quanto os grupos de pacotes associados têm configurações de controle de origem, é importante entender como essas duas configurações diferentes interagem entre si.

A interação entre as duas configurações é que uma configuração de BLOCK sempre prevalece sobre uma configuração de ALLOW. A tabela a seguir lista alguns exemplos de configurações e suas configurações de controle de origem eficazes.

Configuração de controle de origem do pacote Configuração de controle de origem do grupo de pacotes Configuração de controle de origem eficaz

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

Isso significa que um pacote com configurações de origem de Publish: ALLOW e Upstream: ALLOW está efetivamente adotando as configurações de controle de origem do grupo de pacotes associado.

Editar controles de origem do pacote

Os controles de origem do pacote são configurados automaticamente com base em como a primeira versão de um pacote é adicionada ao repositório. Para obter mais informações, consulte Configurações de controle de origem do pacote padrão. Para adicionar ou editar controles de origem de pacote em um repositório do CodeArtifact, execute as etapas no procedimento a seguir.

Para adicionar ou editar controles de origem do pacote (console)
  1. Abra o console do AWS CodeArtifact em https://console.aws.amazon.com/codesuite/codeartifact/home.

  2. No painel de navegação, escolha Repositórios e escolha o repositório que contém o pacote que você deseja editar.

  3. Na tabela Pacotes, pesquise e selecione o pacote que você deseja editar.

  4. Na página de resumo do pacote, em Controles de origem, escolha Editar.

  5. Em Editar controles de origem, escolha os controles de origem do pacote que deseja definir para esse pacote. As duas configurações de controle de origem do pacote, Publicação e Upstream, devem ser definidas ao mesmo tempo.

    • Para permitir a publicação direta de versões do pacote, em Publicação, escolha Permitir. Para bloquear a publicação de versões do pacote, escolha Bloquear.

    • Para permitir a ingestão de pacotes de repositórios externos e a extração de pacotes de repositórios upstream, em Fontes upstream, escolha Permitir. Para bloquear toda a ingestão e extração de versões de pacotes de repositórios externos e upstream, escolha Bloquear.

Para adicionar ou editar controles de origem do pacote (AWS CLI)
  1. Caso não tenha feito isso, configure a AWS CLI seguindo as etapas emConfiguração do AWS CodeArtifact.

  2. Use o comando put-package-origin-configuration para adicionar ou editar controles de origem do pacote. Substitua os campos a seguir:

    • Substitua my_domain pelo domínio CodeArtifact que contém o pacote que você deseja atualizar.

    • Substitua my_repo pelo repositório do CodeArtifact que contém o pacote que você deseja atualizar.

    • Substitua npm pelo formato do pacote que você deseja atualizar.

    • Substitua my_package pelo nome do pacote que você deseja atualizar.

    • Substitua PERMITIR e BLOQUEAR pelas configurações de controle de origem do pacote desejadas.

    aws codeartifact put-package-origin-configuration --domain my_domain \ --repository my_repo --format npm --package my_package \ --restrictions publish=ALLOW,upstream=BLOCK

Repositórios de publicação e upstream

O CodeArtifact não permite a publicação de versões de pacotes que estejam presentes em repositórios upstream acessíveis ou em repositórios públicos. Por exemplo, suponha que você queira publicar um pacote Maven com.mycompany.mypackage:1.0 em um repositório myrepo e myrepo tenha um repositório upstream com uma conexão externa com Maven Central. Considere os seguintes cenários:

  1. As configurações de controle de origem do pacote em com.mycompany.mypackage são Publicação: PERMITIR e Upstream: PERMITIR. Se com.mycompany.mypackage:1.0 estiver presente no repositório upstream ou em Maven Central, o CodeArtifact rejeitará qualquer tentativa de publicá-lo em myrepo com um erro de conflito 409. Você ainda pode publicar uma versão diferente, como com.mycompany.mypackage:1.1.

  2. As configurações de controle de origem do pacote em com.mycompany.mypackage são Publicação: PERMITIR e Upstream: BLOQUEAR. Você pode publicar qualquer versão do com.mycompany.mypackage no seu repositório que ainda não exista porque as versões do pacote não estão acessíveis.

  3. As configurações de controle de origem do pacote em com.mycompany.mypackage são Publicação: BLOQUEAR e Upstream: PERMITIR. Você não pode publicar nenhuma versão do pacote diretamente no seu repositório.