Helm 用の認証を設定する

このページでは、Artifact Registry リポジトリで認証するように Helm を構成する方法について説明します。

始める前に

  1. グラフのリポジトリが存在しない場合は、新しいリポジトリを作成します。リポジトリ形式として Docker を選択します。
  2. Install the Google Cloud CLI, then initialize it by running the following command:

    gcloud init
  3. (省略可)Google Cloud CLI コマンドのデフォルトを構成します。
  4. Helm 3.8.0 以降をインストールします。以前のバージョンの Helm では、OCI 形式のチャートに対するサポートは試験運用版です。

    helm version を実行してバージョンを確認します。

認証方法の選択

ほとんどの場合、Artifact Registry の認証にはサービス アカウントの使用をおすすめします。

使用できる認証方法は、次のとおりです。

Docker 用に構成された Artifact Registry の認証情報を使用する
デフォルトでは、Helm は Docker で使用するものと同じ認証情報で認証できます。
アクセス トークン
アプリケーションのデフォルト認証情報は、サービス アカウントが Google Cloud リソースへのアクセスに使用する短期間のアクセス トークンを提供します。
JSON キーファイル

サービス アカウントの認証情報として使用できるユーザー管理の鍵ペア。認証情報は有効期間が長いため、使用できるすべての認証方式の中で最も安全性の低い認証方式です。

可能であれば、アクセス トークンを使用して、アーティファクトへの不正アクセスのリスクを軽減します。

Docker 構成の使用

デフォルトでは、Helm は Docker 構成ファイル config.json のレジストリ設定をサポートしています。Helm は、デフォルトの場所または DOCKER_CONFIG 環境変数で指定された場所でレジストリ設定を検索します。

Artifact Registry で認証するための認証情報ヘルパーを使用して Docker を構成した場合、Helm は Artifact Registry Docker リポジトリの既存の構成を使用します。

アクセス トークンの使用

アクセス トークンは、Google Cloud リソースへのアクセス権を付与する、短時間だけ有効なトークンです。トークンは有効期間が短いため、リクエストしてから 1 時間以内に Artifact Registry リポジトリとの接続に使用してください。

Google Cloud は、アプリケーションのデフォルト認証情報を使用してアクセス トークンを取得します。

アクセス トークンを使用するには、次の手順を行います。

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

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

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

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

  3. サービス アカウント キー ファイルの場所を変数 GOOGLE_APPLICATION_CREDENTIALS に割り当てて、Artifact Registry の認証情報ヘルパーがリポジトリとの接続時にキーを取得できるようにします。

    export GOOGLE_APPLICATION_CREDENTIALS=KEY-FILE
    

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

  4. Docker で Artifact Registry に対して認証するときに、アクセス トークンを認証情報として取得します。

    Linux / macOS

    次のコマンドを実行します。

    gcloud auth application-default print-access-token | helm registry login -u oauth2accesstoken \
    --password-stdin https://LOCATION-docker.pkg.dev
    

    Windows

    次のコマンドを実行します。

    gcloud auth application-default print-access-token
    ya29.8QEQIfY_...
    
    helm registry login -u oauth2accesstoken -p "ya29.8QEQIfY_..." \
    https://LOCATION-docker.pkg.dev
    

    ここで

    • oauth2accesstoken は、アクセス トークンで認証するときに使用するユーザー名です。
    • gcloud auth application-default print-access-token は、サービス アカウントのアクセス トークンを取得するための Google Cloud CLI コマンドです。アクセス トークンは認証用のパスワードです。
    • LOCATION は、イメージが保存されているリポジトリのリージョンまたはマルチリージョンののロケーションです。

これで Helm が Artifact Registry で認証されるようになりました。

JSON キーファイルの使用

サービス アカウントの有効な秘密鍵にアクセスできるユーザーは、サービス アカウントを介してリソースにアクセスできます。サービス アカウントに対するキーのアクセスのライフサイクル、つまりサービス アカウントがアクセスできるデータは、ダウンロードしたユーザーのライフサイクルとは無関係です。

次のガイドラインを使用して、リポジトリへのアクセスを制限してください。

  • リポジトリの操作のみ使用される専用のサービス アカウントを作成します。
  • サービス アカウントに必要なアクセスに特定の Artifact Registry ロールを付与します。たとえば、アーティファクトのみをダウンロードするサービス アカウントには、Artifact Registry 読み取りのロールのみが必要です。
  • プロジェクト レベルではなく、各リポジトリ内で専用のサービス アカウントの権限を構成します。その後、リポジトリ コンテキストに基づいてアクセスを指定できます。たとえば、開発ビルド用のサービス アカウントには、本番環境リポジトリに対する Artifact Registry 読み取りのロールと、ステージング リポジトリに対する Artifact Registry 書き込みのロールがある場合があります。
  • サービス アカウント キーの管理に関するベスト プラクティスに従います。

Artifact Registry リポジトリでのみ使用する新しいサービス アカウントとサービス アカウント鍵を作成する手順は、次のとおりです。

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

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

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

  2. 必要に応じて、キーファイルの内容をすべて base64 でエンコードできます。

    Linux

    base64 FILE-NAME > NEW-FILE-NAME
    

    macOS

    base64 -i FILE-NAME -o NEW-FILE-NAME
    

    Windows

    Base64.exe -e FILE-NAME > NEW-FILE-NAME
    

    ここで、FILE-NAME は元のキーファイル名、NEW-FILE-NAME は base64 でエンコードされたキーファイルです。

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

  4. サービス アカウント キーを使用して認証します。

    Linux / macOS

    次のコマンドを実行します。

    cat KEY-FILE | helm registry login -u KEY-TYPE --password-stdin \
    https://LOCATION-docker.pkg.dev
    

    Windows

    次のコマンドを実行します。

    helm registry login -u KEY-TYPE --password-stdin https://LOCATION-docker.pkg.dev < KEY-FILE
    

    ここで

    • KEY-TYPE は次のいずれかです。
      • ファイルの作成時に提供された JSON 形式のサービス アカウント鍵を使用している場合は、_json_key
      • _json_key_base64 を使用する場合、ファイルの内容のすべてを base64 でエンコードします。
    • KEY-FILE は、JSON 形式のサービス アカウント鍵ファイルの名前です。
    • LOCATION は、イメージが保存されているリポジトリのリージョンまたはマルチリージョンののロケーションです。

これで Helm が Artifact Registry で認証されるようになりました。

次のステップ