security - 安全地允许 Google App Engine 访问 Google Apps 脚本的内部公司网络/服务器
问题描述
有据可查的是,Google Apps 脚本在无法访问公司内部网络/服务器的 Google App Engine 服务器上运行:
- https://developers.google.com/apps-script/reference/url-fetch/url-fetch-app
- https://cloud.google.com/appengine/kb/#static-ip
- https://developers.google.com/apps-script/guides/jdbc#using_jdbcgetconnectionurl
根据文档,如果您希望 Google Apps 脚本项目能够访问内部网络/服务器,那么您必须将 Google 的 IP 列入白名单。但我们都知道这不是最安全的选择。事实上,文档甚至是这样说的:
请注意,使用静态 IP 地址过滤不被视为安全有效的保护手段。例如,攻击者可以设置恶意 App Engine 应用程序,该应用程序可以与您的应用程序共享相同的 IP 地址范围。相反,我们建议您使用OAuth和Certs采取深度防御方法。
问题是我找不到任何文档、参考资料或关于组织应该如何最好地按照其建议行事的文章。
所以我的问题是,使用 G-Suite Enterprise 的组织如何安全地允许 Google Apps 脚本项目访问公司的内部网络?
解决方案
文档说得很清楚,因为 App Scripts 在共享的 App Engine 实例上运行,所以不可能使用 IP 进行限制,这也意味着网络能力将非常有限(即没有 VPC 对等或类似的)。因此,就像在突出显示的块中一样,他们建议仅通过 IP 限制实施身份验证。
除了身份验证,App Script 还支持使用 SSL 加密和验证服务器(示例代码)。这应该可以保护连接在通过 Internet 发送时不被窃听。
此外,您可以实现“半 IP 限制”机制,技术上称为Port Knocking,其工作原理如下:
- 首先创建一个特殊的端点,需要身份验证,接受 IP 地址作为输入。当请求时,您打开防火墙以在有限的时间内(例如 5 分钟)接受从该 IP 到您的内部网络的连接。
- 在您的应用程序脚本中,使用 URL Fetch 请求该端点,以便您的脚本实例暂时被允许访问您的网络。
当然这并不完美,因为一个 App Engine 实例同时运行许多脚本并且白名单会在设定的时间内打开,但这仍然比持续向所有 Google(App Engine)IP 开放端口要好得多。
推荐阅读
- python - 如何从另一个目录导入python文件
- c++ - 如何修复尝试在 C++ sfml 中引用已删除函数错误
- python - 熊猫任何替代方式来检查之间
- javascript - 如何在此 for 循环中包含“两个字符”,无论是两个数字、两个字母还是它们的组合?
- selenium - 使用 Selenium 模拟间歇性网络故障
- django - 如何使用卡片上的按钮更改会话值?
- python - PyMC3 无法广播正确的尺寸以进行推理
- reactjs - 使用 React、Redux 和 Express 从 MongoDB 中删除项目
- c# - Stopwatch.GetTimestamp() 在 NodeJS 中的 C# 等效项
- javascript - 正则表达式循环和电话号码