首页 > 解决方案 > 从 Google Compute Engine 到 Appengine Standard 的 HTTP 请求

问题描述

是否可以从 Google Compute Engine GCE 向 Google AppEngine GAE 发出安全的 HTTP 请求,而无需使用服务帐户并在 GAE 服务上启用端点服务(代理)?我们的大多数后端 HTTP 处理程序不需要启用端点服务代理,因为请求都是内部的,而不是来自公众的。我们的公共 API 使用计算引擎端点服务。

handlers:
- url: /securehandler/.*
  script: main.app
  login: admin

https://cloud.google.com/appengine/docs/standard/go/config/appref#handlers_element

"注意:对于 App Engine 为其设置适当的 X-Appengine 特殊标头的内部请求,也满足管理员登录限制。例如,cron 计划任务满足管理员限制,因为 App Engine 设置了 HTTP 标头 X-AppEngine-Cron: true “

https://cloud.google.com/appengine/docs/standard/go/appidentity/

“向其他 App Engine 应用声明身份

如果您想确定向您的 App Engine 应用发出请求的 App Engine 应用的身份,您可以使用请求标头 X-Appengine-Inbound-Appid。此标头由 URLFetch 服务添加到请求中,用户不可修改,因此它安全地指示请求应用程序的 ID(如果存在)。

在您的应用程序处理程序中,您可以通过读取 X-Appengine-Inbound-Appid 标头并将其与允许发出请求的 ID 列表进行比较来检查传入 ID。”

显然,在 GCE 中使用 Go 客户端发出 HTTP 请求时,没有设置 X-AppEngine 和 X-Appengine-Inbound-Appid 标头。

编辑:

如果登录设置为必需,默认服务帐户是否会进行身份验证?

标签: google-app-enginegoogle-compute-engine

解决方案


如果您从 GCE 发出 HTTP 请求,它将不包含任何凭据,因此不会显示为已登录。GAE 不提供 API 调用通过 login:required 的机制。

GAE 确实提供身份验证作为Cloud Endpoints的一部分。您可以使用它来验证来自 GCE 的请求。


推荐阅读