Configurar a autenticação para Go

A autenticação no Artifact Registry é diferente para upload e download de módulos Go empacotados. Ao empacotar e fazer upload de um módulo Go para o Artifact Registry, a ferramenta CLI gcloud vai procurar credenciais no seu ambiente para configurar a autenticação na seguinte ordem, a menos que a flag --json_key seja transmitida para usar uma chave de conta de serviço.

  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 autenticação da conta explícita, o que facilita a solução de problemas. Se você não usar a variável, verifique se alguma conta que o ADC pode usar tem 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 aos repositórios. Se você pretende fazer o upload a partir desses ambientes usando a conta de serviço padrão, modifique as permissões.

Ao fazer o download de módulos Go empacotados para usar como dependências do Artifact Registry, o binário do Go usa as credenciais no arquivo netrc para se autenticar no Artifact Registry. Para simplificar o processo de autenticação, use o auxiliar de credenciais do Go a fim de atualizar os tokens no arquivo netrc para autenticação no Artifact Registry.

O local do arquivo netrc pode ser definido com a variável de ambiente netrc. Se a variável NETRC não estiver definida, o comando go lerá $HOME/.netrc em plataformas semelhantes a UNIX ou %USERPROFILE%\_netrc no Windows.

O Artifact Registry aceita os métodos de autenticação a seguir ao usar credenciais no arquivo netrc:

Credenciais de curta duração (recomendado)
Use a ferramenta auxiliar de credenciais para Go do Artifact Registry para atualizar os tokens de autenticação no arquivo netrc usando as credenciais do ambiente ou adicione manualmente as credenciais do Artifact Registry ao arquivo netrc.
Usar uma chave de conta de serviço
Use essa opção quando não for possível usar credenciais no seu ambiente para autenticação. Use a ferramenta auxiliar de credenciais para Go do Artifact Registry para adicionar a chave de conta de serviço não criptografada ao arquivo netrc ou adicione-a manualmente ao arquivo.

Antes de começar

  1. Instale o Go 1.15 ou posterior.
  2. Instale o complemento da CLI gcloud package-go-module:

    gcloud components install package-go-module

Configurar o ambiente Go

  1. Instrua o Go a fazer o download de módulos do Artifact Registry, do proxy público do módulo do Go e da origem, nessa ordem:

      export GOPROXY=https://LOCATION-go.pkg.dev/PROJECT/REPOSITORY,https://proxy.golang.org,direct
    

    Substitua:

    • LOCATION é o local regional ou multirregional do repositório.
    • PROJECT é o ID do projeto do Google Cloud.
    • REPOSITORY é o nome do repositório em que o pacote está armazenado.
  2. Use o banco de dados público de soma de verificação para impedir que seu módulo seja verificado:

      export GONOSUMDB=MODULE_PATH_REGEX
    

    Substitua MODULE_PATH_REGEX pelo caminho do módulo ou por uma expressão regular se quiser excluir vários módulos.

    Por exemplo, para excluir o módulo example.com/foo da verificação usando o banco de dados público de soma de verificação, execute o seguinte comando:

      export GONOSUMDB=example.com/foo
    

    O comando a seguir exclui todos os módulos com caminhos de módulo que começam em example.com da verificação usando o banco de dados público de soma de verificação:

      export GONOSUMDB=example.com/*
    

Adicione as credenciais do Artifact Registry ao arquivo netrc

  1. Execute o seguinte comando para adicionar as credenciais do Artifact Registry ao arquivo netrc com o auxiliar de credenciais do Go:

      GOPROXY=proxy.golang.org \
          go run github.com/GoogleCloudPlatform/artifact-registry-go-tools/cmd/auth@v0.1.0 \
          add-locations --locations=LOCATION \
          --json_key=PATH_TO_JSON_KEY
    

    Em que:

    • LOCATION é o local regional ou multirregional do seu repositório. Para adicionar vários locais, insira-os como uma lista separada por vírgulas.
    • PATH_TO_JSON_KEY opcional. O caminho para a chave da sua conta de serviço.

      O auxiliar de credenciais do Go adiciona configurações ao arquivo netrc para autenticação no Artifact Registry. Se você transmitir a sinalização --json_key, a chave será adicionada ao arquivo netrc para autenticação de senha.

  2. Se você estiver usando credenciais de curta duração para autenticar no Artifact Registry, será necessário atualizar o token OAuth executando o seguinte comando antes de usar o módulo como dependência:

      GOPROXY=proxy.golang.org \
      go run github.com/GoogleCloudPlatform/artifact-registry-go-tools/cmd/auth@v0.1.0 refresh
    

Como autenticar com uma chave de conta de serviço

Use essa abordagem quando precisar de autenticação com nome de usuário e senha.

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 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. Execute o seguinte comando para adicionar as credenciais da sua conta de serviço ao arquivo netrc com o auxiliar de credenciais do Go:

      GOPROXY=proxy.golang.org \
          go run github.com/GoogleCloudPlatform/artifact-registry-go-tools/cmd/auth@v0.1.0 \
          add-locations --locations=LOCATION \
          --json_key=PATH_TO_JSON_KEY
    

    Em que:

    • LOCATION é o local regional ou multirregional do seu repositório. Para adicionar vários locais, insira-os como uma lista separada por vírgulas.
    • PATH_TO_JSON_KEY é o caminho para o arquivo de chave JSON da conta de serviço.

      O auxiliar de credenciais do Go adiciona a chave da conta de serviço ao arquivo netrc para autenticação por senha.

Também é possível adicionar manualmente a chave da sua conta de serviço ao arquivo netrc no seguinte formato:

machine LOCATION.pkg.dev
login json_key_base64
password KEY

Substitua:

  • LOCATION pelo local regional ou multirregional do seu repositório.
  • KEY pela chave codificada em Base64 no arquivo de chave da conta de serviço.

Adicionar o auxiliar de credenciais do Go a GONOPROXY

Antes de usar o auxiliar de credenciais do Go, é necessário adicioná-lo à lista de GONOPROXY para forçar o Go a fazer o download diretamente do GitHub. Se você tem outros módulos que quer que sejam transferidos por download diretamente da origem, adicione-os em uma lista separada por vírgulas, conforme mostrado no exemplo a seguir.

  export GONOPROXY=MODULE_PATH1, MODULE_PATH2

Em que MODULE_PATH1 e MODULE_PATH2 são caminhos de módulo de módulos que serão transferidos por download da origem.

Para adicionar o auxiliar de credenciais do Go à lista de GONOPROXY e executá-lo para configurar suas credenciais:

  1. Adicionar o auxiliar de credenciais do Go ao GONOPROXY

      export GONOPROXY=github.com/GoogleCloudPlatform/artifact-registry-go-tools
    
  2. Execute o seguinte comando para adicionar as credenciais do Artifact Registry ao arquivo netrc com a ferramenta de pacote do módulo Go:

      GOPROXY=proxy.golang.org \
          go run github.com/GoogleCloudPlatform/artifact-registry-go-tools/cmd/auth@v0.1.0 \
          add-locations --locations=LOCATION \
          [--json_key=path/to/service/account/key.json]
    

    Em que LOCATION é o local regional ou multirregional do seu repositório. Para adicionar vários locais, insira-os como uma lista separada por vírgulas.

    O auxiliar de credenciais do Go adiciona configurações ao arquivo netrc para autenticação no Artifact Registry. Se você passar a sinalização --json_key, a chave será adicionada ao arquivo netrc para autenticação de senha.

A seguir