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
は作成したサービスの名前に置き換えます。
Console
- コンソールで、App Engine の [バージョン] タブに移動します。[バージョン] に移動
- 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 に置き換えます。
Console
[App Engine] ページに移動します。
Google Cloud プロジェクトを作成します。
[アプリの作成] セクションの [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 に置き換えます。
これ以降にデプロイする各バージョンでは、バージョン固有のサービス アカウントを明示的に割り当てない限り、新しいアプリレベルのデフォルト サービス アカウントが使用されます。
コンソール
コンソールで App Engine の [アプリケーション設定] タブに移動し、[アプリケーション設定を編集] をクリックします。
[サービス アカウントを選択] からアプリレベルのデフォルトのサービス アカウントを選択し、[保存] をクリックします。
[アプリケーション設定] タブにリダイレクトされます。このタブには、更新したアプリレベルのデフォルト サービス アカウントのメールアドレスが表示されます。例:
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 を使用して変更の影響を確認してから、適切なロールを付与または取り消す操作を行います。
サービス アカウントや他のプリンシパルにロールを付与する方法については、プロジェクト、フォルダ、組織に対するアクセス権の管理をご覧ください。
権限の変更、サービス アカウントの削除、復元については、サービス アカウントの作成と管理をご覧ください。