Configurar la autenticación para Go

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

  1. Credenciales predeterminadas de la aplicación (ADC), 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 de Compute Engine, Google Kubernetes Engine, Cloud Run, App Engine o las funciones de Cloud Run.

  2. Credenciales proporcionadas por la CLI de Google Cloud, incluidas las credenciales de usuario del comando gcloud auth application-default login.

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

Cuando se descargan módulos Go empaquetados para usarlos como dependencias de Artifact Registry, el archivo binario Go usa las credenciales de tu archivo netrc para autenticarse en Artifact Registry. Para simplificar el proceso de autenticación, puedes usar el asistente de credenciales de Go para actualizar los tokens de tu archivo .netrc para autenticarte en Artifact Registry.

La ubicación del archivo netrc se puede definir con la variable de entorno netrc. Si no se define la variable NETRC, el comando go leerá $HOME/.netrc en plataformas de tipo UNIX o %USERPROFILE%\_netrc en Windows.

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

Credenciales de duración reducida (recomendado)
Usa la herramienta auxiliar de credenciales de Go de Artifact Registry para actualizar los tokens de autenticación de tu archivo netrc con las credenciales de tu entorno o añade manualmente tus credenciales de Artifact Registry al archivo netrc.
Usar 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 de asistencia de credenciales de Go de Artifact Registry para añadir la clave de cuenta de servicio sin cifrar a tu archivo .netrc o añadirla manualmente al archivo.

Antes de empezar

  1. Instalar Go 1.15 o versiones posteriores.
  2. Instala el complemento package-go-module de gcloud CLI:

    gcloud components install package-go-module

Configurar el entorno de Go

  1. Indica a Go que descargue módulos de Artifact Registry, el proxy público de módulos de Go y, a continuación, la fuente en ese orden:

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

    Haz los cambios siguientes:

    • LOCATION es la ubicación regional o multirregional del repositorio.
    • PROJECT es tu Google Cloud ID de proyecto.
    • REPOSITORY es el nombre del repositorio en el que se almacena el paquete.
  2. Para excluir tu módulo de la comprobación mediante la base de datos pública de sumas de comprobación, sigue estos pasos:

      export GONOSUMDB=MODULE_PATH_REGEX
    

    Sustituye MODULE_PATH_REGEX por la ruta de tu módulo o por una expresión regular si quieres excluir varios módulos.

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

      export GONOSUMDB=example.com/foo
    

    El siguiente comando excluye todos los módulos con rutas de módulo que empiecen por example.com para que no se comprueben con la base de datos pública de sumas de comprobación:

      export GONOSUMDB=example.com/*
    

Añadir las credenciales de Artifact Registry al archivo .netrc

  1. Ejecuta el siguiente comando para añadir tus credenciales de Artifact Registry a tu archivo .netrc con el asistente de credenciales de Go:

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

    Donde:

    • LOCATION es la ubicación regional o multirregional de tu repositorio. Para añadir varias ubicaciones, introdúzcalas en una lista separada por comas.
    • PATH_TO_JSON_KEY Opcional. La ruta a la clave de tu cuenta de servicio.

      El asistente de credenciales de Go añade ajustes a tu archivo netrc para autenticarte en Artifact Registry. Si pasas la marca --json_key, la clave se añade al archivo .netrc para la autenticación con contraseña.

  2. Si usas credenciales de corta duración para autenticarte en Artifact Registry, tendrás que actualizar tu token de OAuth ejecutando 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.4.0 refresh
    

Autenticarse con una clave de cuenta de servicio

Usa este método cuando necesites autenticarte con un nombre de usuario y una contraseña.

Las claves de cuenta de servicio son credenciales de larga duración. Sigue estas directrices para limitar el acceso a tus repositorios:

  • Te recomendamos que uses una cuenta de servicio específica para interactuar con los repositorios.
  • Asigna el rol de Artifact Registry mínimo que requiere la cuenta de servicio. Por ejemplo, asigna el rol 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, concede acceso a nivel de repositorio en lugar de a nivel de proyecto.
  • Sigue las prácticas recomendadas para gestionar las credenciales.

Para configurar la autenticación, sigue estos pasos:

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

    Necesitarás la ubicación del archivo de clave de cuenta de servicio para configurar la autenticación con Artifact Registry. En el caso de las cuentas que ya tengas, puedes ver las claves y crear otras en la página Cuentas de servicio.

    Ir a la página Cuentas de servicio

  2. Concede el rol de Artifact Registry adecuado a la cuenta de servicio para proporcionar acceso al repositorio.

  3. Ejecuta el siguiente comando para añadir las credenciales de tu cuenta de servicio al archivo .netrc con el asistente de credenciales de Go:

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

    Donde:

    • LOCATION es la ubicación regional o multirregional de tu repositorio. Para añadir varias ubicaciones, introdúzcalas en una lista separada por comas.
    • PATH_TO_JSON_KEY es la ruta al archivo JSON de la cuenta de servicio key file.

      El asistente de credenciales de Go añade la clave de la cuenta de servicio al archivo netrc para la autenticación con contraseña.

También puedes añadir manualmente la clave de tu cuenta de servicio al archivo netrc con el siguiente formato:

machine LOCATION.pkg.dev
login _json_key_base64
password KEY

Haz los cambios siguientes:

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

Añadir el asistente de credenciales de Go a GONOPROXY

Antes de usar el asistente de credenciales de Go, debes añadirlo a la lista GONOPROXY para obligar a Go a descargarlo directamente de GitHub. Si tienes otros módulos que quieres descargar directamente de la fuente, puedes añadirlos 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 las rutas de los módulos que se van a descargar desde la fuente.

Para añadir el asistente de credenciales de Go a tu lista de GONOPROXY y ejecutarlo para configurar tus credenciales, sigue estos pasos:

  1. Añade el asistente de credenciales de Go a tu GONOPROXY

      export GONOPROXY=github.com/GoogleCloudPlatform/artifact-registry-go-tools
    
  2. Ejecuta el siguiente comando para añadir tus credenciales de Artifact Registry al archivo .netrc con la herramienta de paquetes del módulo Go:

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

    Donde LOCATION es la ubicación regional o multirregional de tu repositorio. Para añadir varias ubicaciones, introdúcelas en una lista separada por comas.

    El asistente de credenciales de Go añade ajustes a tu archivo netrc para autenticarte en Artifact Registry. Si pasas la marca --json_key, la clave se añade a tu archivo netrc para la autenticación con contraseña.

Siguientes pasos