App Engine サービス アカウントを構成する

App Engine のアプリケーションで他の Google Cloud サービスにアクセスしてタスクを実行するには、サービス アカウントが必要です。

App Engine には 2 種類のサービス アカウントがあり、Cloud プロジェクトのサービス アカウントは、アプリレベルのデフォルト サービス アカウント、またはバージョンごとのサービス アカウントとして機能するように割り当てることができます。

  • アプリレベルのデフォルト サービス アカウント - このサービス アカウントは、「バージョンごとのサービス アカウント」を構成していない場合、デプロイされたすべてのサービスに使用されます。自身で作成したサービス アカウントを割り当てるか、または Cloud プロジェクトにサービスを最初にデプロイしたときに自動作成されたデフォルト サービス アカウントを使用することができます。たとえば、App Engine のデフォルト サービス アカウント(PROJECT_ID@appspot.gserviceaccount.com)です。

  • バージョンごとのサービス アカウント - デプロイされたサービスの特定のバージョンの ID として構成されたサービス アカウントです。既存のバージョンまたは新しいバージョンをデプロイするときに、そのバージョンの ID として機能するサービス アカウントを指定できます。たとえば、アプリレベルのデフォルト サービス アカウントとは異なる権限がバージョンに必要な場合に、そのバージョンに固有のサービス アカウントを割り当てることができます。

構成したサービス アカウントを表示する

現在のアプリレベルのデフォルト サービス アカウントを表示するには、gcloud app describe コマンドを実行します。

デプロイされたバージョンで使用されるサービス アカウントを表示するには、次のように操作します。

gcloud

gcloud app versions describe コマンドを実行します。

  gcloud app versions describe VERSION_ID --service=SERVICE_NAME

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

  • VERSION_ID はバージョンの ID に置き換えます。
  • SERVICE_NAME は作成したサービスの名前に置き換えます。

コンソール

  1. コンソールで、App Engine の [バージョン] タブに移動します。[バージョン] に移動
  2. 次のような、App Engine のバージョン固有のサービス アカウントのメールアドレスを見つけます。SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com

アプリレベルのデフォルト サービス アカウントを割り当てる

デフォルトでは、アプリレベルのデフォルト サービス アカウントは、自動作成された PROJECT_ID@appspot.gserviceaccount.com サービス アカウントです。Google Cloud CLI、Google Cloud コンソール、または Admin API を使用して、アプリレベルのデフォルト サービス アカウントとして機能する別のサービス アカウントを割り当てることができます。

アプリの作成時にアプリレベルのデフォルト サービス アカウントを指定する

App Engine でアプリケーションを最初に作成するときに、自身で作成したサービス アカウントを割り当てるか、自動作成された PROJECT_ID@appspot.gserviceaccount.com サービス アカウントをデフォルトとして使用するかを選択できます。

App Engine のアプリケーションを作成し、アプリレベルのデフォルト サービス アカウントを割り当てるには、次のいずれかを使用します。

gcloud

gcloud app create コマンドを実行します。

gcloud app create --service-account=SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com

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

  • SERVICE_ACCOUNT_NAME は作成したサービス アカウントの名前に置き換えます。
  • PROJECT_ID はサービス アカウントを割り当てる Google Cloud プロジェクトの ID に置き換えます。

コンソール

  1. [App Engine] ページに移動します。

    App Engine に移動

  2. Google Cloud プロジェクトを作成します。

  3. [アプリの作成] セクションの [ID と API へのアクセス] からサービス アカウントを選択します。

アプリのアプリレベルのデフォルト サービス アカウントを更新する

アプリケーションのアプリレベルのデフォルト サービス アカウントを更新するには、次のいずれかを使用して新しいサービス アカウントを割り当てます。

gcloud

gcloud app update コマンドを実行します。

    gcloud app update --service-account=SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com

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

  • SERVICE_ACCOUNT_NAME は作成したサービス アカウントの名前に置き換えます。
  • PROJECT_ID はサービス アカウントを割り当てる Google Cloud プロジェクトの ID に置き換えます。

これ以降にデプロイする各バージョンでは、バージョン固有のサービス アカウントを明示的に割り当てない限り、新しいアプリレベルのデフォルト サービス アカウントが使用されます。

