我最近正在积极使用
terraform
和 GCP。但为了 terraform
工作,我需要:
gcloud auth application-default login
对于
gcloud
(我偶尔需要执行gcloud
命令):
gcloud auth login
这两种身份验证方式看起来非常相似。是否可以以某种方式将
application_default_credentials.json
转换为 credentials.db
或反之亦然?
事实上他们是。
确保您同时完成了这两件事:
$ gcloud auth login
$ gcloud auth application-default login
或
$ gcloud auth login --update-adc
完成后,您有 2 个相关文件:
~/.config/gcloud/application_default_credentials.json # ADC
~/.config/gcloud/credentials.db # gcloud
将它们复制到临时目录:
$ cd `mktemp -d`
$ cp ~/.config/gcloud/application_default_credentials.json \
~/.config/gcloud/credentials.db \
.
从
credentials.db
创建 application_default_credentials.json
,反之亦然(用您的数据替换 EMAIL
和 PROJECT_ID
):
$ docker run --rm -itv "$PWD:/app" -w /app alpine:3.19 sh -euc "
apk add sqlite jq
sqlite3 credentials.db \"select value from credentials\" \
| jq \"{client_id, client_secret, refresh_token, type}\" \
> application_default_credentials2.json
sqlite3 credentials2.db \"CREATE TABLE credentials (account_id TEXT PRIMARY KEY, value BLOB)\"
sqlite3 credentials2.db \"INSERT INTO credentials (account_id, value) VALUES ('EMAIL', CAST(readfile('application_default_credentials.json') AS TEXT))\"
# sqlite3 credentials2.db \"INSERT INTO credentials (account_id, value) VALUES ('EMAIL', '\`cat application_default_credentials.json\`')\"
"
然后尝试使用生成的文件(
credential2.db
和application_default_credentials2.json
):
$ docker run -v "$PWD:/app" -w /app google/cloud-sdk:457.0.0-alpine sh -euc '
cp application_default_credentials2.json \
~/.config/gcloud/application_default_credentials.json
gcloud auth application-default print-access-token
'
$ docker run -v "$PWD:/app" -w /app google/cloud-sdk:457.0.0-alpine sh -euc '
cp credentials2.db ~/.config/gcloud/credendials.db
gcloud config set account EMAIL
gcloud config set project PROJECT_ID
gcloud auth print-access-token
gcloud compute instances list
'
更多信息这里。