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: pull リクエストをサポートします。Bundler は、パッケージとアップストリームを gemfile に保存します。これにより、ユーザーは個々のプルリクエストを認証することなく、複数のマシンで設定を標準化できます。ただし、Bundler に対して認証情報を再認証する必要がある場合があります。

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

RubyGems CLI で認証する

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

pull リクエストを認証する

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

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

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

export GEM_TOKEN="oauth2accesstoken:$(gcloud auth print-access-token)"
gem install GEM_NAME --source https://$GEM_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 GEM_TOKEN retrieved from export GEM_TOKEN="oauth2accesstoken:$(gcloud auth print-access-token)"

<...>
:sources:
    - https://GEM_TOKEN@LOCATION-ruby.pkg.dev/PROJECT/REPO/
<...>

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

gem install GEM_NAME

プッシュ リクエストを認証する

プッシュ リクエストを認証するには、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 です。

認証情報ファイルでプッシュ リクエストを認証する

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

  1. 次のコマンドを実行して、OAuth2 アクセス トークンを生成します。

    gcloud auth print-access-token

    このトークンは、Artifact Registry の API キーとして機能します。

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

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

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

      ここで

      • RUBYGEMS_ORG_KEYRubyGems.org の API キーです。
      • LOCATION は、リポジトリのリージョンまたはマルチリージョンのロケーションです。
      • PROJECT は、リポジトリを含むプロジェクトの ID です。
      • REPOSITORY はリポジトリの ID です。
      • OAUTH_TOKEN は OAuth2 アクセス トークンです。
    2. ジェムをプッシュします。認証情報ファイルでキーをすでに定義しているため、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 をご覧ください。

次のステップ