访问权限控制

您可以在 GCP 项目级别使用角色来控制访问权限。为 GCP 项目成员或服务帐号分配角色,从而确定该成员或帐号对 Google Cloud Platform 项目及其资源的访问权限级别。

在处理需求不太复杂的小型项目时,您可以使用原初角色。如需实现更精细的访问权限控制,请使用 Identity and Access Management (IAM) 角色,其中包含 App Engine 预定义角色。如需详细了解 IAM,请参阅 IAM 文档

如需了解如何分配角色,请参阅授予项目访问权限

如需详细了解预定义 IAM 角色具有哪些权限(精确到方法调用级别),请参阅 Admin API 文档中的角色

原初角色

对于 App Engine 应用,GCP 项目成员的角色还可控制用于部署和管理应用的命令行工具的操作权限。

角色 GCP Console 权限 工具权限
Owner 如需创建 App Engine 应用,必须具有此角色。该角色拥有 Viewer 和 Editor 的所有权限,还可以查看已部署的源代码、邀请用户、更改用户角色以及删除应用。 如需创建 App Engine 应用,必须具有此角色。该角色可以部署应用代码和更新所有配置。
Editor 该角色可以查看应用信息和修改应用设置。 该角色可以部署应用代码以及更新索引/队列/Cron。
Viewer 该角色可以查看应用信息。 该角色可以请求日志。

预定义 App Engine 角色

App Engine 预定义角色可为您提供更精细的访问权限控制选项。下表列出了每个角色及其目标用户。如需查看所有角色权限,请使用对照表

角色 权限 目标用户
App Engine Admin 拥有所有应用配置和设置的读取/写入/修改权限。
  • 应用所有者/管理员
  • 值班工程师
  • 系统管理员
App Engine Service Admin
  • 拥有所有应用配置和设置的只读权限。
  • 拥有服务级和版本级设置(包括流量配置)的写入权限。
  • 不能部署应用的各版本,如需了解详情,请参阅下文的职责分离
  • 发布工程师
  • DevOps 人员
  • 值班工程师
  • 系统管理员
App Engine Deployer
  • 拥有所有应用配置和设置的只读权限。
  • 拥有仅限于部署和创建新版本的写入权限。
  • 可以删除不再处理流量的旧版本。
  • 无权修改现有版本,也无权更改流量配置。

请参阅以下部署部分,详细了解所需角色。

  • 部署帐号
  • 发布工程师
App Engine Viewer 拥有所有应用配置和设置的只读权限。
  • 需要查看应用、但无需修改应用的用户。
  • 负责检查 App Engine 配置是否符合政策规定的审核人员。
App Engine Code Viewer 拥有所有应用配置、设置和已部署源代码的只读权限。
  • 需要查看应用及其源代码、但无需进行修改的用户。
  • 需要诊断生产问题的 DevOps 用户。

预定义角色比较矩阵

下表全面对比了各个预定义 App Engine 角色的权限。

权限 App Engine Admin App Engine Service Admin App Engine Deployer App Engine Viewer App Engine Code Viewer
列出所有服务、版本和实例
查看所有应用、服务、版本和实例设置
查看运行时指标,例如资源使用情况、负载信息和错误信息
查看应用源代码
部署应用的新版本
拆分或迁移流量
启动和停止版本
删除版本
删除整个服务
使用 SSH 连接到柔性环境中的虚拟机实例
关停实例
停用和重新启用 App Engine 应用
访问具有 login:admin 限制的处理程序
更新调度规则
更新 DoS 设置
更新 Cron 时间表
更新默认 Cookie 过期时间
更新引荐来源网址
更新 Email API 授权发件人

如需详细了解每个角色所授予的特定 IAM 权限,请参阅 Admin API 的角色部分。

使用预定义角色进行部署

如果用户帐号仅负责部署应用的新版本,建议为其使用 App Engine Deployer 角色。App Engine Admin 角色可作为备选,它拥有额外的管理权限(包括部署版本的权限)。

