区域 ID
REGION_ID
是 Google 根据您在创建应用时选择的区域分配的缩写代码。此代码不对应于国家/地区或省,尽管某些区域 ID 可能类似于常用国家/地区代码和省代码。对于 2020 年 2 月以后创建的应用,REGION_ID.r
包含在 App Engine 网址中。对于在此日期之前创建的现有应用,网址中的区域 ID 是可选的。
详细了解区域 ID。
安全性是 Google Cloud 的核心功能,但您仍需采取一些措施来保护 App Engine 应用并识别漏洞。
您可以借助以下功能来确保 App Engine 应用的安全。如需详细了解 Google 安全模型以及可以采取哪些措施来保护 Google Cloud 项目,请参阅 Google Cloud Platform 安全性。
HTTPS 请求
使用 HTTPS 请求安全访问 App Engine 应用。您可以使用以下选项,具体取决于应用的配置方式:
appspot.com
网域- 使用
https
网址前缀向 Google 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
配置参考文档以了解详情。
访问权限控制
在每个 Google 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 应用的网络访问。在网络级层,默认情况下,互联网上的任何资源都能够访问 App Engine 应用的 appspot 网址或者在 App Engine 中设置的自定义网域。例如,appspot.com
网址可以采用以下格式:SERVICE_ID.PROJECT_ID.REGION_ID.r.appspot.com
。
您可以通过为入站流量指定不同的设置来更改此默认设置。所有入站流量路径(包括默认 appspot.com
网址)都受入站流量设置的约束。入站流量是在服务级层设置的。
可用的入站流量设置
您可以使用以下设置:
设置 | 说明 |
---|---|
内部 |
限制性最高。允许来自附加到项目的 VPC 网络的资源的请求,例如:
appspot.com 网址访问您的服务也是如此。来自其他来源(包括互联网)的请求无法通过 appspot.com 网址或自定义网域访问您的服务。不支持多租户,即同一项目中的多个信任网域。 |
内部和 Cloud Load Balancing | 允许来自以下资源的请求:
appspot.com 网址的请求会绕过外部应用负载均衡器,因此此设置会阻止外部请求到达 appspot.com 网址。
|
全部 |
限制性最低允许所有请求,包括直接从互联网发送到 appspot.com 网址的请求。 |
访问内部服务
需要注意以下几点:
对于来自共享 VPC 的请求,仅当 App Engine 应用部署在共享 VPC 宿主项目中时,流量才会被视为内部流量。如果 App Engine 应用部署在共享 VPC 服务项目中,则只有来自应用自身项目拥有的网络的流量才是内部流量。所有其他流量(包括来自其他共享 VPC 的流量)均为外部流量。
访问内部服务时,请像平常一样使用它们的公开网址(即默认
appspot.com
网址或 App Engine 中设置的自定义网域)来调用它们。对于来自 Compute Engine 虚拟机实例或在同一项目内的 VPC 网络中运行的其他资源的请求,无需进一步设置。
对于来自其他 App Engine 服务或来自同一项目中的 Cloud Run 或 Cloud Run functions 的请求,请将服务或函数连接到 VPC 网络,并通过连接器路由所有出站流量,具体请参阅连接到共享 VPC 网络。
来自同一项目中 VPC 网络内资源的请求将归类为内部请求,即使这些资源具有公共 IP 地址也是如此。
来自通过 Cloud VPN 连接到 VPC 网络的本地资源的请求会被视为
internal
。
查看入站流量设置
控制台
前往“App Engine 服务”页面。
找到入站流量列。对于每项服务,此列中的值会将入站流量设置显示为以下项之一:全部(默认)、内部 + 负载均衡或内部。
gcloud
如需使用 gcloud CLI 查看服务的入站流量设置,请运行以下命令:
gcloud app services describe SERVICE
将 SERVICE 替换为服务的名称。
例如,如需查看默认服务运行的入站流量设置和其他信息,请运行以下命令:
gcloud app services describe default
修改入站流量设置
控制台
前往“App Engine 服务”页面。
选择您要修改的服务。
点击修改入站流量设置。
从菜单中选择所需的入站流量设置,然后点击保存。
gcloud
如需使用 gcloud CLI 更新服务的入站流量设置,请运行以下命令:
gcloud app services update SERVICE --ingress=INGRESS
您需要进行如下替换:
- SERVICE:您的服务的名称。
- INGRESS:要应用的入站流量控制。
all
、internal-only
或internal-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
软件包的任何显式使用。如果使用 urlfetch
库,则系统会忽略出站流量设置,并且请求不会通过无服务器 VPC 访问通道连接器进行路由。
如需配置 App Engine 服务的出站流量行为,请执行以下操作:
将
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
替换为您的 Google Cloud 项目 ID - 将
REGION
替换为连接器所在的区域 - 将
CONNECTOR_NAME
替换为连接器的名称 - 将
EGRESS_SETTING
替换为以下项之一:
- 将
部署该服务:
gcloud app deploy
Security Scanner
为了发现漏洞,Google Cloud Web Security Scanner 会抓取您的 App Engine 应用,追踪从起始网址可达的所有链接,并尝试执行尽可能多的用户输入和事件处理程序。
您必须是 Google Cloud 项目的所有者,才能使用 Security Scanner。如需详细了解如何分配角色,请参阅设置访问权限控制。
您可以从 Google Cloud 控制台运行安全扫描,以识别 App Engine 应用中的安全漏洞。如需详细了解如何运行 Security Scanner,请参阅使用 Web Security Scanner。