应用安全概览

地区 ID

REGION_ID 是 Google 根据您在创建应用时选择的区域分配的缩写代码。此代码不对应于国家/地区或省,尽管某些区域 ID 可能类似于常用国家/地区代码和省代码。对于 2020 年 2 月以后创建的应用,REGION_ID.r 包含在 App Engine 网址中。对于在此日期之前创建的现有应用,网址中的区域 ID 是可选的。

详细了解区域 ID

安全性是 Google Cloud 的核心功能,但您仍需采取一些措施来保护 App Engine 应用并识别漏洞。

您可以借助以下功能来确保 App Engine 应用的安全。如需详细了解 Google 安全模型以及可以采取哪些措施来保护 Cloud 项目,请参阅 Google Cloud Platform 安全性

HTTPS 请求

使用 HTTPS 请求安全访问 App Engine 应用。您可以使用以下选项,具体取决于应用的配置方式:

appspot.com网域
  • 使用 https 网址前缀向您的 Cloud 项目的 default 服务发送 HTTPS 请求,例如:
    https://PROJECT_ID.REGION_ID.r.appspot.com
  • 如需定位 App Engine 应用中的特定资源,请使用 -dot- 语法分隔您要定位的各资源,例如:
    https://VERSION-dot-SERVICE-dot-PROJECT_ID.REGION_ID.r.appspot.com

  • 如需将 HTTP 网址转换为 HTTPS 网址,请将各资源之间的英文句点替换为 -dot-,例如:
    http://SERVICE_ID.PROJECT_ID.REGION_ID.r.appspot.com
    https://SERVICE_ID-dot-PROJECT_ID.REGION_ID.r.appspot.com

如需详细了解 HTTPS 网址以及如何针对资源,请参阅请求的路由方式

自定义网域

如需使用自定义网域发送 HTTPS 请求,可使用由 App Engine 预配的托管式 SSL 证书。如需了解详情,请参阅使用 SSL 保护自定义网域

应用处理程序

如需为应用的处理程序强制使用 HTTPS,您可以为 app.yaml 中的每个处理程序指定 secure: always 元素,例如:

handlers:
- url: /.*
  script: auto
  secure: always
  redirect_http_response_code: 301

如果使用 secure: always,则所有 HTTP 流量都将重定向到路径相同的 HTTPS 网址,请参阅 app.yaml 配置参考文档以了解详情。

访问权限控制机制

在每个 Cloud 项目中,设置访问权限控制以确定哪些人可以访问项目中的服务(包括 App Engine)。您可以为不同的帐号分配不同的角色,以确保每个帐号仅具有支持您的应用所需的权限。如需了解详情,请参阅设置访问权限控制

App Engine 防火墙

借助 App Engine 防火墙,您可以通过一组规则来允许或拒绝来自指定 IP 地址范围的请求,从而控制对 App Engine 应用的访问。您不需要为防火墙所屏蔽的流量或带宽付费。您可以按以下方式创建防火墙:

仅允许来自特定网络的流量
确保只有特定网络中的特定 IP 地址范围才能访问您的应用。例如,通过创建规则,您可在应用的测试阶段仅允许公司专用网络中的 IP 地址范围访问您的应用。然后,您可以创建和修改防火墙规则,以此控制整个发布流程的访问范围,使您的应用在公开发布之前仅可供公司内部或外部的特定组织进行访问。
仅允许来自特定服务的流量
确保发送到 App Engine 应用的所有流量都先通过特定服务进行代理。例如,如果您使用第三方 Web 应用防火墙 (WAF) 来代理定向到您的应用的请求,则可以创建防火墙规则,拒绝 WAF 转发的请求之外的所有请求。
屏蔽存在滥用行为的 IP 地址
虽然 Google Cloud 实施了许多机制来防止攻击,您仍然可以使用 App Engine 防火墙来阻止从存在恶意企图的 IP 地址发送到您的应用的流量,或者保护您的应用免遭拒绝服务攻击和类似形式的滥用。您可以将某些 IP 地址或子网列入拒绝名单,这样,从这些地址和子网路由的请求会被拒绝,无法到达您的 App Engine 应用。

如需详细了解如何创建规则和配置防火墙,请参阅使用防火墙控制应用访问权限

入站流量控制

默认情况下,您的 App Engine 应用会接收发送至其 appspot 网址或您已为应用配置的自定义网域的所有 HTTP 请求。

