Configura la autenticación para Go

La autenticación en Artifact Registry es diferente para la carga y descarga de módulos de Go empaquetados. Cuando empaquetas y subes un módulo de Go a Artifact Registry, la herramienta de gcloud CLI busca credenciales en tu entorno para configurar la autenticación en el siguiente orden, a menos que se pase la marca --json_key para usar una clave de cuenta de servicio.

  1. Las credenciales predeterminadas de la aplicación (ADC), que es una estrategia que busca credenciales en el siguiente orden:

    1. Credenciales definidas en la variable de entorno GOOGLE_APPLICATION_CREDENTIALS

    2. Credenciales que proporciona la cuenta de servicio predeterminada para Compute Engine, Google Kubernetes Engine, Cloud Run, App Engine o Cloud Functions

  2. Las credenciales que proporciona Google Cloud CLI, incluidas las credenciales de usuario del comando gcloud auth application-default login.

La variable GOOGLE_APPLICATION_CREDENTIALS hace que la cuenta sea explícita para la autenticación, lo que facilita la solución de problemas. Si no usas la variable, verifica que las cuentas que ADC pueda usar tengan los permisos necesarios. Por ejemplo, la cuenta de servicio predeterminada para las VM de Compute Engine, los nodos de Google Kubernetes Engine y las revisiones de Cloud Run tienen acceso de solo lectura a los repositorios. Si deseas subir datos desde estos entornos con la cuenta de servicio predeterminada, debes modificar los permisos.

Cuando descargas módulos de Go empaquetados para usarlos como dependencias de Artifact Registry, el objeto binario de Go usa las credenciales del archivo .netrc para autenticarse en Artifact Registry.

Artifact Registry admite los siguientes métodos de autenticación cuando se usan credenciales en tu archivo .netrc:

Credenciales de corta duración (recomendado)
Usa la herramienta auxiliar de credenciales de Go de Artifact Registry para actualizar los tokens de autenticación del archivo .netrc con las credenciales de tu entorno o agrega manualmente las credenciales de Artifact Registry al archivo .netrc.
Usa una clave de cuenta de servicio
Usa esta opción cuando no puedas usar credenciales en tu entorno para la autenticación. Puedes usar la herramienta auxiliar de credenciales de Go de Artifact Registry para agregar la clave de cuenta de servicio sin encriptar a tu archivo .netrc o de forma manual.

Antes de comenzar

  1. Instala Go 1.15 o una versión posterior.
  2. Instala el complemento package-go-module de gcloud CLI:

    gcloud components install package-go-module

