Google 云 SQL 代理找不到默认凭据
Google Cloud SQL proxy couldn't find default credentials
我正在尝试 运行 Google 云 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。
我该如何解决这个问题?
Google 应用程序默认凭据与 gcloud 凭据分开管理。
使用
gcloud auth application-default login
而不是将您的用户凭据设置为应用程序默认值。有关详细信息,请参阅 reference。
以前 gcloud auth login
这样做过,但在更新的 Cloud SDK 版本中不再是这种情况。
请注意,切换 gcloud 配置或设置帐户不会更新应用程序默认凭据。只有 gcloud auth application-default
中的命令可用于管理这些。
还可以使用服务帐户作为应用程序默认凭据,您可以通过从开发人员 console.
下载其 json 密钥直接使用它
可能有两个问题导致了您的问题。
要查找什么是登录,使用:
gcloud auth login
1。您没有应用程序默认凭据
如果您有最新版本的 gcloud,您将获得:
WARNING: `gcloud auth login` no longer writes application default credentials.
要让您的本地应用程序使用您的凭据,您需要执行 (ref):
gcloud auth application-default login
如果您没有看到此警告,请考虑 updating gcloud,其中:
gcloud components update
2。你还没有定义你的项目
登录后,您应该看到:
Your current project is [project-id].
再次两种解法:
一个。关联项目
如果您没有看到,请执行 (ref):
gcloud config set project PROJECT_ID
b。在调用中使用全局 --project
标志
在你的命令中关联一个项目:
.\cloud_sql_proxy -instances=project-id:region-name:instance-id=tcp:3306 --project=project-id
如果您处于无法访问浏览器的 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
(如果您需要在 steps/jobs 之间移动环境变量)。 $BASH_ENV
是 CircleCI 公开的特殊 属性,如果您使用不同的 CI/CD 工具,您将需要找到 bash 配置文件的位置。
或简单地 export GOOGLE_APPLICATION_CREDENTIALS=[path-to-service-account-json-file]
在同一步骤中使用
在这种情况下使用 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
我正在尝试 运行 Google 云 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。
我该如何解决这个问题?
Google 应用程序默认凭据与 gcloud 凭据分开管理。
使用
gcloud auth application-default login
而不是将您的用户凭据设置为应用程序默认值。有关详细信息,请参阅 reference。
以前 gcloud auth login
这样做过,但在更新的 Cloud SDK 版本中不再是这种情况。
请注意,切换 gcloud 配置或设置帐户不会更新应用程序默认凭据。只有 gcloud auth application-default
中的命令可用于管理这些。
还可以使用服务帐户作为应用程序默认凭据,您可以通过从开发人员 console.
下载其 json 密钥直接使用它可能有两个问题导致了您的问题。
要查找什么是登录,使用:
gcloud auth login
1。您没有应用程序默认凭据
如果您有最新版本的 gcloud,您将获得:
WARNING: `gcloud auth login` no longer writes application default credentials.
要让您的本地应用程序使用您的凭据,您需要执行 (ref):
gcloud auth application-default login
如果您没有看到此警告,请考虑 updating gcloud,其中:
gcloud components update
2。你还没有定义你的项目
登录后,您应该看到:
Your current project is [project-id].
再次两种解法:
一个。关联项目
如果您没有看到,请执行 (ref):
gcloud config set project PROJECT_ID
b。在调用中使用全局 --project
标志
在你的命令中关联一个项目:
.\cloud_sql_proxy -instances=project-id:region-name:instance-id=tcp:3306 --project=project-id
如果您处于无法访问浏览器的 CI/CD 环境中:
或者如果您只是想自动执行该过程。
您需要使用变量 $GOOGLE_APPLICATION_CREDENTIALS
gcloud auth application-default login
例如echo "export GOOGLE_APPLICATION_CREDENTIALS=${TF_VAR_gcp_service_account_file_loc}" >> $BASH_ENV
(如果您需要在 steps/jobs 之间移动环境变量)。 $BASH_ENV
是 CircleCI 公开的特殊 属性,如果您使用不同的 CI/CD 工具,您将需要找到 bash 配置文件的位置。
或简单地 export GOOGLE_APPLICATION_CREDENTIALS=[path-to-service-account-json-file]
在同一步骤中使用
在这种情况下使用 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