google-cloud-platform - 如何限制对我的云功能的访问?

标签 google-cloud-platform google-cloud-functions firebase-security

我有一些云功能。我还有一个在 AppEngine 中运行的 Nodejs 服务器。我从那里调用我的云功能。目前我可以从任何地方调用我的云函数!

有什么方法可以限制对我的云功能的访问,使其仅在从 Google App Engine 上运行的服务器调用时才可用?

最佳答案

您有 2 个解决方案

  1. 第一个是使用 AndresMijares 描述的服务帐户。但是,不是要创建一个新的。事实上,如果您创建一个新的服务帐户并且希望将其与应用程序引擎一起使用,则需要生成一个服务帐户 key 文件并使用您的代码部署此 key 。它不是很安全,因为您还需要安全地存储此 secret 等等。

因此,解决方案是使用 App Engine 默认服务帐户作为此电子邮件模式

<project_ID>@appspot.gserviceaccount.com

在项目级别调用的所有函数上授予此服务帐户作为 role/cloudfunctions.invoker 的权限。


  • 第二个解决方案不如第一个解决方案那么好,但也是可能的。您可以更新您的 Cloud Functions 并设置 ingress parameter to internal 。这意味着只有来自项目中 VPC 的流量才能到达 Cloud Functions,包括项目的其他资源(例如 Compute Engine)。 -> 这就是为什么它不是一个很好的解决方案,但最终,云函数无法从任何地方调用。
  • 因此,要允许 App Engin 使用您的 VPC 调用云函数,您需要使用 serverless VPC connector 来桥接无服务器世界与您的 VPC。除了安全性较低之外,该解决方案还涉及无服务器 VPC 连接器的额外成本。


    第二个解决方案的优点是您不必更新应用程序代码即可对云函数执行安全调用。您只需更新部署配置,并且只能在内部调用函数。

    对于第一个解决方案,您需要更新代码以将安全 token 添加到请求的 header 中。它类似于 function to function authentication 。我个人不喜欢这种实现方式,因为你无法在本地测试:本地你没有元数据服务器!

    wrote an article 从那里您可以获得“避免元数据服务器”部分的灵感。


    编辑 1

    深入研究 App Engine 无服务器 VPC 连接器和 this answer 后,只有通过 Cloud Functions 或 Cloud run 才能到达“仅限内部”的 Cloud Function(或 Cloud Run)入口。 App Engine 不会在无服务器 VPC 连接器内路由公共(public)流量,因此在 App Engine 情况下无法使用第二种解决方案。

    关于google-cloud-platform - 如何限制对我的云功能的访问?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66200950/

    相关文章:

    python - 有没有办法通过 JSON key 文件本身而不是文件路径进行 Google Cloud Python 身份验证?

    javascript - Firebase 功能配置不会部署

    firebase - 在 Firebase 上获取最近创建的用户的 UID

    google-cloud-platform - 使用启动脚本时首次重新启动后无法访问虚拟机

    bash - 如何为 gcloud 启用 shell 命令补全?

    node.js - 不能在模块外使用 import 语句,TypeScript NodeJS Firebase Functions 项目

    node.js - GPT 3.5 Turbo 与 Dialogflow 集成

    firebase - 比较 firestore 中的资源和请求资源

    android - Firestore 更新失败,出现 IllegalArgumentException : Invalid data. 不支持的类型

    google-cloud-platform - 使用服务帐户进行 Google Admin SDK 身份验证