Google Cloud SQL代理找不到默认凭据。

29

我正在尝试像这样在本地运行Google Cloud SQL代理:

$ ./cloud_sql_proxy -instances project-name:region-name:instance-id tcp:3306

但它返回的是

google: could not find default credentials. See https://developers.google.com/accounts/docs/application-default-credentials for mor information.

我的 Google Cloud SDK 已经安装并登录到 Google。

我该如何解决这个问题?


给你一个例子 https://www.youtube.com/watch?v=BBxNHjpys7A&t=33s - Tiago Medici
4个回答

54

可能有两个问题导致了你的问题。

要查找登录是什么,使用:

gcloud auth login

1. 您没有应用程序默认凭据

如果您拥有gcloud的最新版本,则会得到以下信息:

WARNING: `gcloud auth login` no longer writes application default credentials.

为使本地应用程序使用您的凭据,您需要执行以下操作(参考):

gcloud auth application-default login

如果您没有看到此警告,请考虑使用以下命令更新gcloud

gcloud components update

2. 你没有定义你的项目

登录后,你应该看到:

Your current project is [project-id].

再次提供两个解决方案:

a. 关联一个项目

如果您没有看到这个选项,请执行 (参考链接)。

gcloud config set project PROJECT_ID

b. 在命令中使用全局参数 --project

在您的命令中关联一个项目:

.\cloud_sql_proxy -instances=project-id:region-name:instance-id=tcp:3306 --project=project-id

13

谷歌应用程序默认凭据和gcloud凭据是分开管理的。

使用

gcloud auth application-default login

改为将用户凭据设置为应用程序默认值。有关详细信息,请参见参考文献

以前的gcloud auth login可以实现此功能,但使用更高版本的Cloud SDK后,不再支持。

请注意,切换gcloud配置或设置帐户不会更新应用程序默认凭据。只能使用gcloud auth application-default命令来管理这些凭据。

此外,要将服务账号用作应用程序默认凭据,您可以直接从开发者控制台下载其JSON密钥。


这个东西仍然返回相同的错误。我尝试了 gcloud auth application-default login 和使用外部服务帐户 JSON 密钥。 - starleaf1
你是否设置了 GOOGLE_APPLICATION_CREDENTIALS 环境变量?另外,你尝试使用 -credential_file 参数了吗? - cherba
1
看起来我必须在gcloud中设置默认项目为我的实例所在的项目。否则,它会返回错误。 - starleaf1

0

如果您在没有浏览器访问权限的CI/CD环境中:

或者您只是想自动化这个过程。

您需要使用变量$GOOGLE_APPLICATION_CREDENTIALS来公开服务帐户JSON文件的位置,而不是运行gcloud auth application-default login

例如:echo "export GOOGLE_APPLICATION_CREDENTIALS=${TF_VAR_gcp_service_account_file_loc}" >> $BASH_ENV(如果您需要在步骤/作业之间移动环境变量)。$BASH_ENV是CircleCI公开的特殊属性,如果您使用不同的CI/CD工具,则需要找到bash配置文件的位置。

或者只需export GOOGLE_APPLICATION_CREDENTIALS=[path-to-service-account-json-file]以在同一步骤中使用


0
在使用cloud_sql_proxy的情况下,方法是使用GCP-GSA(服务账号),下载cloud sql proxy:
wget https://dl.google.com/cloudsql/cloud_sql_proxy.linux.amd64 -O cloud_sql_proxy

chmod +x cloud_sql_proxy

创建代理用户:

gcloud iam service-accounts create proxy-user --display-name "proxy-user"

gcloud iam service-accounts list

[SERVICE_ACCOUNT_EMAIL] 是 SQL 实例详情中的电子邮件。

gcloud projects add-iam-policy-binding [PROJECT_ID] --member \
serviceAccount:[SERVICE_ACCOUNT_EMAIL] --role roles/cloudsql.client

gcloud iam service-accounts keys create key.json --iam-account [SERVICE_ACCOUNT_EMAIL]


gcloud sql instances describe [INSTANCE_ID] | grep connectionName

创建一个用于 Kube 引擎的关键 JSON 文件。
./cloud_sql_proxy -instances=[INSTANCE_CONNECTION_NAME]=tcp:3306 -credential_file=key.json &


kubectl create secret generic cloudsql-instance-credentials --from-file=credentials.json=key.json

您的部署:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: <DEPLOYMENT-NAME>
spec:
  selector:
    matchLabels:
      app: <APPLICATION-NAME>
  template:
    metadata:
      labels:
        app: <APPLICATION-NAME>
    spec:
      serviceAccountName: <KSA-NAME>
      containers:
      - name: cloud-sql-proxy
        image: gcr.io/cloudsql-docker/gce-proxy:1.17
        command:
          - "/cloud_sql_proxy"
          - "-instances=<INSTANCE_CONNECTION_NAME>=tcp:<DB_PORT>"
        securityContext:
          runAsNonRoot: true

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接