以上任一角色都能够为用户帐号授予足够的权限以使用 Admin API 部署应用。如需为用户帐号授予使用 gcloud 命令或其他 App Engine 工具的权限,您还必须为其授予 Storage Admin 角色和 Cloud Build Editor 角色。

如需详细了解如何授予必需权限,请参阅使用 IAM 角色进行部署

部署与流量路由职责分离

许多组织倾向于将部署应用版本的任务与逐渐增加新创建版本流量的任务分开,并通过不同的工作职能来完成这些任务。App Engine Deployer 和 App Engine Service Admin 角色能够实现这种分离:

  • App Engine Deployer 角色 - 用户帐号只能部署新版本和删除不再处理流量的旧版本。具有 App Engine Deployer 角色的用户帐号无权为任何版本配置流量,也无权更改应用级别设置(例如调度规则或身份验证网域)。

  • App Engine Service Admin 角色 - 用户帐号无权部署应用的新版本,也无权更改应用级别设置。但是,这些帐号有权更改现有服务和版本的属性,包括更改哪些版本可以处理流量。App Engine Service Admin 角色非常适合运营/IT 部门用于逐渐增加新部署版本的流量。

预定义角色不会得到的权限

上述预定义角色均不会获得以下权限:

  • 创建 App Engine 应用。
  • 查看和下载应用日志。
  • 在 GCP Console 中查看 Monitoring 图表。
  • 启用和停用结算功能。
  • 为 App Engine 设置每日支出限额(以前称为“预算”)和查看已花费的金额。
  • 在 Cloud Security Scanner 中运行安全扫描。
  • 访问存储在数据存储区、任务队列、Memcache、Cloud Search 或其他任何 Cloud Platform 存储产品中的配置或数据。

App Engine 服务帐号

在您创建 App Engine 应用后,系统会创建一个 App Engine 默认服务帐号并将其用作 App Engine 服务的身份。App Engine 默认服务帐号将与您的 GCP 项目关联,同时代表您在 App Engine 中运行的应用执行任务。

默认情况下,项目中的 App Engine 默认服务帐号具有 Editor 角色。这意味着,如果任何用户帐号具有足够权限来部署对 GCP 项目的更改,那么也可以运行对该项目中的所有资源具有读/写权限的代码。

适用于柔性环境的服务帐号

在 App Engine 柔性环境中,还有一个由 Google 管理的服务帐号,该帐号可代表您的应用执行特定于柔性环境的任务。如需有关此服务帐号的详细信息,请参阅适用于 App Engine 柔性环境的服务帐号

更改服务帐号权限

您可以在 GCP Console 中更改服务帐号的权限。例如,通过将 App Engine 默认服务帐号的角色从 Editor 更改为最能代表 App Engine 应用访问需求的任何其他角色,您可以将该帐号的权限降级。

如需更改服务帐号的权限,请执行以下操作:

  1. 打开 GCP Console:

    转到“权限”页面

  2. 在“成员”列表中,找到 App Engine 默认服务帐号的 ID。

    App Engine 默认服务帐号使用以下成员 ID:
    YOUR_PROJECT_ID@appspot.gserviceaccount.com

  3. 您可以使用下拉菜单修改分配给服务帐号的角色。

使用服务帐号

  • 如需重命名您的服务帐号(包括 App Engine 应用默认服务帐号)或为其创建密钥,请使用 GCP Console 中的“服务帐号”页面查看和修改您的服务帐号:

    转到“服务帐号”页面

  • 如需使用服务帐号运行 Cloud SDK 命令(包括任何 Cloud SDK 开发工具),您必须先在 Google Cloud Platform 项目中启用 Google App Engine Admin API。您可以使用 GCP Console 中的 API 库来管理 GCP 项目中的所有 API 和服务:

    转到“API 库”页面

恢复已删除的默认服务帐号

如果删除 App Engine 默认服务帐号,您的 App Engine 应用可能会崩溃,并且将无法访问 Cloud Datastore 等其他 GCP 服务。

您可以使用 gcloud beta app repair 命令恢复已删除的 App Engine 默认服务帐号:

# Set your gcloud project
gcloud config set project <project-id>

# Restore your default service account
gcloud beta app repair