在本地使用 cloud_sql_proxy 获取 notAuthorized 错误

Posted

技术标签:

【中文标题】在本地使用 cloud_sql_proxy 获取 notAuthorized 错误【英文标题】:Getting notAuthorized error with cloud_sql_proxy locally 【发布时间】:2016-07-24 10:57:51 【问题描述】:

我正在尝试为第二代云 sql 实例在本地设置连接。

调用代理是

./cloud_sql_proxy -dir=/cloudsql -instances=status-1268:us-central1:status-dev=tcp:3306 & mysql -u status_stg --host 127.0.0.1

我有点不清楚如何从 API 部分正确设置服务帐户,因此我尝试了两个默认设置,即应用引擎默认服务帐户和计算引擎默认服务帐户。我还创建了一个新的服务帐户。对于其中的每一个,我从管理权限部分将服务帐户 ID 分配为编辑者和所有者。或许还有其他方法可以为这些帐户启用 Cloud SQL Admin API?

当我的服务尝试与 DB 通信时来自代理的输出:

./cloud_sql_proxy -dir=/cloudsql -instances=status-1268:us-central1:status-   dev=tcp:3306 & mysql -u status_stg --host 127.0.0.1
ERROR 2003 (HY000): Can't connect to MySQL server on '127.0.0.1' (61)
2016/04/04 11:26:58 Open socket for "status-1268:us-central1:status-dev" at     "127.0.0.1:3306"
2016/04/04 11:26:58 Socket prefix: /cloudsql
2016/04/04 11:27:10 Got a connection for "status-1268:us-central1:status-dev"
2016/04/04 11:27:11 couldn't connect to "status-1268:us-central1:status-dev": googleapi: Error 403: The client is not authorized to make this request., notAuthorized
2016/04/04 11:29:08 Got a connection for "status-1268:us-central1:status-dev"
2016/04/04 11:29:08 couldn't connect to "status-1268:us-central1:status-dev": googleapi: Error 403: The client is not authorized to make this request., notAuthorized

对寻找什么的想法?我想我在这里缺少一些基本的配置服务帐户的东西。

(总的来说,对于我的项目,我正在运行一个 node.js express 应用程序并希望将其连接到第二代云 sql 数据库实例,而不必像我目前正在工作的那样使用 0.0.0.0 公开它)

谢谢

【问题讨论】:

【参考方案1】:

请仔细检查连接字符串。听起来您的凭据是有序的,因此您的实例名称可能有错误。

我建议从 Cloud Console 页面复制并粘贴实例的“实例连接名称”:

【讨论】:

我已经通过设置GOOGLE_APPLICATION_CREDENTIALS 环境变量来实现它。如果这不起作用,则在启动代理时会出现另一个错误,提示输入 -credential_file 标志。 啊,我明白了,抱歉,从原始帖子中不清楚。我已经更新了答案——请仔细检查实例名称(包括项目 ID)。 难以置信。感谢您的建议,经过所有的凝视,这确实是一个坏名字。【参考方案2】:

在我的情况下,问题是服务帐户没有正确的角色。您至少应该将其设置为 Editor。

【讨论】:

这也是我的问题,问题中列出了错误消息。默认服务帐户没有正确启动代理所需的编辑权限。【参考方案3】:

出现这种错误的原因有很多。

以下是解决方案:

1) 从 sql 实例“概览”选项卡复制实例名称。

2) 您可能没有cloud sql 客户端的访问权限。

here 更详细。

【讨论】:

【参考方案4】:

TL;DR:如果您的错误日志包含Error during createEphemeral..,请继续阅读。

适合我的解决方案来自Github Cloud-SQL-Proxy Issue Tracker。

您似乎在后端遇到了一个错误,即 当存在同名的旧服务帐户时触发。 请按照以下步骤解决您的问题:

    转到 Cloud Project IAM 页面(左侧菜单 > IAM 和管理 > IAM) 查找存在问题的机器人帐户所在的行。 应该在角色列上显示“Cloud SQL Client”。 点击打开下拉菜单 单击选中的“Cloud SQL 客户端”角色以取消选中它。 点击上方的蓝色保存按钮。 确认服务帐号已从 IAM 页面中删除。 点击同一页面上方的添加按钮。 输入服务帐号电子邮件地址并选择 Cloud SQL 客户端角色 点击添加 服务帐户应再次出现在列表中。

感谢Chees,但积分是我的:P。希望它能解决您的问题。

【讨论】:

非常感谢!这正是我的情况。几天前我创建了 SA,这个 SA 被删除了,我创建了同名的 SA。所以解决方案只是从 IAM 中删除“新”SA,然后使用“Cloud SQL 客户端”再次添加。【参考方案5】:

就我而言,我犯了两个错误:

    确保为云 sql 实例使用正确的项目。

    $gcloud config set project my-project

    使用正确 connectionName。如果你像我一样关注谷歌文档,你最终可能会在你的connectionName 中加上方括号。删除它们。

Myname-MBP:django setoelkahfi$ ./cloud_sql_proxy -instances="[blitzkrig-9f158:us-central1:polls-instance]"=tcp:3306 2018/06/01 04:55:48 Listening on 127.0.0.1:3306 for [blitzkrig-9f158-9f158:us-central1:polls-instance] 2018/06/01 04:55:48 Ready for new connections 2018/06/01 04:56:48 New connection for "[blitzkrig-9f158-9f158:us-central1:polls-instance]" 2018/06/01 04:56:50 couldn't connect to "[blitzkrig-9f158-9f158:us-central1:olls-instance]": ensure that the account has access to "[blitzkrig-9f158-9f158:us-central1:polls-instance]" (and make sure there's no typo in that name). Error during createEphemeral for [blitzkrig-9f158-9f158:us-central1:polls-instance]: googleapi: Error 403: The client is not authorized to make this request., notAuthorized

【讨论】:

【参考方案6】:

另一种看法是,如果您使用-dir 标志意味着您将通过unix-socket 进行连接,这对于MySQL 是一个额外的连接参数并且=tcp:3306 变得多余,当通过127.0.0.1 连接时这将'不起作用,因为它是 TCP 并且它正在套接字上等待连接。

【讨论】:

以上是关于在本地使用 cloud_sql_proxy 获取 notAuthorized 错误的主要内容,如果未能解决你的问题,请参考以下文章

如何在本地使用 wamp 时摆脱 payum“SSL 证书问题:无法获取本地颁发者证书”错误

如何使用 JavaScript 获取本地/内部 IP

如何在 UITableview 中使用 UISearchBar 在本地 JSON 中获取数据?

使用swift后台获取本地通知

使用 RestKit 0.2 从 CoreData 获取本地数据

如何使用 Nuxt.js 在 vuex 状态中获取本地存储数据