Configura l'autenticazione in Artifact Registry per i repository di gem Ruby

Questa pagina descrive come configurare l'autenticazione con un repository di gemme Ruby di Artifact Registry.

Devi autenticarti in Artifact Registry quando utilizzi un'applicazione di terze parti per connetterti a un repository.

Non è necessario configurare l'autenticazione per Cloud Build o per gli ambienti di runtime come Google Kubernetes Engine e Cloud Run. Google Cloud

Prima di iniziare

  1. Se il repository di destinazione non esiste, crea un repository di gem Ruby.
  2. Verifica che Ruby sia installato. Per le istruzioni di installazione, consulta il Google Cloud tutorial sulla configurazione di Ruby.
  3. Verifica che l'account utente o il account di servizio che stai utilizzando disponga delle autorizzazioni richieste per accedere al repository.
  4. Installa Google Cloud CLI, quindi accedi a gcloud CLI con la tua identità federata. Dopo aver eseguito l'accesso, inizializza Google Cloud CLI eseguendo il comando seguente:

    gcloud init
  5. (Facoltativo) Configura le impostazioni predefinite per i comandi gcloud CLI.

Panoramica

Ruby supporta due metodi per autenticare le richieste al repository Artifact Registry:

  • Interfaccia a riga di comando RubyGems: supporta le richieste push e pull. Questa CLI è disponibile con Ruby per impostazione predefinita. Quando esegui l'autenticazione con RubyGems, devi autenticarti ogni volta che effettui una richiesta push o pull al tuo repository.
  • Interfaccia a riga di comando Bundler: supporta le richieste di pull. Bundler memorizza i pacchetti e gli upstream in un gemfile, che consente agli utenti di standardizzare le configurazioni su più macchine senza dover autenticare ogni singola richiesta pull. Tuttavia, di tanto in tanto devi comunque autenticare nuovamente le tue credenziali in Bundler.

    Per installare Bundler CLI, inserisci gem install bundler.

Generare token per l'autenticazione

Per autenticare il pacchetto in Artifact Registry, devi prima generare un token di autenticazione. Puoi quindi utilizzare questo token quando effettui richieste dal tuo pacchetto ad Artifact Registry.

Puoi generare un token di accesso oauth2 utilizzando Google Cloud o un token oauth2l al di fuori di Google Cloud.

I token di accesso sono validi per 60 minuti. Genera un token di accesso poco prima di eseguire comandi che interagiscono con i repository. Se il token di accesso è scaduto, devi generarne uno nuovo.

Genera un token utilizzando gcloud

Per generare un token di accesso oauth2 utilizzando Google Cloud, esegui il seguente comando:

export ACCESS_TOKEN="oauth2accesstoken:$(gcloud auth print-access-token)"

Ora puoi fare riferimento a ACCESS_TOKEN quando effettui richieste dal tuo pacchetto Ruby ad Artifact Registry.

Genera un token senza utilizzare gcloud

Per generare un token di accesso utilizzando solo la CLI oauth2l, procedi nel seguente modo:

  1. Installa l'ultima versione di oauth2l eseguendo questo comando:

    go install github.com/google/oauth2l@latest
    
  2. Esegui questo comando:

    export ACCESS_TOKEN="oauth2l fetch --scope cloud-platform"
    

    Google Cloud genera un token hash SHA256 e lo memorizza nella variabile ACCESS_TOKEN. Ora puoi fare riferimento a ACCESS_TOKEN quando effettui richieste dal tuo pacchetto Ruby ad Artifact Registry.

Esegui l'autenticazione con RubyGems CLI

La CLI RubyGems utilizza token OAuth2 per autenticare una richiesta. Per passare i token OAuth2 alle chiamate ai repository Artifact Registry, devi passare il token OAuth2 con l'indirizzo del repository quando effettui una richiesta. I token hanno una durata di un'ora e devono essere aggiornati ogni ora.

Autenticare le richieste di pull

Puoi autenticare una richiesta di pull nella riga di comando di Google Cloud CLI o aggiornando il file .gemrc.

Autenticare le richieste pull nella riga di comando

Per eseguire l'autenticazione per l'ultima versione della gemma nella richiesta pull, esegui questo comando:

gem install GEM_NAME --source https://$ACCESS_TOKEN@LOCATION-ruby.pkg.dev/PROJECT/REPOSITORY

Per l'autenticazione per una versione specifica del gem, aggiungi -v GEM_VERSION al comando gem install.

