Configurar a autenticação para npm

É necessário se autenticar no Artifact Registry ao usar um aplicativo de terceiros para se conectar a um repositório.

Não é necessário configurar a autenticação para ambientes de execução do Cloud Build ou do Google Cloud, como o Google Kubernetes Engine e o Cloud Run, mas verifique se as permissões necessárias estão configuradas.

Antes de começar

  1. Instale a Google Cloud CLI e inicialize-a executando o seguinte comando:

    gcloud init
  2. (Opcional) Configure padrões para comandos gcloud.
  3. Se você estiver se conectando a repositórios do Windows, instale o PowerShell.
  4. Crie uma conta de serviço para agir em nome do seu aplicativo.
  5. Se você não conhece o npm, leia a visão geral para saber mais sobre pacotes com escopo e o arquivo de configuração para suas configurações de autenticação.

Informações gerais

O Artifact Registry é compatível com os seguintes métodos de autenticação.

Como usar um auxiliar de credenciais
Essa opção oferece a maior flexibilidade. Quando você inclui o auxiliar na configuração do npm, o Artifact Registry busca credenciais da conta de serviço no ambiente.
Como especificar uma chave de conta de serviço como uma credencial
Use esta opção quando um aplicativo não for compatível com o Application Default Credentials, mas aceita autenticação com um nome de usuário e senha.

Como autenticar com um auxiliar de credenciais

google-artifactregistry-auth é uma biblioteca de cliente que recebe credenciais para repositórios do Artifact Registry.

O Artifact Registry pesquisa as credenciais na seguinte ordem:

  1. Application Default Credentials (ADC), uma estratégia que procura credenciais na seguinte ordem:

    1. Credenciais definidas na variável de ambiente GOOGLE_APPLICATION_CREDENTIALS.

    2. Credenciais que a conta de serviço padrão do Compute Engine, do Google Kubernetes Engine, do Cloud Run, do App Engine ou do Cloud Functions fornece.

  2. Credenciais fornecidas pela Google Cloud CLI, incluindo credenciais de usuário do comando gcloud auth application-default login.

A variável GOOGLE_APPLICATION_CREDENTIALS torna a conta para autenticação explícita, o que facilita a solução de problemas. Se você não usar a variável, verifique se todas as contas que o ADC pode usar têm as permissões necessárias. Por exemplo, a conta de serviço padrão para VMs do Compute Engine, nós do Google Kubernetes Engine e revisões do Cloud Run tem acesso somente leitura a repositórios. Se você pretende fazer o upload a partir desses ambientes usando a conta de serviço padrão, é necessário modificar as permissões.

Para criar uma conta de serviço e definir a variável de ambiente GOOGLE_APPLICATION_CREDENTIALS:

  1. Crie uma conta de serviço para agir em nome do seu aplicativo ou escolha uma conta de serviço atual que você usa para sua automação de CI/CD.

  2. Conceda o papel apropriado do Artifact Registry à conta de serviço para fornecer acesso ao repositório.

  3. Atribua o local do arquivo de chave da conta de serviço à variável GOOGLE_APPLICATION_CREDENTIALS para que o auxiliar de credenciais do Artifact Registry possa conseguir sua chave ao se conectar com os repositórios.

    export GOOGLE_APPLICATION_CREDENTIALS=KEY-FILE
    

    Em que KEY-FILE é o caminho para o arquivo de chave da conta de serviço.

Para configurar a autenticação:

  1. Execute o seguinte comando para imprimir a configuração do repositório:

    gcloud artifacts print-settings npm [--project=PROJECT] \
        [--repository=REPOSITORY] \
        [--location=LOCATION] \
        --scope=@SCOPE-NAME \
    

    Onde

    • PROJECT é o ID do projeto; Se essa sinalização for omitida, o projeto atual ou padrão será usado.
    • REPOSITORY é o ID do repositório. Se você tiver configurado um repositório do Artifact Registry padrão, ele será usado quando essa sinalização for omitida no comando.
    • LOCATION é o local regional ou multirregional do repositório.
    • SCOPE-NAME é o nome do escopo do npm a ser associado ao repositório.

      O uso de escopos garante que você sempre publique e instale pacotes do repositório correto.

      Os pacotes sem escopo estão associados ao seu registro npm padrão, geralmente o npm public Registry. Se você não especificar um escopo, a configuração retornada definirá o repositório do Artifact Registry como o registro padrão. Isso pode causar problemas se os projetos do Node.js precisam instalar pacotes do registro npm público e do repositório do Artifact Registry.

  2. Adicione as definições de configuração retornadas ao arquivo de configuração .npmrc nos projetos do Node.js. Esse arquivo geralmente está no mesmo diretório que package.json.

    Certifique-se de incluir essas configurações em projetos do Node.js para pacotes publicados e projetos que instalarão as dependências de seu repositório npm.

  3. Se você tiver outros repositórios Node.js para se conectar, repita as etapas anteriores para conseguir as configurações e adicioná-las aos arquivos .npmrc apropriados.

  4. Quando você estiver pronto para conectar um repositório, consiga um token de acesso para autenticação.

Cada repositório de pacotes Node.js do Artifact Registry está associado a um endpoint de registro https://LOCATION-npm.pkg.dev/PROJECT/REPOSITORY

