如何确保只有我的 Node.js 应用程序引擎中的应用程序可以连接到我的 CloudSQL 数据库?
How do I ensure that only my Node.js app in app engine can connect to my CloudSQL database?
我对后端开发和 Google 云非常陌生,我正在探索构建一个 Web 应用程序,其前端是用 React 构建的,该前端与 API 服务器(Node Express)托管在App Engine 连接到 CloudSQL 数据库。
我已经在 App Engine 上设置了 Google CloudSQL 数据库,运行 我的节点 api 服务器并成功将其连接到数据库。
我的下一步是将我的 React 前端上传到另一个 App Engine 实例,这样它就可以调用我的 API 服务器,这会将工作传递给数据库并返回。
我有两个问题:
如何确保只有我的 Node api 服务器可以访问我的 cloudsql 数据库?两者都在同一个 GCP 项目中。
如何确保只有我的 React 前端应用程序(托管在 App Engine 上)可以使用我的 api 服务器或 api 路由?
我计划在前端实施 Auth0 身份验证以验证最终用户。
Cloud SQL 为 this document
中提到的实例提供了两个级别的访问控制
1 - 实例级访问
实例级访问授权从应用程序或客户端(运行 在 App Engine 标准版或外部)或从其他 Google 云服务访问您的云 SQL 实例。
正如您所说,您在同一个项目中拥有 Cloud SQL 实例和 App Engine,因此访问级别是预先配置的,否则如果它们在不同的项目中,则您必须配置 IAM。对于 App Engine Flexible,您只需按照 this document for App Engine Standard and this document 建立连接。因此,由于实例级访问是预先配置的,因此您不必担心它,因为它只能由 App Engine 访问,前提是您不应该配置从任何其他资源到 Cloud SQL 的连接。
2 - 数据库访问
建立与实例的连接后,用户或应用程序必须使用用户帐户登录到数据库实例。作为管理 Cloud SQL 实例的一部分,您可以创建和管理用户帐户。
您必须在创建实例时设置默认用户或根用户,但您也可以创建更多用户以细粒度地控制对 Cloud SQL 实例的访问。要了解有关添加用户的更多信息,您可以参考 this document.
对于第二个问题“我如何确保只有我的 React 前端应用程序(托管在 App Engine 上)可以使用我的 api 服务器或 api 路由?” -
由于您将 App Engine 用于 React 前端和 Node Express API 服务器,我假设您在同一个项目中使用 App Engine 中的两种服务。因此,要限制对 App Engine 中 API 服务器服务的访问,您可以使用 here 中提到的入口控制。由于您正在使用一个项目,我建议您使用 --egress=internal-only
以便它只会接收从同一项目中的 VPC 网络发送的请求,而所有其他请求都会被拒绝并出现 403 错误。
我对后端开发和 Google 云非常陌生,我正在探索构建一个 Web 应用程序,其前端是用 React 构建的,该前端与 API 服务器(Node Express)托管在App Engine 连接到 CloudSQL 数据库。
我已经在 App Engine 上设置了 Google CloudSQL 数据库,运行 我的节点 api 服务器并成功将其连接到数据库。
我的下一步是将我的 React 前端上传到另一个 App Engine 实例,这样它就可以调用我的 API 服务器,这会将工作传递给数据库并返回。
我有两个问题:
如何确保只有我的 Node api 服务器可以访问我的 cloudsql 数据库?两者都在同一个 GCP 项目中。
如何确保只有我的 React 前端应用程序(托管在 App Engine 上)可以使用我的 api 服务器或 api 路由?
我计划在前端实施 Auth0 身份验证以验证最终用户。
Cloud SQL 为 this document
中提到的实例提供了两个级别的访问控制1 - 实例级访问
实例级访问授权从应用程序或客户端(运行 在 App Engine 标准版或外部)或从其他 Google 云服务访问您的云 SQL 实例。
正如您所说,您在同一个项目中拥有 Cloud SQL 实例和 App Engine,因此访问级别是预先配置的,否则如果它们在不同的项目中,则您必须配置 IAM。对于 App Engine Flexible,您只需按照 this document for App Engine Standard and this document 建立连接。因此,由于实例级访问是预先配置的,因此您不必担心它,因为它只能由 App Engine 访问,前提是您不应该配置从任何其他资源到 Cloud SQL 的连接。
2 - 数据库访问
建立与实例的连接后,用户或应用程序必须使用用户帐户登录到数据库实例。作为管理 Cloud SQL 实例的一部分,您可以创建和管理用户帐户。 您必须在创建实例时设置默认用户或根用户,但您也可以创建更多用户以细粒度地控制对 Cloud SQL 实例的访问。要了解有关添加用户的更多信息,您可以参考 this document.
对于第二个问题“我如何确保只有我的 React 前端应用程序(托管在 App Engine 上)可以使用我的 api 服务器或 api 路由?” -
由于您将 App Engine 用于 React 前端和 Node Express API 服务器,我假设您在同一个项目中使用 App Engine 中的两种服务。因此,要限制对 App Engine 中 API 服务器服务的访问,您可以使用 here 中提到的入口控制。由于您正在使用一个项目,我建议您使用 --egress=internal-only
以便它只会接收从同一项目中的 VPC 网络发送的请求,而所有其他请求都会被拒绝并出现 403 错误。