

A Amazon não CodeCatalyst está mais aberta a novos clientes. Os clientes atuais podem continuar usando o serviço normalmente. Para obter mais informações, consulte [Como migrar do CodeCatalyst](migration.md).

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

# Publicação e modificação de pacotes
<a name="working-with-packages"></a>

Um *pacote* CodeCatalyst é um pacote de software e os metadados necessários para resolver dependências e instalar o software. Para obter uma lista dos formatos de pacote compatíveis em CodeCatalyst, consulte[Publique e compartilhe pacotes de software no CodeCatalyst](packages.md). Esta seção fornece informações sobre publicação, visualização, exclusão de pacotes e atualização do status da versão de um pacote.

**Topics**
+ [Publicando pacotes em um repositório de CodeCatalyst pacotes](package-publishing.md)
+ [Visualização de detalhes da versão de pacote](working-with-packages-view.md)
+ [Exclusão de uma versão de pacote](working-with-packages-delete.md)
+ [Atualização do status da versão do pacote](working-with-packages-update-version-status.md)
+ [Editar controles de origem do pacote](package-origin-controls.md)

# Publicando pacotes em um repositório de CodeCatalyst pacotes
<a name="package-publishing"></a>

 Você pode publicar versões de qualquer tipo de pacote compatível em um repositório de CodeCatalyst pacotes usando as ferramentas do gerenciador de pacotes. As etapas para publicar uma versão do pacote são as seguintes:

**Para publicar uma versão de pacote em um repositório de CodeCatalyst pacotes**

1. Caso contrário, [crie um repositório de pacotes](packages-repositories-create.md).

1. Conecte o gerenciador de pacotes ao repositório de pacotes. Para obter instruções sobre como conectar o gerenciador de pacotes npm a um repositório de CodeCatalyst pacotes, consulte. [Configuração e uso de npm](packages-npm-use.md)

1. Use o gerenciador de pacotes conectado para publicar as versões de pacotes.

