Go の認証を設定する

Artifact Registry への認証は、パッケージ化された Go モジュールのアップロードとダウンロードで異なります。Go モジュールをパッケージ化して Artifact Registry にアップロードする場合、--json_key フラグがサービス アカウント キーを使用するために渡されない限り、gcloud CLI ツールは認証を行うために環境内の認証情報を次の順序で検索します。

  1. アプリケーションのデフォルト認証情報(ADC)。次の順序で認証情報を検索する戦略です。

    1. GOOGLE_APPLICATION_CREDENTIALS 環境変数で定義された認証情報。

    2. Compute Engine、Google Kubernetes Engine、Cloud Run、App Engine、Cloud Functions のデフォルト サービス アカウントによって指定される認証情報。

  2. コマンド gcloud auth application-default login からのユーザー認証情報など、Google Cloud CLI によって提供される認証情報。

GOOGLE_APPLICATION_CREDENTIALS 変数によって、アカウントの認証が明示的になるため、トラブルシューティングが容易になります。この変数を使用しない場合は、ADC が使用するアカウントに必要な権限があることを確認します。たとえば、Compute Engine VM、Google Kubernetes Engine ノード、Cloud Run リビジョン用のデフォルトのサービス アカウントには、リポジトリへの読み取り専用権限が付与されています。デフォルトのサービス アカウントを使用して、これらの環境からアップロードする場合は、権限を変更する必要があります。

パッケージ化された Go モジュールをダウンロードして Artifact Registry から依存関係として使用すると、Go バイナリは netrc ファイル内の認証情報を使用して Artifact Registry に対する認証を行います。認証プロセスを簡素化するには、Go 認証ヘルパーを使用して、Artifact Registry への認証用の netrc ファイル内のトークンを更新します。

netrc ファイルの場所は、netrc 環境変数で設定できます。NETRC 変数が設定されていない場合、go コマンドは UNIX のようなプラットフォームでは $HOME/.netrc、Windows では %USERPROFILE%\_netrc を読み取ります。

Artifact Registry では、netrc ファイルで認証情報を使用する場合に次の認証方法をサポートしています。

有効期間が短い認証情報(推奨)
Artifact Registry の Go 認証情報ヘルパーツールを使用して、環境内の認証情報を使用して netrc ファイル内の認証トークンを更新するか、手動で Artifact Registry 認証情報を netrc ファイルに追加します。
サービス アカウント キーを使用する
このオプションは、環境で認証に認証情報を使用できない場合に使用します。Artifact Registry の Go 認証ヘルパーツールを使用して、暗号化されていないサービス アカウントキーを netrc ファイルに追加するか、手動でファイルに追加できます。

始める前に

  1. Go 1.15 以降をインストールします
  2. package-go-module gcloud CLI アドオンをインストールします。

    gcloud components install package-go-module

