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. 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 para la autenticación sea explícita, lo que facilita la solución de problemas. Si no usas la variable, verifica que las cuentas que podría usar ADC 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 tiene acceso de solo lectura a los repositorios. Si deseas realizar cargas desde estos entornos con la cuenta de servicio predeterminada, debes modificar los permisos.

Cuando descargas módulos de Go empaquetados para usarlos como dependencias desde Artifact Registry, el objeto binario de Go usa las credenciales del archivo netrc a fin de autenticarse en Artifact Registry. Para simplificar el proceso de autenticación, puedes usar el auxiliar de credenciales de Go a fin de actualizar los tokens en tu archivo netrc para la autenticación en Artifact Registry.

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

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 en tu archivo netrc con las credenciales de tu entorno o agrega de forma manual 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 la cuenta de servicio sin encriptar a tu archivo netrc o agregarla de forma manual al archivo.

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

Configura el entorno de Go

  1. Indica a Go que descargue módulos de Artifact Registry, el proxy público del módulo de Go 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 tu módulo de la verificación con la base de datos pública de suma de comprobación:

      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 pública de suma 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 comienzan en example.com de la verificación mediante la base de datos pública de suma de verificación:

      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 a tu 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 como una lista separada por comas.
    • PATH_TO_JSON_KEY opcional La ruta a la clave de tu cuenta de servicio.

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

  2. Si usas credenciales de corta duración para autenticarte en Artifact Registry, deberás actualizar tu token de OAuth mediante la ejecución del siguiente comando antes de usar el 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 una 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 el rol adecuado 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 como una lista separada por comas.
    • PATH_TO_JSON_KEY es la ruta 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 de tu repositorio
  • KEY por la clave codificada en base64 en el archivo de claves de tu 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 que Go lo descargue directamente desde GitHub. Si tienes 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

En el ejemplo anterior, MODULE_PATH1 y MODULE_PATH2 son rutas de acceso de módulos de los módulos que se descargarán del código fuente.

Para agregar el auxiliar de credenciales de Go a tu lista GONOPROXY y ejecutarlo para configurar tus 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 a tu 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 la configuración a tu archivo netrc para autenticarte en Artifact Registry. Si pasas la marca --json_key, la clave se agrega al archivo netrc para la autenticación con contraseña.

¿Qué sigue?