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
替换为您创建的服务的名称。
控制台
- 前往控制台中的 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。
控制台
转到 App Engine 页面:
创建 Google Cloud 项目。
在创建应用部分,从身份和 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 服务账号。
根据您的组织政策配置,默认服务账号可能会自动获得项目的 Editor 角色。我们强烈建议您通过强制执行 iam.automaticIamGrantsForDefaultServiceAccounts
组织政策限制条件来停用自动角色授予功能。如果您的组织是在 2024 年 5 月 3 日之后创建的,则默认情况下会强制执行此限制条件。
如果您停用自动角色授予功能,则必须决定向默认服务账号授予哪些角色,然后自行授予这些角色。
如果默认服务账号已具有 Editor 角色,我们建议您将 Editor 角色替换为权限较少的角色。如需安全地修改服务账号的角色,请使用 Policy Simulator 查看更改的影响,然后授予和撤消相应的角色。
如需了解如何向服务账号和其他主账号授予角色,请参阅管理对项目、文件夹和组织的访问权限。
如需了解如何修改权限以及删除和恢复服务账号,请参阅创建和管理服务账号。