Google App Engine .Net Core 2.0应用无法访问Google Cloud SQL数据库

时间:2018-01-16 14:31:56

标签: google-app-engine .net-core google-cloud-platform google-cloud-sql app-engine-flexible

我在Google App Engine灵活环境中运行了一个dotnet core 2.0应用程序。在同一个Google项目中,我有一个Cloud SQL - MySQL数据库。在Cloud SQL Instance详细信息页面的Authorizations选项卡下,它指出

  

此项目中的应用程序:全部授权。

但是,除非我将0.0.0.0/0路由添加到授权网络部分,否则无法从我的应用程序访问数据库。

如果不向全世界打开我的数据库,我可以做什么来为我的应用程序db访问?

从Jeffery Rennie更新2018-05-21(接受回答)

App Engine现在支持使用端口号而不是unix域套接字连接到Cloud SQL实例。现在,您可以将这样的内容添加到app.yaml

beta_settings:
    cloud_sql_instances: "your-project-id:us-central1:instance-name=tcp:5432"

在appsettings.json中的连接字符串中指定Host=cloudsql

"ConnectionString": "Uid=aspnetuser;Pwd=;Host=cloudsql;Database=visitors"

在上面的示例中,端口是5432,这是PostgreSQL数据库的默认端口。对于MySQL数据库,请使用端口3306。

可以在此处找到有关部署到App Engine的说明的完整示例:

https://github.com/GoogleCloudPlatform/dotnet-docs-samples/tree/master/appengine/flexible/CloudSql

2 个答案:

答案 0 :(得分:7)

理想的解决方案是使用unix domain socket从您的应用引擎实例连接到Cloud SQL。这就是像Python和PHP这样的其他编程语言。不幸的是,MySQL connector不适用于域套接字。我认为没有理由不能,但事实并非如此。我希望他们能尽快解决这个问题。

https://cloud.google.com/appengine/kb/#static-ip中所述,

  

请注意,使用静态IP地址过滤不被视为安全   和有效的保护手段。例如,攻击者可以设置   一个可以共享相同IP地址的恶意App Engine应用程序   范围作为您的申请。相反,我们建议您采取防御措施   使用OAuth和Certs的深度方法。

如果证书不足以保护您的应用程序,那么我今天看到的唯一剩余选项是构建运行custom runtimeCloud SQL Proxy。代理可以将本地IP端口号转发到unix域套接字。如果你已经构建了一个或两个docker图像,那就不算太糟了。

随着情况的改善,我会更新这个答案。

更新2018-05-21

App Engine现在支持使用端口号而不是unix域套接字连接到Cloud SQL实例。现在,您可以将这样的内容添加到app.yaml

beta_settings:
    cloud_sql_instances: "your-project-id:us-central1:instance-name=tcp:5432"

在appsettings.json中的连接字符串中指定Host=cloudsql

"ConnectionString": "Uid=aspnetuser;Pwd=;Host=cloudsql;Database=visitors"

在上面的示例中,端口是5432,这是PostgreSQL数据库的默认端口。对于MySQL数据库,请使用端口3306。

可以在此处找到有关部署到App Engine的说明的完整示例:

https://github.com/GoogleCloudPlatform/dotnet-docs-samples/tree/master/appengine/flexible/CloudSql

答案 1 :(得分:3)

虽然你对这个项目中的应用程序没有错:所有授权的"似乎建议您可以开箱即用,只需将您的App Engine应用程序与Cloud SQL一起使用,但也有局限性。

首先,您的Cloud SQL必须是2nd generation instance,其次,specific instructions依赖于您使用的语言和App Engine类型(标准或灵活性) )。

如果您的情况符合所有要求,它应该有效。

对于您的特定用例,您需要.Net instructions,它确实说您需要添加具有0.0.0.0/0访问权限的网络和用户帐户。用户身份验证+ SSL应该提供您需要的安全性。