Google API 客户端通常会识别GOOGLE_APPLICATION_CREDENTIALS环境变量。如果找到,它应该指向带有服务帐户或用户凭据的 JSON 文件。
可以从 GCP Web 控制台下载服务帐户凭据,如下所示:
{
"type": "service_account",
"project_id": "...",
"private_key_id": "...",
"private_key": "...",
"client_email": "...",
"client_id": "...",
"auth_uri": "...",
"token_uri": "...",
"auth_provider_x509_cert_url": "...",
"client_x509_cert_url": "..."
}
Run Code Online (Sandbox Code Playgroud)
用户凭据通常可用~/.config/gcloud/application_default_credentials.json,如下所示:
{
"client_id": "...",
"client_secret": "...",
"refresh_token": "...",
"type": "authorized_user"
}
Run Code Online (Sandbox Code Playgroud)
这是官方 google rubygem检测通过环境 var 提供的凭据类型的示例。
我想使用两种类型的凭据对未配置的 gcloud 安装进行身份验证。在我们的例子中,我们碰巧将GOOGLE_APPLICATION_CREDENTIALS变量和路径传递到 docker 容器中,但我认为这对于 docker 外部的干净安装也是一个有效的问题。
如果凭据文件是服务帐户类型,我可以这样做:
gcloud auth activate-service-account --key-file=${GOOGLE_APPLICATION_CREDENTIALS}
Run Code Online (Sandbox Code Playgroud)
但是,我看不到任何方法来处理凭据属于真实用户的情况。
问题:
GOOGLE_APPLICATION_CREDENTIALS在可用时使用?GOOGLE_APPLICATION_CREDENTIALS我找到了一种方法,当指向具有用户凭据而不是服务帐户凭据的文件时,对新的 gcloud 进行身份验证。
cat ${GOOGLE_APPLICATION_CREDENTIALS}
{
"client_id": "aaa",
"client_secret": "bbb",
"refresh_token": "ccc",
"type": "authorized_user"
}
gcloud config set auth/client_id aaa
gcloud config set auth/client_secret bbb
gcloud auth activate-refresh-token user ccc
Run Code Online (Sandbox Code Playgroud)
这使用了未记录的auth activate-refresh-token子命令 - 这并不理想 - 但它确实有效。
与 配合使用gcloud auth activate-service-account --key-file=credentials.json,无论可用的凭证类型如何,都可以初始化 gcloud$GOOGLE_APPLICATION_CREDENTIALS
| 归档时间: |
|
| 查看次数: |
7950 次 |
| 最近记录: |