**Contents**
+ [Repositórios de publicação e upstream](#package-publishing-upstreams)
+ [Pacotes privados e repositórios públicos](#package-publishing-upstreams-direct)
+ [Substituindo ativos do pacote](#package-publishing-overwrite-assets)

## Repositórios de publicação e upstream
<a name="package-publishing-upstreams"></a>

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 npm, `lodash@1.0`, em um repositório de pacotes, `myrepo`, e `myrepo` esteja conectado a npmjs.com por meio de um repositório de gateway configurado como um repositório upstream. 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` Isso ajuda a evitar que você publique acidentalmente um pacote com o mesmo nome e a mesma versão de um pacote em um repositório upstream, o que pode resultar em um comportamento inesperado. 

Você ainda pode publicar versões diferentes de um nome de pacote que existam em um repositório upstream. Por exemplo, se `lodash@1.0` estiver presente em um repositório upstream, mas `lodash@1.1` não estiver, você poderá publicar `lodash@1.1` no repositório downstream.

## Pacotes privados e repositórios públicos
<a name="package-publishing-upstreams-direct"></a>

 CodeCatalyst não publica pacotes armazenados em CodeCatalyst repositórios em repositórios públicos, como npmjs.com ou Maven Central. CodeCatalyst importa pacotes de repositórios públicos para um CodeCatalyst repositório, mas não move pacotes na direção oposta. Os pacotes que você publica CodeCatalyst nos repositórios permanecem privados e só estão disponíveis para o CodeCatalyst projeto ao qual o repositório pertence.

## Substituindo ativos do pacote
<a name="package-publishing-overwrite-assets"></a>

 Você não pode republicar um ativo de pacote que já existe com conteúdo diferente. Por exemplo, suponha que você já tenha publicado um pacote Maven com um ativo `mypackage-1.0.jar` JAR. Você só poderá publicar esse ativo outra vez se a soma de verificação dos ativos antigos e novos for idêntica. Para republicar o mesmo ativo com novo conteúdo, primeiro exclua a versão do pacote. Tentar republicar o mesmo nome de ativo com conteúdo diferente resultará em um erro de conflito HTTP 409. 

Para formatos de pacote compatíveis com vários ativos (Python e Maven), você pode adicionar novos ativos com nomes diferentes a uma versão de pacote existente a qualquer momento, supondo que você tenha as permissões necessárias. Como o npm suporta NuGet apenas um único ativo por versão do pacote, para modificar uma versão publicada do pacote, você deve primeiro excluí-la. 

 Se você tentar republicar um ativo que já existe (por exemplo, `mypackage-1.0.jar`) e o conteúdo do ativo publicado e o do novo ativo forem idênticos, a operação será bem-sucedida porque é idempotente. 

# Visualização de detalhes da versão de pacote
<a name="working-with-packages-view"></a>

Você pode usar o CodeCatalyst console para ver detalhes sobre uma versão específica do pacote.

**Para visualizar detalhes da versão de pacote**

1. No painel de navegação, selecione **Packages (pacotes)**.

1. Na página **Repositórios de pacotes**, selecione o repositório que contém a versão do pacote cujos detalhes você deseja visualizar.

1. Pesquise a versão do pacote na tabela **Pacotes**. Você pode usar a barra de pesquisa para filtrar pacotes por nome e formato de pacote. Escolha o pacote na lista.

1. Na página **Detalhes do pacote**, selecione **Versões** e então selecione a versão que você deseja visualizar.

# Exclusão de uma versão de pacote
<a name="working-with-packages-delete"></a>

Você pode excluir uma versão do **pacote na página de detalhes da versão** do pacote no CodeCatalyst console.

**Para excluir uma versão de pacote**

1. No painel de navegação, selecione **Packages (pacotes)**.

1. Na página **Repositórios de pacotes**, selecione o repositório que contém a versão do pacote que você deseja excluir.

1. Pesquise e selecione o pacote na tabela.

1. Na página **Detalhes do pacote**, selecione **Versões** e selecione a versão que deseja excluir.

1. Na página **Detalhes da versão do pacote**, selecione **Ações da versão** e **Excluir**.

1. Insira *excluir* no campo de texto e selecione **Excluir**.

# Atualização do status da versão do pacote
<a name="working-with-packages-update-version-status"></a>

Cada versão do pacote CodeCatalyst tem um status que descreve o estado atual e a disponibilidade da versão do pacote. Você pode alterar o status da versão do pacote no CodeCatalyst console. Para ter mais informações sobre os possíveis valores de status das versões do pacote e seus significados, consulte [Satus da versão do pacote](#package-version-status).

**Como atualizar o status da versão do pacote**

1. No painel de navegação, selecione **Packages (pacotes)**.

1. Na página **Repositórios de pacotes**, selecione o repositório que contém a versão do pacote cujo status você deseja atualizar.

1. Pesquise e selecione o pacote na tabela.

1. Na página **Detalhes do pacote**, selecione **Versões** e então selecione a versão que você deseja visualizar.

1. Na página **Detalhes da versão do pacote**, selecione **Ações** e selecione **Remover da lista**, **Arquivar** ou **Descartar**. Para ter mais informações sobre o status da versão do pacote, consulte [Satus da versão do pacote](#package-version-status).

1. Insira o texto de confirmação no campo de texto e selecione **Remover da lista**, **Arquivar** ou **Descartar**, dependendo do status para o qual você está atualizando.

## Satus da versão do pacote
<a name="package-version-status"></a>

Os seguintes valores de status da versão do pacote são possíveis. Você pode alterar o status da versão do pacote no console. Para obter mais informações, consulte [Atualização do status da versão do pacote](#working-with-packages-update-version-status).
+  **Publicado**: a versão do pacote foi publicada com sucesso e pode ser solicitada por um gerenciador de pacotes. A versão do pacote será incluída nas listas de versões de pacotes retornadas aos gerentes de pacotes, por exemplo, na saída de `npm view <package-name> versions`. Todos os ativos da versão do pacote estão disponíveis no repositório. 
+  **Não concluído**: a última tentativa de publicação não foi concluída. No momento, apenas as versões do pacote Maven podem ter o status de **Não concluído**. Isso pode ocorrer quando o cliente carrega um ou mais ativos para uma versão do pacote, mas não publica um arquivo `maven-metadata.xml` para o pacote que inclui essa versão. 
+  **Não listado**: os ativos da versão do pacote estão disponíveis para download no repositório, mas a versão do pacote não está incluída na lista de versões retornadas aos gerenciadores de pacotes. Por exemplo, para um pacote npm, a saída de `npm view <package-name> versions` não inclui a versão do pacote. Isso significa que a lógica de resolução de dependências do npm não seleciona a versão do pacote porque a versão não aparece na lista de versões disponíveis. No entanto, se a versão do pacote **Não listado** já estiver referenciada em um arquivo `npm package-lock.json`, ela ainda poderá ser baixada e instalada, por exemplo, durante a execução de `npm ci`. 
+  **Arquivado**: os ativos da versão do pacote não podem ser baixados. A versão do pacote não será incluída na lista de versões retornada aos gerenciadores de pacotes. Como os ativos não estão disponíveis, o consumo da versão do pacote pelos clientes é bloqueado. Se a compilação da aplicação depender de uma versão atualizada para **Arquivado**, a compilação falhará, a menos que a versão do pacote tenha sido armazenada em cache localmente. Você não pode usar um gerenciador de pacotes ou uma ferramenta de criação para republicar uma versão de pacote **Arquivado** porque ela ainda está presente no repositório. No entanto, você pode alterar o status da versão do pacote de volta para **Não listado** ou **Publicado** no console. 
+  **Descartada**: a versão do pacote não aparece nas listagens e os ativos não podem ser baixados do repositório. A principal diferença entre **descartado** e **arquivado** é que, com o status de **descartado**, os ativos da versão do pacote são excluídos permanentemente pelo. CodeCatalyst Por esse motivo, você não pode mover uma versão de pacote de **Descartada** para **Arquivada**, **Não Listada** ou **Publicada**. A versão do pacote não pode ser usada porque os ativos foram excluídos. Quando uma versão do pacote for marcada como **Descartada**, você não será cobrado pelo armazenamento dos ativos do pacote. 

 Além dos status na lista anterior, uma versão do pacote também pode ser excluída. Depois de ser excluída, uma versão do pacote não está no repositório e você pode republicá-la livremente usando um gerenciador de pacotes ou uma ferramenta de compilação. 

## Normalização do nome e da versão do pacote e do nome do ativo
<a name="package-name-normalization"></a>

CodeCatalyst normaliza nomes de pacotes, versões de pacotes e nomes de ativos antes de armazená-los, o que significa que os nomes ou versões CodeCatalyst podem ser diferentes do nome ou versão fornecidos quando o pacote foi publicado. Para obter mais informações sobre como os nomes e as versões são normalizados CodeCatalyst para cada tipo de pacote, consulte a documentação a seguir.
+ [Normalização do nome do pacote Python](python-name-normalization.md)
+ [NuGet normalização do nome do pacote, versão e nome do ativo](nuget-name-normalization.md)

CodeCatalyst não executa a normalização em outros formatos de pacote.

# Editar controles de origem do pacote
<a name="package-origin-controls"></a>

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, ficará vulnerável a um ataque de substituição de dependências. Para obter mais informações, consulte [Ataques de substituição de dependências](#dependency-substitution-attacks). 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.

Considere a possibilidade de configurar os controles de origem do pacote para 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 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
<a name="package-origin-control-settings"></a>

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
<a name="default-package-origin-control-settings"></a>

Os controles de origem do pacote padrão de 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
<a name="package-origin-control-scenarios"></a>

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 for adicionada.

Nos cenários a seguir, um *pacote interno* é publicado 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, *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 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.\]](http://docs.aws.amazon.com/pt_br/codecatalyst/latest/userguide/images/packages/package-origin-controls-one.png)


**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 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 a publicação de pacotes bloqueada.\]](http://docs.aws.amazon.com/pt_br/codecatalyst/latest/userguide/images/packages/package-origin-controls-two.png)


**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
<a name="edit-package-origin-controls"></a>

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 obter mais informações, consulte [Configurações de controle de origem do pacote padrão](#default-package-origin-control-settings). 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.

**Como adicionar ou editar controles de origem do pacote**

1. No painel de navegação, selecione **Packages (pacotes)**.

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

1. Na tabela **Pacotes**, procure e selecione o pacote que você deseja editar.

1. Na página de resumo do pacote, selecione **Controles de origem**.

1. Em **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, **Publicar** 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**.

1. Escolha **Salvar**.

## Repositórios de publicação e upstream
<a name="package-publishing-upstreams"></a>

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 npm `lodash@1.0` em um repositório, `myrepo`, e `myrepo` tenha um repositório upstream com uma conexão externa com npmjs.com. 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`.

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

1. 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
<a name="dependency-substitution-attacks"></a>

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, depois, 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 “substituição” ou “confusão” entre o pacote desejado e o pacote malicioso, fazendo com que o código seja comprometido.

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, consulte[Editar controles de origem do pacote](#package-origin-controls).