我有一个 django 应用程序作为应用程序引擎运行,这是一项我只希望人们通过我的 VPN 访问的服务,所以我为我的应用程序制定了一些防火墙规则
否认* 允许 0.1.0.1 允许 0.1.0.2 允许0.1.0.2/32 允许(运行VPN服务的计算引擎的IP)
但现在我必须每天运行一些代码,我首先做的是,只需使用云调度程序来调用我的应用程序引擎的端点,效果很好!直到通话时间太长,10 分钟后超时。
然后我阅读了有关云任务的内容,并发现我必须创建一个推送队列,这样我就做到了。
我现在在云调度程序中有 1 个 cron 作业,每天调用一个端点,然后将内容(分成更小的部分)添加到推送队列中。
问题来了......
我的推送队列现在包含很多任务,每个任务都尝试前往应用程序引擎上的端点来完成其部分工作,但获得状态:“PERMISSION_DENIED”。
我尝试删除防火墙规则(拒绝*),它似乎是这样工作的。我似乎找不到任何方法来允许推送队列访问应用程序引擎,并且该服务不是我想要公开的
首先,我们需要允许 IP 范围
0.1.0.2/32
,因为它是 App Engine 用于请求的范围(您已经有规则)[1][2]。
您可以做的是为该 IP 设置较高的优先级,为
Deny *
[3] 设置较低的优先级。
防火墙规则优先级是 0 到 65535 之间的整数(含 0 和 65535)。较小的整数表示较高的优先级。如果您在创建规则时未指定优先级,则会为其分配优先级 1000。
[2]。 https://cloud.google.com/tasks/docs/creating-appengine-tasks#firewall_rules
[3]。 https://cloud.google.com/firewall/docs/firewalls#priority_order_for_firewall_rules
1)
如果您可以创建任务,App Engine 任务(这意味着它们由您的 App Engine 应用程序调用和运行),那么根据 文档,您只需要 2 个防火墙规则
允许(运行VPN服务的计算引擎的IP)
否认*
这是因为文档说
使用 App Engine HTTP 的 Cloud Scheduler 作业以及 Cloud Tasks(包括 App Engine 任务队列)0.1.0.2/32 中的 App Engine 任务,如果设置为拒绝,则绕过默认防火墙规则
粗体部分表示来自 Cloud Tasks 中 App Engine 任务的流量不会被
deny * default rule
阻止
这意味着,如果您将默认规则设置为拒绝,则发往 App Engine 标准环境的某些服务的请求不会被阻止。 这些都是应用程序自己的配置中请求的流量类型,或从同一应用程序发送的流量。以这种方式绕过防火墙规则的请求还包括 Cloud Tasks 中的 App Engine 任务(包括 App Engine 任务队列)。
2)
如果您的任务已经是 App Engine 任务,仍然尝试使用我提到的 2 个防火墙规则,看看是否可以解决问题