从 Cloud Function 到 CloudSQL 的连接以 403 Forbbiden 结束,IAM 角色未分配或 CloudSQL API 未启用

问题描述 投票:0回答:0

首先我想提前道歉,我本来打算用我学过的英语写这篇文章,但后来我意识到用 DeepL 翻译它是一个更好的主意。

我在仅从 Cloud Function 连接到 CloudSQL 中托管的数据库时遇到问题,它与 CloudSQL 实例位于同一项目和同一区域中,消息如下:

'aiohttp.client_exceptions.ClientResponseError: 403, message="Forbidden: Authenticated IAM principal does not seeem authorized to make API request. Verify 'Cloud SQL Admin API' is enabled within your GCP project and 'Cloud SQL Client' role has been granted to IAM principal.", url=URL('https://sqladmin.googleapis.com/sql/v1beta4/projects/demobleett/instances/demobleett-test/connectSettings')"

Cloud Function关联的service account有editor role,另外我也试过把报错信息中提到的role加进去,没效果。 奇怪的是,我在另一个项目中以相同的方式实现了相同的功能,而且效果很好。将相同的功能迁移到其他两个项目时,都失败并显示相同的消息。我尝试复制正在运行的项目的 CloudSQL 实例并很好地调整区域,但它也没有用。我不是云方面的专家,我猜想也许地区差异并不那么重要,因为在可行的项目中,一个在圣保罗,另一个在华沙。

CF 源实际上是在另一个项目中工作的代码的 zip,唯一的区别是环境变量,它们对应于它们使用的 API 和与数据库的连接。

实例id、用户、密码、数据库名就不用说了。我们已经在我的工作中停留了好几天,却没有找到真正的解决方案。被ChatGPT弄晕了就在这里咨询哈哈

由于连接在其他项目中有效,所以我没有想到提供用于连接的包和驱动程序。基本上我跟着谷歌文档中的笔记本,我们使用了 SQLAlchemy 和 pg8000。

提前感谢大家,问候。

postgresql google-cloud-platform database-connection
© www.soinside.com 2019 - 2024. All rights reserved.