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 をインストールします。インストール後、次のコマンドを実行して Google Cloud CLI を初期化します。

    gcloud init

    外部 ID プロバイダ(IdP)を使用している場合は、まず連携 ID を使用して gcloud CLI にログインする必要があります。

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

概要

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

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

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

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

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

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

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

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

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

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 リクエストを認証する

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

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

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

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

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

ここで

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

.gemrc ファイルで認証する

次の内容を追加して、プルリクエストでソースに対する認証を行うように、グローバルまたはプロジェクト固有の /.gemrc ファイルを構成できます。

# 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 リクエストを認証する

プッシュ リクエストを認証するには、Google Cloud CLI コマンドラインを使用するか、認証情報ファイルを更新します。

コマンドラインで 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 キーを保存します。プッシュ リクエストでソースに対して認証を行うように認証情報ファイルを構成する手順は次のとおりです。

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

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

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

      ここで

      • RUBYGEMS_ORG_KEY は RubyGems.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 をご覧ください。

次のステップ