コンソール

  1. コンソールで App Engine の [アプリケーション設定] タブに移動し、[アプリケーション設定を編集] をクリックします。

    [アプリケーション設定] に移動

  2. [サービス アカウントを選択] からアプリレベルのデフォルト サービス アカウントを選択し、[保存] をクリックします。

    [アプリケーション設定] タブにリダイレクトされます。このタブには、次のような更新したアプリレベルのデフォルト サービス アカウントのメールアドレスが表示されます。SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com

    これ以降にデプロイする各バージョンでは、バージョン固有のサービス アカウントを明示的に割り当てない限り、新しいアプリレベルのデフォルト サービス アカウントが使用されます。

バージョン固有のサービス アカウントでデプロイする

バージョン固有のサービス アカウントは、新しいバージョンのデプロイ中にのみ設定できます。バージョン固有のサービス アカウントを使用すると、実行される特定のタスクに基づいて 各アプリケーション バージョンに異なる権限を付加できるため、権限を必要以上に付与するのを避けることができます。

アプリケーションをデプロイする前に、既存のサービス アカウントが必要です。バージョン固有のサービス アカウントは、アプリケーションをデプロイするプロジェクトと同じプロジェクト内に存在する必要があります。

2024 年 5 月 15 日以降、Container Registry の使用歴がないGoogle Cloud プロジェクトの gcr.io ドメインのイメージは、Artifact Registry によってホストされます。この日以降に作成された新しいプロジェクトに既存のアプリケーションをデプロイする場合、サービス アカウントにアプリのデプロイに必要な権限がない可能性があります。必要な権限を付与するには、App Engine へのデプロイをご覧ください。

バージョン固有のサービス アカウントを設定する

gcloud

gcloud app deploy コマンドを実行します。

  gcloud app deploy --service-account=SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com

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

  • SERVICE_ACCOUNT_NAME は作成したサービス アカウントの名前に置き換えます。
  • PROJECT_ID はサービス アカウントを割り当てる Google Cloud プロジェクトの ID に置き換えます。バージョン固有のサービス アカウントは、アプリケーションをデプロイするプロジェクトと同じプロジェクト内に存在する必要があります。

app.yaml

app.yaml ファイルで、service_account 要素を追加してサービス アカウントを指定します。

service_account: SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com

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

  • SERVICE_ACCOUNT_NAME は作成したサービス アカウントの名前に置き換えます。
  • PROJECT_ID はサービス アカウントを割り当てる Google Cloud プロジェクトの ID に置き換えます。バージョン固有のサービス アカウントは、アプリケーションをデプロイするプロジェクトと同じプロジェクト内に存在する必要があります。

appengine-web.xml

Java ランタイムを使用している場合に、App Engine の以前のバンドル サービスを含めるには、appengine-web.xml ファイルに <service-account> 要素を追加してサービス アカウントを指定します。

<service-account>SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com</service-account>

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

  • SERVICE_ACCOUNT_NAME は作成したサービス アカウントの名前に置き換えます。
  • PROJECT_ID はサービス アカウントを割り当てる Google Cloud プロジェクトの ID に置き換えます。バージョン固有のサービス アカウントは、アプリケーションをデプロイするプロジェクトと同じプロジェクト内に存在する必要があります。

App Engine のデフォルト サービス アカウント

App Engine を使用すると、デフォルトの App Engine サービス アカウントが自動的に作成されます。

組織のポリシーの構成によっては、デフォルト サービス アカウントにプロジェクトに対する編集者のロールが自動的に付与される場合があります。iam.automaticIamGrantsForDefaultServiceAccounts 組織ポリシー制約を適用して、自動的なロール付与を無効にすることを強くおすすめします。2024 年 5 月 3 日以降に組織を作成した場合、この制約はデフォルトで適用されます。

自動ロール付与を無効にする場合、デフォルト サービス アカウントに付与するロールを決定し、これらのロールを付与する必要があります。

デフォルト サービス アカウントにすでに編集者ロールが設定されている場合は、編集者ロールを権限の低いロールに置き換えることをおすすめします。サービス アカウントのロールを安全に変更するには、Policy Simulator を使用して変更の影響を確認してから、適切なロールを付与または取り消す操作を行います。

サービス アカウントや他のプリンシパルにロールを付与する方法については、プロジェクト、フォルダ、組織に対するアクセス権の管理をご覧ください。

2024 年 5 月 15 日以降、Container Registry の使用歴がないGoogle Cloud プロジェクトで gcr.io ドメインのイメージは、Artifact Registry によってホストされます。この日以降に作成された新しいプロジェクトに既存のアプリケーションをデプロイする場合、サービス アカウントにアプリのデプロイに必要な権限がない可能性があります。必要な権限を付与するには、App Engine へのデプロイをご覧ください。

権限の変更、サービス アカウントの削除、復元については、サービス アカウントの作成と管理をご覧ください。