Se você não tiver especificado um escopo com o comando print-settings, execute o seguinte comando para associar um escopo a um repositório do Artifact Registry.

npm config set @SCOPE_NAME:registry https://LOCATION-npm.pkg.dev/PROJECT/REPOSITORY/

Como conseguir um token de acesso

Os tokens de acesso são válidos por 60 minutos. Gere um token de acesso logo antes de executar comandos que interagem com repositórios.

Para obter um token, use uma destas opções:

  • Use o comando npx para atualizar o token de acesso.

    1. Verifique se as credenciais para se conectar ao registro npm público estão no arquivo de configuração do npm do usuário, ~/.npmrc.

    2. Execute o comando a seguir no diretório do projeto do Node.js.

      npx google-artifactregistry-auth
      

      Se o repositório do Artifact Registry estiver definido como o registro global e os pacotes não tiverem escopo, use o seguinte comando para que ele possa fazer o download do auxiliar de credencial do registro npm público em vez do repositório do Artifact Registry.

      npm_config_registry=https://registry.npmjs.org npx google-artifactregistry-auth
      
  • Adicione um script ao arquivo package.json no seu projeto.

    "scripts": {
     "artifactregistry-login": "npx google-artifactregistry-auth"
    }
    

    Execute o script no diretório do projeto do Node.js.

    npm run artifactregistry-login
    

O Artifact Registry lê as configurações de repositório do Artifact Registry no arquivo .npmrc do projeto e as usa para adicionar credenciais de token ao arquivo .npmrc do usuário. Armazenar o token no arquivo .npmrc do usuário isola as credenciais do código-fonte e do sistema de controle de origem.

  • --repo-config é o arquivo .npmrc com as configurações do repositório. Se você não especificar essa sinalização, o local padrão será o diretório atual.
  • --credential-config é o caminho para o arquivo .npmrc em que você quer gravar o token de acesso. O padrão é o arquivo .npmrc do usuário.

Como configurar a autenticação por senha

Use essa abordagem quando o aplicativo Node.js exigir autenticação com um nome de usuário e uma senha especificados.

As chaves da conta de serviço são credenciais de longa duração. Use as seguintes diretrizes para limitar o acesso aos seus repositórios:

  • Considere usar uma conta de serviço dedicada para interagir com repositórios.
  • Conceda o papel mínimo do Artifact Registry exigido pela conta de serviço. Por exemplo, atribua o leitor do Artifact Registry a uma conta de serviço que faz o download apenas de artefatos.
  • Se os grupos na sua organização exigirem níveis diferentes de acesso a repositórios específicos, conceda acesso no nível do repositório em vez de no nível do projeto.
  • Siga as práticas recomendadas para gerenciar as credenciais.

Para criar uma conta de serviço e configurar a autenticação:

  1. Crie uma conta de serviço para agir em nome do seu aplicativo ou escolha uma conta de serviço atual que você usa para automação.

    Você precisará do local do arquivo de chave da conta de serviço para configurar a autenticação com o Artifact Registry. Para contas existentes, é possível ver as chaves e criar novas chaves na página "Contas de serviço".

    Acesse a página Contas de serviço

  2. Conceda o papel apropriado do Artifact Registry à conta de serviço para fornecer acesso ao repositório.

  3. Se você quiser ativar a conta de serviço na sessão atual da CLI gcloud, execute o comando:

    gcloud auth activate-service-account ACCOUNT --key-file=KEY-FILE
    

    Onde

    • ACCOUNT é a conta de usuário ou de serviço.
    • KEY-FILE é o caminho para o arquivo de chaves JSON da conta de serviço.
  4. Execute o seguinte comando para imprimir a configuração do repositório:

    gcloud artifacts print-settings npm [--project=PROJECT] \
    [--repository=REPOSITORY] [--location=LOCATION] --scope=@SCOPE-NAME --json-key=KEY-FILE
    

    Onde

    • PROJECT é o ID do projeto; Se essa sinalização for omitida, o projeto atual ou padrão será usado.
    • REPOSITORY é o ID do repositório. Se você tiver configurado um repositório do Artifact Registry padrão, ele será usado quando essa sinalização for omitida no comando.
    • LOCATION é o local regional ou multirregional do repositório.
    • SCOPE-NAME é o nome do escopo do npm a ser associado ao repositório.

      O uso de escopos garante que você sempre publique e instale pacotes do repositório correto.

      Os pacotes sem escopo estão associados ao seu registro npm padrão, geralmente o npm public Registry. Se você não especificar um escopo, a configuração retornada definirá o repositório do Artifact Registry como o registro padrão. Isso pode causar problemas se os projetos do Node.js precisam instalar pacotes do registro npm público e do repositório do Artifact Registry.

    • KEY-FILE é o caminho para o arquivo de chaves JSON da conta de serviço.

  5. Adicione as definições de configuração retornadas ao arquivo de configuração .npmrc nos projetos do Node.js. Esse arquivo geralmente está no mesmo diretório que package.json. Certifique-se de incluir essas configurações em projetos do Node.js para pacotes publicados e projetos que instalarão as dependências de seu repositório npm.

  6. Se você tiver outros repositórios Node.js para se conectar, repita as etapas anteriores para conseguir as configurações e adicioná-las ao arquivo .npmrc.

A seguir