您可以使用网络入站流量控制来限制流量,使应用仅接收来自特定来源的 HTTP 请求:

  • 全部:默认。应用将接收所有流量,包括从互联网发送的直接请求。

  • 内部和 Cloud Load Balancing:应用将只接收通过 Cloud Load Balancing 路由的请求或来自同一项目中 VPC 网络(包括无服务器 VPC 访问通道连接器共享 VPC,如果您使用的是这些连接器或共享 VPC)的请求。所有其他请求会被拒绝并显示 403 错误。

  • 仅限内部:应用将仅接收来自同一项目中 VPC 网络的请求。所有其他请求会被拒绝并显示 403 错误。

查看入站流量设置

控制台

  1. 前往“App Engine 服务”页面。

    转到“服务”页面

  2. 找到入站流量列。对于每项服务,此列中的值会将入站流量设置显示为以下项之一:全部(默认)、内部 + 负载平衡内部

gcloud

如需使用 gcloud CLI 查看服务的入站流量设置,请运行以下命令:

gcloud app services describe SERVICE

SERVICE 替换为服务的名称。

例如,如需查看默认服务运行的入站流量设置和其他信息,请运行以下命令:

gcloud app services describe default

修改入站流量设置

控制台

  1. 前往“App Engine 服务”页面。

    转到“服务”页面

  2. 选择您要修改的服务。

  3. 点击修改入站流量设置

  4. 从菜单中选择所需的入站流量设置,然后点击保存

gcloud

如需使用 gcloud CLI 更新服务的入站流量设置,请运行以下命令:

gcloud app services update SERVICE --ingress=INGRESS

替换:

  • SERVICE:您的服务的名称。
  • INGRESS:要应用的入站流量控制。allinternal-onlyinternal-and-cloud-load-balancing 之一。

例如:

  • 如需更新 App Engine 应用的默认服务,以仅接受来自 Cloud Load Balancing 和来自同一项目的 VPC 网络的流量:

    gcloud app services update default --ingress=internal-and-cloud-load-balancing
  • 如需更新名为“internal-requests”的服务以仅接受来自同一项目中的 VPC 网络的流量:

    gcloud app services update internal-requests --ingress=internal-only

出站流量设置

如果您使用无服务器 VPC 访问通道,则可以为 App Engine 服务指定出站流量设置。

默认情况下,只有对内部 IP 地址和内部 DNS 名称的请求会通过无服务器 VPC 访问通道连接器进行路由。您可以在 app.yaml 文件中为您的服务指定出站流量设置。

出站流量设置与 URL Fetch 服务不兼容。如果您还没有这样做,请通过使用套接字来停用 URL Fetch 默认值并停止对 urlfetch 软件包的任何显式使用。

如需配置 App Engine 服务的出站流量行为,请执行以下操作:

  1. egress_setting 特性添加到服务的 app.yaml 文件的 vpc_access_connector 字段中:

    vpc_access_connector:
      name: projects/PROJECT_ID/locations/REGION/connectors/CONNECTOR_NAME
      egress_setting: EGRESS_SETTING
    

    您需要将其中的:

    • PROJECT_ID 替换为您的 Cloud 项目 ID
    • REGION 替换为连接器所在的区域
    • CONNECTOR_NAME 替换为连接器的名称
    • EGRESS_SETTING 替换为以下项之一:
      • private-ranges-only 默认值。只有发送到 RFC 1918RFC 6598 IP 地址范围或内部 DNS 名称的请求才会路由到您的 VPC 网络。其他的所有请求都会直接路由到互联网。
      • all-traffic 来自您的服务的所有出站请求都路由到您的 VPC 网络。然后,请求受到 VPC 网络的防火墙、DNS 和路由规则的约束。 请注意,将所有出站请求路由到您的 VPC 网络会增加无服务器 VPC 访问通道连接器处理的出站流量,并可能产生费用
  2. 部署该服务:

    gcloud app deploy
    

Security Scanner

为了发现漏洞,Google Cloud Web Security Scanner 会抓取您的 App Engine 应用,追踪从起始网址可达的所有链接,并尝试执行尽可能多的用户输入和事件处理程序。

您必须是 GCP 项目的所有者,才能使用 Cloud Scanner。如需详细了解如何分配角色,请参阅设置访问权限控制

您可以从 Google Cloud Console 运行安全扫描,以识别 App Engine 应用中的安全漏洞。如需详细了解如何运行 Security Scanner,请参阅 Security Scanner 快速入门