Go 環境を設定する

  1. Artifact Registry、公開 Go モジュール プロキシ、ソースを次の順序でダウンロードするように Go に指示します。

      export GOPROXY=https://LOCATION-go.pkg.dev/PROJECT/REPOSITORY,https://proxy.golang.org,direct
    

    以下を置き換えます。

    • LOCATION は、リポジトリのリージョンまたはマルチリージョンのロケーションです。
    • PROJECT は、Google Cloud プロジェクト ID です。
    • REPOSITORY は、パッケージが保存されるリポジトリの名前です。
  2. 公開チェックサム データベースを使用してモジュールがチェックされないように除外します。

      export GONOSUMDB=MODULE_PATH_REGEX
    

    複数のモジュールを除外する場合は、MODULE_PATH_REGEX をモジュール パスまたは正規表現に置き換えます。

    たとえば、公開チェックサム データベースを使用してモジュール example.com/foo がチェックされないようにするには、次のコマンドを実行します。

      export GONOSUMDB=example.com/foo
    

    次のコマンドは、example.com で始まるモジュールパスを持つすべてのモジュールが、公開チェックサム データベースを使用してチェックされないように除外します。

      export GONOSUMDB=example.com/*
    

netrc ファイルに Artifact Registry 認証情報を追加する

  1. 次のコマンドを実行して、Go 認証ヘルパーを使用して Artifact Registry 認証情報を netrc ファイルに追加します。

      GOPROXY=proxy.golang.org \
          go run github.com/GoogleCloudPlatform/artifact-registry-go-tools/cmd/auth@v0.1.0 \
          add-locations --locations=LOCATION \
          --json_key=PATH_TO_JSON_KEY
    

    ここで

    • LOCATION は、リポジトリのリージョンまたはマルチリージョンのロケーションです。複数の場所を追加するには、カンマ区切りのリストとして入力します。
    • PATH_TO_JSON_KEY: 省略可。サービス アカウントキーへのパス。

      Go 認証ヘルパーは、Artifact Registry の認証用の設定を netrc ファイルに追加します。--json_key フラグを渡すと、キーが netrc ファイルに追加され、パスワード認証が行われます。

  2. Artifact Registry の認証に有効期間が短い認証情報を使用している場合は、モジュールを依存関係として使用する前に、次のコマンドを実行して OAuth トークンを更新する必要があります。

      GOPROXY=proxy.golang.org \
      go run github.com/GoogleCloudPlatform/artifact-registry-go-tools/cmd/auth@v0.1.0 refresh
    

サービス アカウント キーによる認証

ユーザー名とパスワードによる認証が必要な場合は、この方法を使用します。

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

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

以下により認証を構成します。

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

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

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

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

  3. 次のコマンドを実行して、Go 認証ヘルパーでサービス アカウントの認証情報を netrc ファイルに追加します。

      GOPROXY=proxy.golang.org \
          go run github.com/GoogleCloudPlatform/artifact-registry-go-tools/cmd/auth@v0.1.0 \
          add-locations --locations=LOCATION \
          --json_key=PATH_TO_JSON_KEY
    

    ここで

    • LOCATION は、リポジトリのリージョンまたはマルチリージョンのロケーションです。複数の場所を追加するには、カンマ区切りのリストとして入力します。
    • PATH_TO_JSON_KEY はサービス アカウントの JSON キーファイルのパスです。

      Go 認証ヘルパーがパスワード認証用のサービス アカウントキーを netrc ファイルに追加します。

サービス アカウント キーは、次の形式で netrc ファイルに手動で追加することもできます。

machine LOCATION.pkg.dev
login json_key_base64
password KEY

次のように置き換えます。

  • LOCATION: リポジトリのリージョンまたはマルチリージョン ロケーション
  • KEY: サービス アカウント キーファイルにある base64 でエンコードされたキー

Go 認証ヘルパーを GONOPROXY に追加する

Go 認証ヘルパーを使用する前に、これを Go が GitHub から直接ダウンロードするように、GONOPROXY リストに追加する必要があります。ソースから直接ダウンロードしたいモジュールがある場合は、次の例に示すように、カンマ区切りのリストに追加できます。

  export GONOPROXY=MODULE_PATH1, MODULE_PATH2

MODULE_PATH1MODULE_PATH2 は、ソースからダウンロードするモジュールのモジュールパスです。

Go 認証ヘルパーを GONOPROXY リストに追加し、それを実行して認証情報を設定する手順は、次のとおりです。

  1. Go 認証ヘルパーを GONOPROXY に追加する

      export GONOPROXY=github.com/GoogleCloudPlatform/artifact-registry-go-tools
    
  2. 次のコマンドを実行して、Go モジュール パッケージ ツールで Artifact Registry の認証情報を netrc ファイルに追加します。

      GOPROXY=proxy.golang.org \
          go run github.com/GoogleCloudPlatform/artifact-registry-go-tools/cmd/auth@v0.1.0 \
          add-locations --locations=LOCATION \
          [--json_key=path/to/service/account/key.json]
    

    ここで、LOCATION は、リポジトリのリージョンまたはマルチリージョンのロケーションです。複数の場所を追加するには、カンマ区切りのリストとして入力します。

    Go 認証ヘルパーは、Artifact Registry の認証用の設定を netrc ファイルに追加します。--json_key フラグを渡すと、キーが netrc ファイルに追加され、パスワード認証が行われます。

次のステップ