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

Don*_*out 11 google-app-engine google-cloud-sql google-cloud-platform .net-core app-engine-flexible

我在Google App Engine Flexible Environment中运行了一个dotnet core 2.0应用程序.在同一个Google项目中,我有一个Cloud SQL - MySQL数据库.在Cloud SQL Instance详细信息页面的"授权"选项卡下,它指出

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

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

如何在不向全世界打开数据库的情况下为我的应用程序数据库访问提供什么?


来自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"
Run Code Online (Sandbox Code Playgroud)

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

"ConnectionString": "Uid=aspnetuser;Pwd=;Host=cloudsql;Database=visitors"
Run Code Online (Sandbox Code Playgroud)

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

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

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

Jef*_*nie 8

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

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

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

如果证书不足以保护您的应用程序,那么我今天看到的唯一剩余选项是构建运行Cloud 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"
Run Code Online (Sandbox Code Playgroud)

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

"ConnectionString": "Uid=aspnetuser;Pwd=;Host=cloudsql;Database=visitors"
Run Code Online (Sandbox Code Playgroud)

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

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

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

  • Lafexlos,Google的工程师正致力于改善这种体验.我正在积极跟踪和推动这个问题. (2认同)