Google Cloud SQL代理无法找到默认凭据

时间:2016-12-19 04:14:55

标签: google-cloud-platform google-cloud-sql google-cloud-sdk

我正在尝试像这样在本地运行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。

我该如何解决这个问题?

4 个答案:

答案 0 :(得分:39)

两个问题可能会产生问题。

要查找登录内容,请使用:

tf.layers.average_pooling2d(x, [11, 40], [11, 40])

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

如果您有最新版本的gcloud,您将获得:

gcloud auth login

要使您的本地应用程序使用您需要执行的凭据(ref):

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

如果您没有看到此警告,请考虑updating gcloud,并使用:

gcloud auth application-default login

2。您尚未定义项目

登录后,您应该看到:

gcloud components update

再次提出两个解决方案:

一个。关联项目

如果您没有看到这一点,请执行(ref):

Your current project is [project-id].

湾在呼叫

中使用全局gcloud config set project PROJECT_ID 标志

在命令中关联项目:

--project

答案 1 :(得分:9)

Google应用程序默认凭据与gcloud凭据分开管理。

使用

gcloud auth application-default login

而是将您的用户凭据设置为应用程序默认值。有关详细信息,请参阅reference

之前gcloud auth login执行了此操作,但使用更新的Cloud SDK版本已不再适用。

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

另外,要将服务帐户用作应用程序默认凭据,您可以直接从开发人员console下载其json密钥来使用它。

答案 2 :(得分:0)

在这种情况下,使用cloud_sql_proxy的方法是使用GCP-GSA(服务帐户), 下载云SQL代理:

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

答案 3 :(得分:-1)

如果您处于CI / CD环境中而无法访问浏览器:

,或者如果您只是想自动化该过程。

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

例如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],可在同一步骤中使用