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

时间:2018-04-06 04:49:39

标签: google-app-engine google-cloud-platform firewall

我在Google App Engine上运行了两项服务(flex,同一项目),我希望使用HTTPS调用另一项服务。

除此之外,我设置了防火墙,只允许enter code here class Program { [STAThread] static void Main(string[] args) { HtmlWeb web = new HtmlWeb(); string url = "https://fast.com/en/"; HtmlDocument doc = web.LoadFromBrowser(url, html => { return !html.Contains ("<div class=\"speed-results-container succeeded\" id=\"speed_value\" ></div>"); }); var t1 = doc.DocumentNode.SelectSingleNode ("//div[@id='speed-value']").InnerText; Console.WriteLine($"{t1}"); } } 0.1.0.40

我还在请求中设置10.0.0.1标头。

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

现在,我正在使用X-Appengine-Inbound-Appid网址来调用该服务。我应该使用一些内部URL吗?似乎防火墙将请求视为外部请求。

谢谢!

2 个答案:

答案 0 :(得分:2)

the page上,它告诉您如何允许来自不同App Engine服务的请求,表示IP,0.1.0.4010.0.0.1是您必须考虑的,但不仅仅是

  

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

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

关于X-Appengine-Inbound-Appid标题,当App Engine标准服务向其他Google Standard或Flexible服务发出请求时,它们会自动设置,但是您的应用无法添加它,因为Google会自动删除它们根据{{​​3}},thisthis,出于安全原因,当您自行设置或来自GCP外部的请求时,您可以自行设置它们。

设置

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

观察

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

  • Cron对A的请求有以下标题
X-Appengine-Cron: true
X-Appengine-Queuename: __cron
X-Forwarded-For: 10.0.0.1, 10.0.0.1
  • B到A的答案有以下标题:
X-Forwarded-For: xxx.xxx.xxx.xxx, yyy.yyy.yyy.yyy

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

  • 事实证明,如果10.0.0.1被阻止,则cron作业失败,这与this所说的相反:
  

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

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

答案 1 :(得分:1)

我们的团队遇到了类似的问题。除了其他App Engine服务(其中一些驻留在不同的GCP项目中)之外,我们拒绝所有外部访问。允许通过防火墙从其他App Engine服务进行访问的唯一方法是让使用方服务使用URL提取服务,并按照您提到的方式传入appspot.com URL。您还可以将 followRedirects 设置为false。

但是,在您的情况下,这是行不通的。据此:https://cloud.google.com/appengine/docs/flexible/nodejs/glossary仅适用于Java,Python,PHP和Go。在这种情况下,您只需为0.1.0.40和10.0.0.1。添加一个白名单规则。

如果您不想在Google Compute Engine中创建代理服务(如here所述),则必须添加一系列非常大的CIDR范围,如下所示:https://cloud.google.com/appengine/kb/