我在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
答案 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 runtime的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"
在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应该提供您需要的安全性。