Google App Engine防火墙和内部访问权限

Luc*_*cas 8 google-app-engine firewall google-cloud-platform

我有两个服务在Google App Engine上运行(flex,同一个项目),我想要一个服务使用HTTPS调用另一个服务.

最重要的是,我设置了防火墙,只允许0.1.0.4010.0.0.1.

我也在X-Appengine-Inbound-Appid请求中设置标题.

不幸的是,我收到了"403 Access is is off"错误(在禁用防火墙时会消失).

现在,我正在使用xxx.appspot.comURL来调用服务.我应该使用一些内部URL吗?似乎防火墙将请求视为外部请求.

谢谢!

A.Q*_*eue 1

在告诉您如何允许来自不同 App Engine 服务的请求的页面上,据说 IP0.1.0.4010.0.0.1是您必须考虑的 IP,但不是唯一的 IP:

要控制来自其他 App Engine 应用程序或服务的请求的访问,您可能需要创建规则以适应用于服务间通信的 IP 地址。如果您的应用程序与 App Engine 中的其他应用程序或服务通信,则必须考虑如何处理来自以下 IP 地址的请求:...(简短地说:0.1.0.4010.0.0.1

为了允许来自不同灵活服务的传入请求,您可以阅读此答案

关于X-Appengine-Inbound-Appid标头,当 App Engine 标准服务向不同的 Google 标准或灵活服务发出请求时,它们会自动设置,但您的应用程序无法添加标头,因为当您自行设置标头或当出于安全原因请求来自 GCP 外部时,根据

设置

为了看看发生了什么,我创建了两个 App Engine Flex 服务 A 和 B。Cron 会向 A 发送一个请求,然后 A 会向 B 发送一个请求。A 和 B 都会打印出它们之间所有交互的标头。这些打印输出可以在 Stackdriver Logging 中读取。

观察结果

当默认防火墙规则设置为允许时

  • 对 A 的 Cron 请求具有以下标头
X-Appengine-Cron: true
X-Appengine-Queuename: __cron
X-Forwarded-For: 10.0.0.1, 10.0.0.1
Run Code Online (Sandbox Code Playgroud)
  • B 给 A 的答案有以下标题:
X-Forwarded-For: xxx.xxx.xxx.xxx, yyy.yyy.yyy.yyy
Run Code Online (Sandbox Code Playgroud)

当默认防火墙规则设置为拒绝时

  • 事实证明,如果被阻止,那么 cron 作业就会失败,这与本指南所说的10.0.0.1相反:

即使默认规则设置为拒绝,任务队列和 Cron 流量也将被防火墙允许。

  • 仅当 App Engine 防火墙允许 xxx.xxx.xxx.xxx(来自灵活实例的 IP)时,来自 A 的请求才会到达 B。