配置 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。

App Engine 默认服务账号

默认情况下,系统自动创建的 PROJECT_ID@appspot.gserviceaccount.com 服务账号在项目中具有 Editor 角色。如果您使用系统自动创建的 PROJECT_ID@appspot.gserviceaccount.com 服务账号部署 App Engine 应用,则应用可以访问项目中的所有资源。

对于系统自动创建的 PROJECT_ID@appspot.gserviceaccount.com 服务账号,如果您使用组织政策限制条件来阻止自动授予默认的 Editor 角色,则必须手动更新相应角色。您授予 App Engine 默认服务账号的角色需要能够授权应用访问其所需的资源。如需了解如何向服务账号和其他主账号授予角色,请参阅管理对服务账号的访问权限

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