Cómo configurar el entorno de Go

  1. Indícale a Go que descargue los módulos desde Artifact Registry, el proxy del módulo de Go público y, luego, la fuente en ese orden:

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

    Reemplaza lo siguiente:

    • LOCATION es la ubicación regional o multirregional del repositorio.
    • PROJECT es el ID del proyecto de Google Cloud.
    • REPOSITORY es el nombre del repositorio en el que se almacena el paquete.
  2. Excluye el módulo para que no se verifique con la base de datos de suma de comprobación pública:

      export GONOSUMDB=MODULE_PATH_REGEX
    

    Reemplaza MODULE_PATH_REGEX por la ruta de acceso del módulo o una expresión regular si deseas excluir varios módulos.

    Por ejemplo, para excluir el módulo example.com/foo de la verificación con la base de datos de suma de verificación pública, ejecuta el siguiente comando:

      export GONOSUMDB=example.com/foo
    

    El siguiente comando excluye todos los módulos con rutas de acceso de módulos que comiencen en example.com de la verificación con la base de datos de suma de verificación pública:

      export GONOSUMDB=example.com/*
    

Agrega credenciales de Artifact Registry a tu archivo .netrc

  1. Ejecuta el siguiente comando para agregar tus credenciales de Artifact Registry al archivo .netrc con el auxiliar de credenciales de 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
    

    Aquí:

    • LOCATION es la ubicación regional o multirregional de tu repositorio. Para agregar varias ubicaciones, ingrésalas en una lista separada por comas.
    • PATH_TO_JSON_KEY opcional Es la ruta de acceso a la clave de tu cuenta de servicio.

      El auxiliar de credenciales de Go agrega parámetros de configuración a tu archivo .netrc para autenticarse en Artifact Registry. Si pasas la marca --json_key, la clave se agregará a tu archivo .netrc para la autenticación de contraseñas.

  2. Si usas credenciales de corta duración para autenticarte en Artifact Registry, deberás actualizar tu token de OAuth. Para ello, ejecuta el siguiente comando antes de usar tu módulo como dependencia:

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

Autentica con una clave de cuenta de servicio

Usa este enfoque cuando necesites autenticación con un nombre de usuario y contraseña.

Las claves de la cuenta de servicio son credenciales de larga duración. Usa los siguientes lineamientos para limitar el acceso a tus repositorios:

  • Considera usar una cuenta de servicio dedicada para interactuar con los repositorios.
  • Otorga la función mínima de Artifact Registry que requiera la cuenta de servicio. Por ejemplo, asigna la función de lector de Artifact Registry a una cuenta de servicio que solo descargue artefactos.
  • Si los grupos de tu organización requieren diferentes niveles de acceso a repositorios específicos, otorga acceso a nivel de repositorio en lugar de a nivel de proyecto.
  • Sigue las prácticas recomendadas para administrar credenciales.

Para configurar la autenticación, sigue estos pasos:

  1. Crea una cuenta de servicio que actúe en nombre de tu aplicación o elige una cuenta de servicio existente que uses para la automatización.

    Necesitarás la ubicación del archivo de claves de la cuenta de servicio para configurar la autenticación con Artifact Registry. En las cuentas existentes, puedes ver claves y crear claves nuevas en la página Cuentas de servicio.

    Ir a la página Cuentas de servicio

  2. Otorga la función adecuada de Artifact Registry a la cuenta de servicio para proporcionar acceso al repositorio.

  3. Ejecuta el siguiente comando para agregar las credenciales de tu cuenta de servicio al archivo .netrc con el auxiliar de credenciales de 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
    

    Aquí:

    • LOCATION es la ubicación regional o multirregional de tu repositorio. Para agregar varias ubicaciones, ingrésalas en una lista separada por comas.
    • PATH_TO_JSON_KEY es la ruta de acceso al archivo de claves JSON de la cuenta de servicio.

      El auxiliar de credenciales de Go agrega la clave de la cuenta de servicio a tu archivo .netrc para la autenticación con contraseña.

También es posible agregar de forma manual la clave de tu cuenta de servicio al archivo .netrc en el siguiente formato:

machine LOCATION.pkg.dev
login json_key_base64
password KEY

Reemplaza lo siguiente:

  • LOCATION por la ubicación regional o multirregional del repositorio.
  • KEY por la clave codificada en base64 en el archivo de claves de la cuenta de servicio

Agrega el auxiliar de credenciales de Go a GONOPROXY.

Antes de usar el auxiliar de credenciales de Go, debes agregarlo a la lista GONOPROXY para forzar la descarga de Go directamente desde GitHub. Si hay otros módulos que quieres descargar directamente de la fuente, puedes agregarlos en una lista separada por comas, como se muestra en el siguiente ejemplo:

  export GONOPROXY=MODULE_PATH1, MODULE_PATH2

Donde MODULE_PATH1 y MODULE_PATH2 son rutas de acceso de módulos de módulos que se descargarán desde la fuente.

Para agregar el auxiliar de credenciales de Go a tu lista GONOPROXY y ejecútalo para configurar las credenciales, haz lo siguiente:

  1. Agrega el auxiliar de credenciales de Go a tu GONOPROXY

      export GONOPROXY=github.com/GoogleCloudPlatform/artifact-registry-go-tools
    
  2. Ejecuta el siguiente comando para agregar tus credenciales de Artifact Registry al archivo .netrc con la herramienta del paquete del módulo de 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]
    

    En el ejemplo anterior, LOCATION es la ubicación regional o multirregional de tu repositorio. Para agregar varias ubicaciones, ingrésalas en una lista separada por comas.

    El auxiliar de credenciales de Go agrega parámetros de configuración a tu archivo .netrc para autenticarse en Artifact Registry. Si pasas la marca --json_key, la clave se agregará a tu archivo .netrc para la autenticación de contraseñas.

¿Qué sigue?