我有一个用于升级的集群,使用CloudSQL已经使用了一年多,现在我想调出另一个指向相同数据库进行测试的GKE集群(相同的Google项目)。但是,尝试在新群集中的旧群集中使用凭据.json时遇到错误。
googleapi: Error 403: The client is not authorized to make this request., notAuthorized"
我一直在寻找IAM,以寻找一种方法来打开对新集群的权限,但是即使我看到一个具有“ Cloud SQL Client”角色的服务帐户,也没有找到一种方法。
共享凭据或打开权限的正确方法是什么(或者我需要为此创建一个新的服务帐户)?
我们的模板部署Yaml如下:
- name: postgres-proxy
image: gcr.io/cloudsql-docker/gce-proxy:1.09
imagePullPolicy: Always
command: ["/cloud_sql_proxy",
"--dir=/cloudsql",
"-instances=@@PROJECT@@:us-central1:@@DBINST@@=tcp:5432",
"-credential_file=/secrets/cloudsql/credentials.json"]
volumeMounts:
- name: cloudsql-oauth-credentials
mountPath: /secrets/cloudsql
readOnly: true
- name: ssl-certs
mountPath: /etc/ssl/certs
- name: cloudsql
mountPath: /cloudsql
答案 0 :(得分:1)
当您从某些Google API收到错误403时,会出现IAM权限错误。要解决此问题,请确保将“ Cloud SQL Client”角色分配给您的服务帐户。要检查向您的服务帐户中添加了哪些权限,请转到Cloud Project IAM页面(左侧菜单> IAM&Admin> IAM),然后查找出现问题的服务帐户所在的行。服务帐户应在“角色”列上说“ Cloud SQL Client”。
如果发现“ Cloud SQL Client”角色未添加到服务帐户中,请尝试遵循this document中概述的说明。如果该服务帐户尚未在成员列表中,则不会为其分配任何角色。单击添加,然后输入服务帐户的电子邮件地址。如果该服务帐户已经在成员列表中,则它具有现有角色。单击您要编辑的服务帐户的“角色”下的下拉列表,或者可以将“ Cloud SQL Client”角色作为附加角色添加到服务帐户。您需要从“ Cloud SQL”下的下拉列表中选择“ Cloud SQL Client”角色。
如果您看到“ Cloud SQL Client”角色已经存在,请单击“编辑”以打开下拉列表。之后,单击删除并保存。请确保该服务帐户已从IAM页面中删除。单击Cloud Project IAM页面顶部的ADD按钮。输入服务帐户的电子邮件地址,然后从“ Cloud SQL”下的下拉列表中选择“ Cloud SQL Client”角色。之后,单击“保存”按钮,服务帐户应再次出现在列表下方。这样一来,我们将删除服务帐户,然后再次为其添加权限。
您还可以尝试添加this document中概述的新服务帐户,并从“ Cloud SQL”下的下拉列表中选择“ Cloud SQL Client”角色。请注意,您需要“服务帐户管理员”角色或“编辑者”原语角色来执行操作。
如果仍然不能解决问题,请确保“ Cloud SQL Instance”名称正确。您可以按照此StackOverflow issue所述从Cloud SQL实例的Google Cloud Console页面复制并粘贴“实例连接名称”。
或者by updating the secret to use the right key也可以解决此问题。您可以为一个服务帐户创建多个密钥。
答案 1 :(得分:1)
GKE当前支持专用IP地址连接。如果您在同一区域中并且群集启用了IP别名,则可以连接到Cloud SQL群集。