Google App Engine 阻止访问我的后端服务

Google App Engine blocking access to my backend services

在 Google App Engine 中,我有 3 个服务,1 个用于前端,2 个用于后端。

有没有办法阻止不是来自我公司域(和前端服务帐户)的帐户对我的后端服务的 http 调用,但允许所有人 http 访问我的前端服务?

我知道有防火墙选项,但这仅限于 IP 地址,我更喜欢基于用户的

如果重要,所有服务都是 python3

目前没有选项可以在单个 application/project:

中过滤特定 App Engine 服务的流量
  • App Engine Firewall 按源 IP 范围过滤,但只能为整个应用设置,不能为每个服务设置。
  • Identity-Aware Proxy 可以根据您的喜好按用户帐户过滤访问权限,但也适用于整个应用程序。另外,它只支持用户帐户,不能与服务帐户一起使用。

您可能有一个选择是将您的应用拆分为 2 个不同的项目。保持一个项目中的前端对世界开放,并通过防火墙规则限制对另一项目中后端服务的访问。

我在 GAE 的 task queues 中看到了以下内容。也许会有帮助。

如果您使用的是 python 2,在标准环境中,我认为您可以使用 app.yaml 文件中的登录处理程序元素。 您可以在 app.yaml 文件中添加以下行:

handlers:
- url: /.*
  script: worker.app
  login: admin

这会阻止其他用户访问此服务。

但根据 Google 文档,python3 无法使用相同的登录处理程序。

刚刚在 Google 文档中找到以下内容:

If a task performs sensitive operations (such as modifying data), you might want to secure the handler URL to prevent a malicious external user from calling it directly. You can prevent users from accessing task URLs by restricting access to App Engine administrators. Task requests themselves are issued by App Engine and can always target a restricted URL.

You can restrict a URL by adding the login: admin element to the handler configuration in your app.yaml file.

您也可以通过 cloud taskstask queues 调用您的后端服务(我猜两者几乎相同),以防这仅适用于云任务。

在这里找到代码用法: https://github.com/GoogleCloudPlatform/python-docs-samples/tree/6f5f3bcb81779679a24e0964a6c57c0c7deabfac/appengine/standard/taskqueue/counter

在此处查找有关处理程序的详细信息。 https://cloud.google.com/appengine/docs/standard/python/config/appref#handlers_element

在此处查找有关云任务和队列的详细信息: https://cloud.google.com/appengine/docs/standard/python/taskqueue/push/creating-handlers