相关疑难解决方法(0)

我可以使用服务帐户和用户凭据对 gcloud cli 进行身份验证吗?

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 ruby​​gem检测通过环境 var 提供的凭据类型的示例。

我想使用两种类型的凭据对未配置的 gcloud 安装进行身份验证。在我们的例子中,我们碰巧将GOOGLE_APPLICATION_CREDENTIALS变量和路径传递到 docker 容器中,但我认为这对于 docker 外部的干净安装也是一个有效的问题。

如果凭据文件是服务帐户类型,我可以这样做:

gcloud auth activate-service-account --key-file=${GOOGLE_APPLICATION_CREDENTIALS}
Run Code Online (Sandbox Code Playgroud)

但是,我看不到任何方法来处理凭据属于真实用户的情况。

问题:

  1. 为什么官方 gcloud 工具不遵循其他 google API 客户端使用的约定并GOOGLE_APPLICATION_CREDENTIALS在可用时使用?
  2. 是否有隐藏的方法可以激活用户凭据案例?

gcloud gcloud-cli

8
推荐指数
1
解决办法
7950
查看次数

通过Python中的服务帐户访问Google Cloud Storage的权限

我正在尝试获取一个服务帐户,以便从 Python 脚本中在 Google Cloud Storage 中创建 blob,但我遇到了凭据问题。

1) 我为我的项目创建服务帐户,然后下载 json 格式的密钥文件:

"home/user/.config/gcloud/service_admin.json"
Run Code Online (Sandbox Code Playgroud)

2)我为服务帐户提供必要的凭据(通过子流程中的 gcloud)

 roles/viewer, roles/storage.admin,  roles/resourcemanager.projectCreator, roles/billing.user
Run Code Online (Sandbox Code Playgroud)

然后我想访问GCS中的一个bucket

from google.cloud import storage
import google.auth

credentials, project = google.auth.default()
client = storage.Client('myproject', credentials=credentials)
bucket = client.get_bucket('my_bucket')
Run Code Online (Sandbox Code Playgroud)

不幸的是,这会导致:

google.api_core.exceptions.Forbidden: 403 GET
https://www.googleapis.com/storage/v1/b/my_bucket?projection=noAcl:
s_account@myproject.iam.gserviceaccount.com does not have
storage.buckets.get access to my_bucket
Run Code Online (Sandbox Code Playgroud)

如果我设置环境变量,我的运气会更好一些

export GOOGLE_APPLICATION_CREDENTIALS="home/user/.config/gcloud/service_admin.json"
Run Code Online (Sandbox Code Playgroud)

并重新运行脚本。但是,我希望这一切都在创建帐户的脚本的一个实例中运行,并继续在存储桶中创建必要的文件。如果我知道我的 json 凭证文件在哪里,如何访问 my_bucket。

google-cloud-storage google-cloud-platform google-cloud-python

6
推荐指数
1
解决办法
1万
查看次数