Artifact Registry に対する認証は、パッケージ化された Go モジュールのアップロードとダウンロードで異なります。Go モジュールをパッケージ化して Artifact Registry にアップロードする場合、--json_key
フラグがサービス アカウント キーを使用するために渡されない限り、gcloud CLI ツールは認証を行うために環境内の認証情報を次の順序で検索します。
アプリケーションのデフォルト認証情報(ADC)。次の順序で認証情報を検索する戦略です。
GOOGLE_APPLICATION_CREDENTIALS
環境変数で定義された認証情報。Compute Engine、Google Kubernetes Engine、Cloud Run、App Engine、Cloud Run 関数のデフォルト サービス アカウントによって指定される認証情報。
コマンド
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.15 以降の Go をインストールします。
package-go-module gcloud CLI アドオンをインストールします。
gcloud components install package-go-module
Go 環境を設定する
Artifact Registry、公開 Go モジュール プロキシ、ソースを次の順序でダウンロードするように Go に指示します。
export GOPROXY=https://LOCATION-go.pkg.dev/PROJECT/REPOSITORY,https://proxy.golang.org,direct
以下を置き換えます。
公開チェックサム データベースを使用してモジュールがチェックされないように除外します。
export GONOSUMDB=MODULE_PATH_REGEX
複数のモジュールを除外する場合は、MODULE_PATH_REGEX をモジュールパスまたは正規表現に置き換えます。
たとえば、公開チェックサム データベースを使用してモジュール
example.com/foo
がチェックされないようにするには、次のコマンドを実行します。export GONOSUMDB=example.com/foo
次のコマンドは、モジュールパスが
example.com
で始まるすべてのモジュールを、公開チェックサム データベースでチェックされないように除外します。export GONOSUMDB=example.com/*
Artifact Registry 認証情報を netrc ファイルに追加する
次のコマンドを実行して、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 ファイルに追加され、パスワード認証が行われます。
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 の読み取り権を割り当てます。
- 組織内のグループが特定のリポジトリに対する異なるレベルのアクセス権を必要とする場合は、プロジェクト レベルではなくリポジトリ レベルでアクセス権を付与します。
- 認証情報管理のおすすめの方法に従います。
以下により認証を構成します。
アプリケーションに代わって動作するサービス アカウントを作成するか、自動化に使用する既存のサービス アカウントを選択します。
Artifact Registry で認証を設定するには、サービス アカウントのキーファイルの場所が必要です。既存のアカウントの場合は、[サービス アカウント] ページで鍵を表示し、新しい鍵を作成できます。
適切な Artifact Registry のロールをサービス アカウントに付与して、リポジトリへのアクセスを許可します。
次のコマンドを実行して、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
ここで
サービス アカウント キーは、次の形式で 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_PATH1 と MODULE_PATH2 は、ソースからダウンロードするモジュールのモジュールパスです。
Go 認証ヘルパーを GONOPROXY
リストに追加し、それを実行して認証情報を設定する手順は、次のとおりです。
Go 認証ヘルパーを
GONOPROXY
に追加するexport GONOPROXY=github.com/GoogleCloudPlatform/artifact-registry-go-tools
次のコマンドを実行して、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 ファイルに追加され、パスワード認証が行われます。
次のステップ
- クイックスタートをお試しください。
- Go モジュールを管理する。