npm の Artifact Registry に対する認証を構成する

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

Cloud Build または Google Cloudランタイム環境(Google Kubernetes Engine、Cloud Run など)に対する認証を構成する必要はありませんが、必要な権限が構成されていることを確認する必要があります。

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

  • アクセス トークン: アプリケーションの認証が人間のユーザーによって管理されている場合は、アクセス トークンを使用します。
  • パスワード認証: アプリケーションがアプリケーションのデフォルト認証情報に対応していないものの、ユーザー名とパスワードによる認証をサポートしている場合は、このオプションを使用します。

始める前に

  1. Google Cloud CLI をインストールします。インストール後、次のコマンドを実行して Google Cloud CLI を初期化します。

    gcloud init

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

  2. (省略可)gcloud CLI コマンドのデフォルトを構成します。
  3. Windows からリポジトリに接続する場合は、PowerShell をインストールします。
  4. アプリケーションに代わって動作するサービス アカウントを作成します。
  5. npm を初めて使用される場合は、概要をお読みいただき、スコープ設定されたパッケージと認証設定の構成ファイルを確認してください。

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

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

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

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

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

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

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

これで、Node.js パッケージから 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 変数に保存します。これで、Node.js パッケージから Artifact Registry にリクエストを行うときに ACCESS_TOKEN を参照できるようになりました。

サービス アカウント キーを使用してパスワード認証を構成する

Node.js アプリケーションで指定されたユーザー名とパスワードによる認証が必要な場合は、この方法を使用します。

サービス アカウント キーは有効期間の長い認証情報です。次のガイドラインを使用して、リポジトリへのアクセスを制限してください。

  • リポジトリの操作には、専用のサービス アカウントの使用を検討してください。
  • サービス アカウントに必要な最小限の Artifact Registry のロールを付与します。たとえば、アーティファクトのみをダウンロードするサービス アカウントに Artifact Registry の読み取り権を割り当てます。
  • 組織内のグループが特定のリポジトリに対する異なるレベルのアクセス権を必要とする場合は、プロジェクト レベルではなくリポジトリ レベルでアクセス権を付与します。
  • 認証情報管理のおすすめの方法に従います。

サービス アカウントを作成して認証を構成するには:

  1. アプリケーションに代わって動作するサービス アカウントを作成するか、自動化に使用する既存のサービス アカウントを選択します。

    Artifact Registry で認証を設定するには、サービス アカウントのキーファイルの場所が必要です。既存のアカウントの場合は、[サービス アカウント] ページで鍵を表示し、新しい鍵を作成できます。

    [サービス アカウント] ページに移動

  2. 適切な Artifact Registry のロールをサービス アカウントに付与して、リポジトリへのアクセスを許可します。

  3. 現在の gcloud CLI セッションでサービス アカウントを有効にするには、次のコマンドを実行します。

    gcloud auth activate-service-account ACCOUNT --key-file=KEY-FILE
    

    説明

    • ACCOUNT は、ユーザー アカウントまたはサービス アカウントです。
    • KEY-FILE はサービス アカウントの JSON キーファイルのパスです。
  4. 次のコマンドを実行して、リポジトリ構成を出力します。

    gcloud artifacts print-settings npm [--project=PROJECT] \
    [--repository=REPOSITORY] [--location=LOCATION] --scope=@SCOPE-NAME --json-key=KEY-FILE
    

    説明

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

      スコープを使用すると、常に正しいリポジトリからパッケージを公開してインストールできます。

      スコープ設定されていないパッケージは、デフォルトの npm レジストリ(通常は npm 公開レジストリ)に関連付けられます。スコープを指定しない場合、返された構成によって Artifact Registry リポジトリがデフォルトのレジストリとして設定されます。この問題は、Node.js プロジェクトで公開 npm レジストリと Artifact Registry リポジトリの両方からパッケージをインストールする必要がある場合に発生する可能性があります。

    • KEY-FILE はサービス アカウントの JSON キーファイルのパスです。

  5. 返された構成設定を Node.js プロジェクトの .npmrc 構成ファイルに追加します。通常、このファイルは package.json と同じディレクトリにあります。公開するパッケージと、npm リポジトリから依存関係をインストールするプロジェクトに対して、Node.js プロジェクトにこれらの設定を含めます。

  6. 接続できる他の Node.js リポジトリがある場合は、前述の手順を繰り返して設定を取得し、.npmrc ファイルに追加します。

次のステップ