如何通过Python使用私有IP从GKE连接Cloud SQL?权限问题排查
问题排查方案
核心差异说明
bash通过mysql -u root -p --host X.X.X.X --port 3306直接连接IP端口,不需要调用GCP的Cloud SQL Admin API;而你用的Cloud SQL Connector需要先调用该API获取实例连接配置,所以403错误的根源在于API权限或启用状态。
具体排查步骤
确认Cloud SQL Admin API已启用
登录GCP控制台,搜索「Cloud SQL Admin API」,查看API状态是否为「已启用」。如果未启用,点击「启用」按钮开启服务,等待几分钟生效。验证IAM主体的权限配置
- 确定Python应用使用的IAM主体:
- 如果是GKE Pod,对应工作负载绑定的服务账号;
- 如果是本地测试,对应当前
gcloud auth登录的账号,或GOOGLE_APPLICATION_CREDENTIALS环境变量指向的服务账号密钥所属账号。
- 给该IAM主体授予Cloud SQL Client(
roles/cloudsql.client)角色,可在项目级别或目标Cloud SQL实例级别配置权限,确保没有拒绝(Deny)政策限制该权限。
- 确定Python应用使用的IAM主体:
检查服务账号密钥(若使用)
如果应用通过服务账号密钥文件认证,确认:- 密钥文件对应的服务账号已被授予Cloud SQL Client角色;
GOOGLE_APPLICATION_CREDENTIALS环境变量正确指向密钥文件路径;- 密钥文件未过期、格式正确。
验证INSTANCE_CONNECTION_NAME格式
检查代码中的INSTANCE_CONNECTION_NAME是否符合项目ID:区域:实例ID的格式,例如错误信息中的项目manifest-altar-223913和实例rapminerz-apps,正确格式应为manifest-altar-223913:实例所在区域:rapminerz-apps。测试API调用权限
用gcloud命令模拟Connector的API调用,验证权限是否生效:gcloud sql instances get-connect-settings rapminerz-apps --project manifest-altar-223913若该命令返回403,说明权限未配置到位;若能正常返回实例配置,则再测试Python代码。
内容的提问来源于stack exchange,提问作者Noa Be
相关产品推荐
相关产品推荐

