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

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

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

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

アプリケーションをデプロイする前に、既存のサービス アカウントが必要です。

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

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 を使用して変更の影響を確認してから、適切なロールを付与または取り消す操作を行います。

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

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