Dove:

  • GEM_NAME è il nome del gem per cui viene effettuata la richiesta.
  • LOCATION è la posizione regionale o multiregionale del repository.
  • PROJECT è l'ID del progetto contenente il repository.
  • REPOSITORY è l'ID del repository.

Autenticarsi in un file .gemrc

Puoi configurare il file /.gemrc globale o specifico del progetto per l'autenticazione alle tue origini nelle richieste pull aggiungendo quanto segue:

# File: ~/.gemrc

# Use the ACCESS_TOKEN retrieved from export ACCESS_TOKEN="oauth2accesstoken:$(gcloud auth print-access-token)"

<...>
:sources:
    - https://ACCESS_TOKEN@LOCATION-ruby.pkg.dev/PROJECT/REPOSITORY/
<...>

Dove:

  • ACCESS_TOKEN è il tuo token di accesso OAuth2.
  • LOCATION è la posizione regionale o multiregionale del repository.
  • PROJECT è l'ID del progetto contenente il repository.
  • REPOSITORY è l'ID del repository.

Per installare un gem utilizzando l'origine o le origini definite nel file /.gemrc, esegui:

gem install GEM_NAME

Autenticare le richieste push

Puoi autenticare una richiesta push nella riga di comando di Google Cloud CLI o aggiornando il file delle credenziali.

Autenticare le richieste push nella riga di comando

Per autenticare la richiesta push, esegui questo comando:

export GEM_HOST_API_KEY="Bearer $(gcloud auth print-access-token)"
gem push GEM_NAME --host https://LOCATION-ruby.pkg.dev/PROJECT/REPOSITORY

Dove:

  • GEM_NAME è il nome del gem per cui viene effettuata la richiesta.
  • LOCATION è la posizione regionale o multiregionale del repository.
  • PROJECT è l'ID del progetto contenente il repository.
  • REPOSITORY è l'ID del repository.

Autenticare le richieste push in un file di credenziali

Lo strumento a riga di comando gem utilizza il file ~/.gem/credentials per archiviare le chiavi API per il push e il pull dei gem. Per configurare il file delle credenziali per l'autenticazione alle origini nelle richieste push:

  1. Aggiorna il file delle credenziali:

    1. Apri ~/.gem/credentials e aggiungi una riga per il tuo repository. La chiave è l'URL del repository e il valore è Bearer, seguito dal token:

      :rubygems_api_key: RUBYGEMS_ORG_KEY
      https://LOCATION-ruby.pkg.dev/PROJECT/REPOSITORY: Bearer ACCESS_TOKEN
      

      Dove:

      • RUBYGEMS_ORG_KEY è la chiave API per RubyGems.org.
      • LOCATION è la posizione regionale o multiregionale del repository.
      • PROJECT è l'ID del progetto contenente il repository.
      • REPOSITORY è l'ID del repository.
      • ACCESS_TOKEN è il tuo token di accesso OAuth2.
    2. Spingi il tuo Gem. Tieni presente che non devi impostare GEM_HOST_API_KEY, in quanto hai già definito la chiave nel file delle credenziali.

      gem push GEM_NAME --host https://LOCATION-ruby.pkg.dev/PROJECT/REPOSITORY
      

Autenticarsi con Bundler

Bundler di Ruby gestisce le dipendenze delle applicazioni in una o più gemme. Per configurare Bundler:

  1. Aggiungi l'indirizzo del tuo repository come source nel tuo Gemfile:

    # Gemfile
    # <...>
    source "https://LOCATION-ruby.pkg.dev/PROJECT/REPOSITORY"
    
  2. Autenticati nel repository utilizzando bundle config:

    export GEM_TOKEN="oauth2accesstoken:$(gcloud auth print-access-token)"
    export HOST="https://LOCATION-ruby.pkg.dev/PROJECT/REPOSITORY"
    bundle config $HOST $GEM_TOKEN
    

Dove:

  • LOCATION è la posizione regionale o multiregionale del repository.
  • PROJECT è l'ID progetto. Se questo flag viene omesso, viene utilizzato il progetto corrente o predefinito.
  • REPOSITORY è l'ID del repository. Se hai configurato un repository Artifact Registry predefinito, questo viene utilizzato quando questo flag viene omesso dal comando.

Di tanto in tanto dovrai eseguire nuovamente l'autenticazione al repository remoto. In questo caso, esegui lo stesso comando di autenticazione del passaggio 2.

Per ulteriori informazioni sulla configurazione di Bundler, consulta la sezione Gemfiles nella documentazione di bundler.io.

Passaggi successivi