Ruby gem リポジトリの Artifact Registry に対する認証を構成する

このページでは、Artifact Registry Ruby gem リポジトリで認証を構成する方法について説明します。

サードパーティのアプリケーションを使用してリポジトリに接続する場合は、Artifact Registry に対して認証する必要があります。

Cloud Build または Google Cloud ランタイム環境(Google Kubernetes Engine、Cloud Run など)に対する認証を構成する必要はありません。

始める前に

  1. ターゲット リポジトリが存在しない場合は、 Ruby gem リポジトリを作成します
  2. Ruby がインストールされていることを確認します。インストール手順については、 Google Cloud Ruby の設定チュートリアルをご覧ください。
  3. 使用しているユーザー アカウントまたはサービス アカウントに、リポジトリにアクセスするために必要な 権限があることを確認します。
  4. Google Cloud CLI をインストールし 連携 ID を使用して gcloud CLI にログインします。 ログイン後、 初期化するには、次のコマンドを実行して Google Cloud CLI を初期化します。

    gcloud init
  5. (省略可)gcloud CLI コマンドのデフォルトを構成します

概要

Ruby では、Artifact Registry リポジトリへのリクエストを認証する次の 2 つの方法がサポートされています。

  • RubyGems CLI: push リクエストと pull リクエストをサポートします。この CLI は、デフォルトで Ruby で使用できます。RubyGems で認証する場合は、リポジトリに対して push リクエストまたは pull リクエストを行うたびに認証する必要があります。
  • Bundler CLI: pull リクエストをサポートします。Bundler は、パッケージとアップストリームを gemfile に保存します。これにより、ユーザーは個々の pull リクエストを認証することなく、複数のマシンで設定を標準化できます。ただし、Bundler に対して認証情報を再認証する必要がある場合があります。

    Bundler CLI をインストールするには、gem install bundler と入力します。

認証用のトークンを生成する

Artifact Registry でパッケージを認証するには、まず認証トークンを生成する必要があります。このトークンは、パッケージから Artifact Registry にリクエストを行うときに使用できます。

oauth2 アクセス トークンは、 Google Cloud または oauth2l トークンを使用して Google Cloudの外部で生成できます。

アクセス トークンは 60 分間有効です。リポジトリとやり取りするコマンドを実行する直前にアクセス トークンを生成します。アクセス トークンの有効期限が切れている場合は、新しいアクセス トークンを生成する必要があります。

gcloud を使用してトークンを生成する

oauth2 アクセス トークンを生成するには、 Google Cloudを使用して次の コマンドを実行します。

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

Ruby パッケージから Artifact Registry にリクエストを行うときに、ACCESS_TOKEN を参照できるようになりました。

gcloud を使用せずにトークンを生成する

oauth2l CLI のみを使用してアクセス トークンを生成するには、次の操作を行います。

  1. 次のコマンドを実行して、最新バージョンの oauth2l をインストールします。

    go install github.com/google/oauth2l@latest
    
  2. 次のコマンドを実行します。

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

    Google Cloud は SHA256 ハッシュ トークンを生成し、ACCESS_TOKEN 変数に保存します。Ruby パッケージから Artifact Registry にリクエストを行うときに、ACCESS_TOKEN を参照できるようになりました。

RubyGems CLI で認証する

RubyGems CLI は、OAuth2 トークンを使用してリクエストを認証します。 OAuth2 トークンを Artifact Registry リポジトリへの呼び出しに渡すには、リクエストを行うときにリポジトリのアドレスとともに Oauth2 トークンを渡す必要があります。トークンの有効期間は 1 時間で、1 時間ごとに更新する必要があります。

pull リクエストを認証する

pull リクエストは、Google Cloud CLI コマンドラインで認証するか、.gemrc ファイルを更新して認証できます。

コマンドラインで pull リクエストを認証する

pull リクエストで最新バージョンの gem を認証するには、次のコマンドを実行します。

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

特定の gem バージョンを認証するには、 -v GEM_VERSIONgem install コマンドに追加します。

ここで

  • GEM_NAME は、リクエストが行われる gem の名前です。
  • LOCATION は、リポジトリのリージョンまたはマルチリージョンの ロケーションです。
  • PROJECT は、リポジトリを含むプロジェクトの ID です。
  • REPOSITORY はリポジトリの ID です。

.gemrc ファイルで認証する

グローバルまたはプロジェクト固有の /.gemrc ファイルを構成して、次のコードを追加することで、pull リクエストでソースを認証できます。

# 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/
<...>

ここで

  • ACCESS_TOKEN は OAuth2 アクセス トークンです。
  • LOCATION は、リポジトリのリージョンまたはマルチリージョンの ロケーションです。
  • PROJECT は、リポジトリを含むプロジェクトの ID です。
  • REPOSITORY はリポジトリの ID です。

/.gemrc ファイルで定義されたソースを使用して gem をインストールするには、次のコマンドを実行します。

gem install GEM_NAME

push リクエストを認証する

push リクエストは、Google Cloud CLI コマンドラインで認証するか、認証情報ファイルを更新して認証できます。

コマンドラインで push リクエストを認証する

push リクエストを認証するには、次のコマンドを実行します。

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

ここで

  • GEM_NAME は、リクエストが行われる gem の名前です。
  • LOCATION は、リポジトリのリージョンまたはマルチリージョンの ロケーションです。
  • PROJECT は、リポジトリを含むプロジェクトの ID です。
  • REPOSITORY はリポジトリの ID です。

認証情報ファイルで push リクエストを認証する

gem コマンドライン ツールは、~/.gem/credentials ファイルを使用して、gem の push と pull の API キー を保存します。push リクエストでソースを認証するように認証情報ファイルを構成するには、次の操作を行います。

  1. 認証情報ファイルを更新します。

    1. ~/.gem/credentials を開き、リポジトリの行を追加します。キーはリポジトリの URL で、値は Bearer の後にトークンが続きます。

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

      ここで

      • RUBYGEMS_ORG_KEYRubyGems.org の API キーです。
      • LOCATION は、リポジトリのリージョンまたはマルチリージョンの ロケーションです。
      • PROJECT は、リポジトリを含むプロジェクトの ID です。
      • REPOSITORY はリポジトリの ID です。
      • ACCESS_TOKEN は OAuth2 アクセス トークンです。
    2. gem を push します。認証情報ファイルでキーを定義しているため、GEM_HOST_API_KEY を設定する必要はありません。

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

Bundler で認証する

Ruby Bundler は、1 つ以上の gem にわたってアプリケーションの依存関係 を管理します。Bundler を設定するには、次の操作を行います。

  1. リポジトリのアドレスを gemfile の source として追加します。

    # Gemfile
    # <...>
    source "https://LOCATION-ruby.pkg.dev/PROJECT/REPOSITORY"
    
  2. 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
    

ここで

  • LOCATION は、リポジトリのリージョンまたはマルチリージョンの ロケーションです。
  • PROJECT は、プロジェクト ID です。このフラグを省略すると、現在のプロジェクトまたはデフォルトのプロジェクトが使用されます。
  • REPOSITORY はリポジトリの ID です。デフォルトの Artifact Registry リポジトリを構成した場合、このフラグがコマンドから省略されると使用されます。

リモート リポジトリに対して再認証が必要になる場合があります。この場合は、ステップ 2 と同じ認証コマンドを実行します。

Bundler の構成の詳細については、 bundler.io ドキュメントの Gemfiles をご覧ください。

次のステップ