仅限 Firebase 服务器访问 Google 云虚拟机

Restrict access to Google Cloud VM to only Firebase server

我有一个 Google 云 VM 实例 运行 一个 REST API 服务器。

我想删除对微服务 VM 的所有 public 访问权限,我只希望 Firebase - 代表我的前端服务器能够访问 VM 上的微服务服务器。

我的想法是阻止对 VM 的所有访问并在内部虚拟专用网络中分配一个 IP,以便 Firebase 服务器可以访问它。

我在这里开始研究 VPC(虚拟专用连接器): https://firebase.google.com/docs/storage/gcp-integration

然而,文档不是很好,它是关于 Google 云存储的。

是否可以使用 Firebase 和 Google 云 VM 实例实现此功能?

您在这里可以做的是使用 JSON Web 令牌 (JWT),一个签名的 JWT。签名的秘密将存在于您的服务器端和 Firebase Functions 上。最佳做法是将您的秘密存储在 Google Cloud KMS 中,无论何时您需要该秘密,都可以从那里访问它。

让我简要解释一下这个过程,以及为什么我认为它是您的最佳选择。

对于名为“Host1”(Firebase 服务器)的计算引擎和名为“VM1”(后端服务器)的计算引擎实例之外的系统 运行,VM1 可以连接到 Host1 并验证身份该实例具有以下过程:

  • VM1 通过安全连接建立到 Host1 的安全连接 您选择的协议,例如 HTTPS。
  • VM1 从元数据服务器请求其 unique identity token 并且 指定令牌的受众。在这个例子中,观众 value 是 Host1 的 URI。对元数据服务器的请求 包含受众 URI,以便 Host1 稍后可以检查该值 在令牌验证步骤中。
  • Google 以 JWT 格式生成新的唯一实例身份令牌 并将其提供给VM1。令牌的有效载荷包括几个 有关实例的详细信息,还包括受众 URI。 阅读 令牌内容 获取令牌内容的完整描述。
  • VM1 通过现有的安全网络将身份令牌发送到 Host1 联系。 Host1解码身份token获取token header 和负载值。
  • Host1 verifies that the token is signed by Google 通过检查 受众价值并根据 public Google certificate.
  • 如果令牌有效,Host1 继续传输并且 完成后关闭连接。 Host1 和任何其他 系统应该为任何后续连接请求一个新的令牌 VM1.

详情请参考Verifying the instance identity documentation

  • 第 1 步:按照 [1]
  • 中的以下步骤在 Google 云中创建自定义模式私有 VPC 网络
  • 第 2 步:Select 您现有的 Google 云 VM 实例,并按照 [2]
  • 中的以下步骤将其配置为具有私有 IP
  • 第 3 步:在 Google 云中创建无服务器 VPC 访问连接器 按照 [3]
  • 中的步骤操作控制台
  • 第 4 步:编辑您的云功能以添加我们在其中创建的连接器 按照 [4]
  • 中的步骤进行第 3 步
  • 第 5 步:要将连接器添加到 Firebase 函数,请遵循 [5]
  • 中的 Whosebug 答案(及其评论)

[1]https://cloud.google.com/vpc/docs/using-vpc#create-custom-network [2]https://cloud.google.com/compute/docs/ip-addresses/reserve-static-internal-ip-address#how_to_reserve_a_static_internal_ip_address [3]https://cloud.google.com/functions/docs/networking/connecting-vpc#create-connector [4]https://cloud.google.com/vpc/docs/configure-serverless-vpc-access#functions [5]