配置 App Engine 服务账号

App Engine 应用需要有服务账号才能访问其他 Google Cloud 服务和执行任务。

App Engine 中有两种服务账号,即应用级默认服务账号和版本特定服务账号,您可以将自己 Cloud 项目中的任何服务账号指定为任一种服务账号:

  • 应用级默认服务账号 - 如果您未配置“版本特定服务账号”,则此服务账号将用于所有已部署的服务。当您最初在 Cloud 项目中部署服务时,您可以选择分配您已创建好的服务账号,也可以使用系统自动创建的默认服务账号。例如,App Engine 默认服务账号 (PROJECT_ID@appspot.gserviceaccount.com)。

  • 版本特定服务账号:配置为已部署服务特定版本的身份的服务账号。部署现有版本或新版本时,您都可以指定一个服务账号来作为该版本的身份。例如,如果某个版本需要的权限与应用级默认服务账号不同,您便可以分配该版本特定的服务账号。

查看您配置的服务账号

如需查看当前应用级默认服务账号,请运行 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. 创建应用部分,从身份和 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 服务账号。

根据您的组织政策配置,默认服务账号可能会自动获得项目的 Editor 角色。我们强烈建议您通过强制执行 iam.automaticIamGrantsForDefaultServiceAccounts 组织政策限制条件来停用自动角色授予功能。如果您的组织是在 2024 年 5 月 3 日之后创建的,则默认情况下会强制执行此限制条件。

如果您停用自动角色授予功能,则必须决定向默认服务账号授予哪些角色,然后自行授予这些角色

如果默认服务账号已具有 Editor 角色,我们建议您将 Editor 角色替换为权限较少的角色。如需安全地修改服务账号的角色,请使用 Policy Simulator 查看更改的影响,然后授予和撤消相应的角色

如需了解如何向服务账号和其他主账号授予角色,请参阅管理对项目、文件夹和组织的访问权限

如需了解如何修改权限以及删除和恢复服务账号,请参阅创建和管理服务账号