Editar controles de origem do pacote - Amazon CodeCatalyst

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Editar controles de origem do pacote

Na Amazon CodeCatalyst, as versões de pacotes podem ser adicionadas a um repositório de pacotes publicando-as diretamente, retirando-as de um repositório upstream ou ingerindo-as de um repositório público externo por meio de um gateway. Se você permitir que versões de um pacote sejam adicionadas por publicação direta e ingestão de repositórios públicos, estará vulnerável a um ataque de substituição de dependências. Para ter mais informações, consulte Ataques de substituição de dependências. Para se proteger contra um ataque de substituição de dependência, configure 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.

Você deve considerar a configuração dos controles de origem do pacote para fazer com 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 são configurados com base em como a primeira versão de um pacote é adicionada ao repositório.

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.

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 CodeCatalyst repositórios configurados como repositórios upstream ou ingerida de uma fonte pública com uma conexão externa.

  • BLOCO: As versões do pacote não podem ser retidas de outros CodeCatalyst repositórios 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

Os controles de origem de pacote padrão para um pacote serão baseados em como a primeira versão desse pacote é adicionada ao repositório de pacotes.

  • 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.

Cenários comuns de controle de acesso a pacotes

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

Nos cenários a seguir, um pacote interno é publicado diretamente de um gerenciador de pacotes no seu repositório, como um pacote que você mantém. Um pacote externo é um pacote que existe em um repositório público que pode ser ingerido em seu repositório por meio de um repositório de gateway upstream.

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 do PackageA em um repositório de pacotes. CodeCatalyst 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 é publicado no seu repositório, um pacote com o mesmo nome é publicado em um repositório público conectado ao seu repositório de CodeCatalyst pacotes. Isso pode ser uma tentativa de ataque de substituição de dependência contra o pacote interno ou pode ser 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, o RepoA é seu repositório de CodeCatalyst pacotes com uma conexão upstream com o repositório. npm-public-registry-gateway 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, o RepoA ingere a versão 3.0 depois que o pacote é solicitado por um gerenciador de pacotes. Como a ingestão de pacotes está definida como Bloquear, a versão 3.0 não é ingerida em seu repositório de CodeCatalyst pacotes 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. Você pode não estar ciente do pacote público e estar tentando publicar um pacote não relacionado com o mesmo nome, ou pode estar tentando publicar uma versão corrigida ou pode estar tentando publicar diretamente a versão exata do pacote que já existe externamente. CodeCatalyst rejeita a versão que você está tentando publicar, mas você pode explicitamente substituir a rejeição e publicar a versão, se necessário.

Na imagem a seguir, o RepoA é seu repositório de CodeCatalyst pacotes com uma conexão upstream com o repositório. npm-public-registry-gateway Seu repositório de pacotes contém a versão 3.0 que foi ingerida do repositório público. Você deseja publicar a versão 1.2 no seu repositório de pacotes. Normalmente, você poderia publicar a versão 1.2 no RePoA, mas como a publicação está definida como Bloquear, a versão 1.2 não pode ser publicada.

Gráfico simples mostrando a publicação de pacotes bloqueada.

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 de pacotes. 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 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.

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 de pacotes. Para ter mais informações, consulte Configurações de controle de origem do pacote padrão. Para adicionar ou editar controles de origem de pacote para um pacote em um repositório de CodeCatalyst pacotes, execute as etapas no procedimento a seguir.

Para adicionar ou editar controles de origem do pacote
  1. No painel de navegação, selecione Packages (pacotes).

  2. Escolha o repositório de pacotes que contém o pacote que você deseja editar.

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

  4. Na página de resumo do pacote, escolha Controles do Origin.

  5. Em Controles de origem, escolha os controles de origem do pacote que você deseja definir para esse pacote. As duas configurações de controle de origem do pacote, Publish 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.

  6. Escolha Salvar.

Repositórios de publicação e upstream

Em CodeCatalyst, você não pode publicar 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 lodash@1.0 npm em um repositório e myrepo tenha um repositório upstream com uma conexão externa com npmjs.com. myrepo Considere os seguintes cenários:

  1. As configurações de controle de origem do pacote em lodash são Publicação: PERMITIR e Upstream: PERMITIR. Se lodash@1.0 estiver presente no repositório upstream ou em npmjs.com, CodeCatalyst rejeita qualquer tentativa de publicar nele emitindo um erro de conflito 409. myrepo Você ainda pode publicar uma versão diferente, como lodash@1.1.

  2. As configurações de controle de origem do pacote em lodash são Publicação: PERMITIR e Upstream: BLOQUEAR. Você pode publicar qualquer versão do lodash 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 lodash são Publicação: BLOQUEAR e Upstream: PERMITIR. Você não pode publicar nenhuma versão do pacote diretamente no seu repositório.

Ataques de substituição de dependências

Os gerenciadores de pacotes simplificam o processo de criação de pacotes e compartilhamento do código reutilizável. Esses pacotes podem ser pacotes privados desenvolvidos por uma organização para uso em seus aplicativos ou públicos, geralmente pacotes de código aberto, desenvolvidos fora de uma organização e distribuídos por repositórios públicos de pacotes. Quando solicitam pacotes, os desenvolvedores dependem do gerenciador de pacotes para buscar novas versões de suas dependências. Os ataques de substituição de dependência, também conhecidos como ataques de confusão de dependência, exploram o fato de que um gerenciador de pacotes normalmente não tem como distinguir as versões legítimas de um pacote de versões maliciosas.

Os ataques de substituição de dependência pertencem a um subconjunto de ataques conhecido como ataques à cadeia de suprimentos de software. Um ataque à cadeia de suprimentos de software é um ataque que tira proveito de vulnerabilidades em qualquer ponto da cadeia de suprimentos de software.

Um ataque de substituição de dependência pode ter como alvo qualquer pessoa que use tanto pacotes desenvolvidos internamente quanto aqueles obtidos de repositórios públicos. Os invasores identificam nomes de pacotes internos e, em seguida, colocam estrategicamente códigos maliciosos com o mesmo nome em repositórios públicos de pacotes. Normalmente, o código malicioso é publicado em um pacote com um número de versão alto. Os gerenciadores de pacotes buscam o código malicioso desses feeds públicos porque acreditam que os pacotes maliciosos são as versões mais recentes do pacote. Isso causa uma “confusão” ou “substituição” entre o pacote desejado e o pacote malicioso, o que leva ao comprometimento do código.

Para evitar ataques de substituição de dependências, a Amazon CodeCatalyst fornece controles de origem de pacotes. Os controles de origem de pacote são configurações que controlam como os pacotes podem ser adicionados aos seus repositórios. Os controles são configurados automaticamente quando a primeira versão do pacote de um novo pacote é adicionada a um CodeCatalyst repositório. Os controles podem garantir que as versões do pacote não possam ser publicadas diretamente no seu repositório e ingeridas de fontes públicas, protegendo você contra ataques de substituição de dependência. Para obter mais informações sobre os controles de origem de pacotes e como alterá-los, consulteEditar controles de origem do pacote.